From ca6096c397639f6f627e806eafa8ca0aa2f295d7 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 4 Nov 2025 11:53:48 +0300 Subject: [PATCH] minor refactor --- res/layouts/pages/scripts.xml.lua | 12 ++---------- res/scripts/stdlib.lua | 14 ++++++++++++++ src/engine/ServerMainloop.cpp | 3 +-- src/logic/scripting/scripting.cpp | 13 +++++++++++-- src/logic/scripting/scripting.hpp | 1 + 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/res/layouts/pages/scripts.xml.lua b/res/layouts/pages/scripts.xml.lua index dad0d1ff..72c3246f 100644 --- a/res/layouts/pages/scripts.xml.lua +++ b/res/layouts/pages/scripts.xml.lua @@ -1,18 +1,10 @@ function run_script(path) - debug.log("starting application script "..path) - - local code = file.read(path) - local chunk, err = loadstring(code, path) - if chunk == nil then - error(err) - end - setfenv(chunk, setmetatable({app=__vc_app}, {__index=_G})) - start_coroutine(chunk, path) + __vc_start_app_script(path) end function refresh() document.list:clear() - + local allpacks = table.merge(pack.get_available(), pack.get_installed()) local infos = pack.get_info(allpacks) for _, name in ipairs(allpacks) do diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 3f732e07..447f7dd4 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -186,6 +186,20 @@ events = require "core:internal/events" function pack.unload(prefix) events.remove_by_prefix(prefix) + __vc__pack_envs[prefix] = nil +end + +function __vc_start_app_script(path) + debug.log("starting application script "..path) + + local code = file.read(path) + local chunk, err = loadstring(code, path) + if chunk == nil then + error(err) + end + local script_env = setmetatable({app = app or __vc_app}, {__index=_G}) + setfenv(chunk, script_env) + return start_coroutine(chunk, path) end gui_util = require "core:internal/gui_util" diff --git a/src/engine/ServerMainloop.cpp b/src/engine/ServerMainloop.cpp index 2f446533..ab35ffbd 100644 --- a/src/engine/ServerMainloop.cpp +++ b/src/engine/ServerMainloop.cpp @@ -32,8 +32,7 @@ void ServerMainloop::run() { setLevel(std::move(level)); }); - logger.info() << "starting test " << coreParams.scriptFile.string(); - auto process = scripting::start_coroutine( + auto process = scripting::start_app_script( "script:" + coreParams.scriptFile.filename().u8string() ); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 4d3672f1..c15f30aa 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -151,9 +151,10 @@ std::unique_ptr scripting::load_client_project_script( return std::make_unique(L, std::move(env)); } -std::unique_ptr scripting::start_coroutine(const io::path& script) { +static std::unique_ptr start_lua_coroutine( + const io::path& script, const std::string& method +) { auto L = lua::get_main_state(); - auto method = "__vc_start_coroutine"; if (lua::getglobal(L, method)) { auto source = io::read_string(script); lua::loadbuffer(L, 0, source, script.name()); @@ -167,6 +168,14 @@ std::unique_ptr scripting::start_coroutine(const io::path& script) { return nullptr; } +std::unique_ptr scripting::start_coroutine(const io::path& script) { + return start_lua_coroutine(script, "__vc_start_coroutine"); +} + +std::unique_ptr scripting::start_app_script(const io::path& script) { + return start_lua_coroutine(script, "__vc_start_app_script"); +} + [[nodiscard]] scriptenv scripting::get_root_environment() { return std::make_shared(0); } diff --git a/src/logic/scripting/scripting.hpp b/src/logic/scripting/scripting.hpp index 5a86b81d..2f45ae60 100644 --- a/src/logic/scripting/scripting.hpp +++ b/src/logic/scripting/scripting.hpp @@ -77,6 +77,7 @@ namespace scripting { ); std::unique_ptr start_coroutine(const io::path& script); + std::unique_ptr start_app_script(const io::path& script); void on_world_load(LevelController* controller); void on_world_tick(int tps);