Merge branch 'dev' into generated-pcm-stream
This commit is contained in:
commit
a63df74bb6
@ -7,6 +7,8 @@ The script/test name without the path and extension is available as `app.script`
|
||||
local filename = "script:"..app.script..".lua"
|
||||
```
|
||||
|
||||
Since the control script may not belong to any of the packs, it does not belongs to its own package and has its own global namespace in which all global functions and tables are available, as well as the `app` library.
|
||||
|
||||
## Functions
|
||||
|
||||
```lua
|
||||
|
||||
@ -7,6 +7,8 @@
|
||||
local filename = "script:"..app.script..".lua"
|
||||
```
|
||||
|
||||
Так как управляющий сценарий может не принадлежать ни одному из паков, он не относиться к своему паку и имеет собственное пространство имён, в котором доступны все глобальные функции и таблицы, а также библиотека `app`.
|
||||
|
||||
## Функции
|
||||
|
||||
```lua
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
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()
|
||||
|
||||
@ -114,6 +114,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})
|
||||
chunk = setfenv(chunk, script_env)
|
||||
return __vc_start_coroutine(chunk, path)
|
||||
end
|
||||
|
||||
gui_util = require "core:internal/gui_util"
|
||||
|
||||
@ -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()
|
||||
);
|
||||
|
||||
|
||||
@ -19,6 +19,8 @@
|
||||
#include "graphics/ui/gui_util.hpp"
|
||||
#include "graphics/ui/markdown.hpp"
|
||||
#include "graphics/core/Font.hpp"
|
||||
#include "content/Content.hpp"
|
||||
#include "content/ContentPack.hpp"
|
||||
#include "items/Inventories.hpp"
|
||||
#include "util/stringutil.hpp"
|
||||
#include "world/Level.hpp"
|
||||
@ -1027,13 +1029,17 @@ static int l_gui_load_document(lua::State* L) {
|
||||
io::path filename = lua::require_string(L, 1);
|
||||
auto alias = lua::require_string(L, 2);
|
||||
auto args = lua::tovalue(L, 3);
|
||||
auto prefix = filename.entryPoint();
|
||||
|
||||
auto env = scripting::get_root_environment();
|
||||
if (content) {
|
||||
if (auto runtime = content->getPackRuntime(prefix)) {
|
||||
env = runtime->getEnvironment();
|
||||
}
|
||||
}
|
||||
|
||||
auto documentPtr = UiDocument::read(
|
||||
engine->getGUI(),
|
||||
scripting::get_root_environment(),
|
||||
alias,
|
||||
filename,
|
||||
filename.string()
|
||||
engine->getGUI(), std::move(env), alias, filename, filename.string()
|
||||
);
|
||||
auto document = documentPtr.get();
|
||||
engine->getAssets()->store(std::move(documentPtr), alias);
|
||||
|
||||
@ -150,12 +150,10 @@ std::unique_ptr<IClientProjectScript> scripting::load_client_project_script(
|
||||
return std::make_unique<LuaProjectScript>(L, std::move(env));
|
||||
}
|
||||
|
||||
std::unique_ptr<Process> scripting::start_coroutine(const io::path& script) {
|
||||
std::unique_ptr<Process> scripting::start_app_script(const io::path& script) {
|
||||
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());
|
||||
if (lua::getglobal(L, "__vc_start_app_script")) {
|
||||
lua::pushstring(L, script.string());
|
||||
if (lua::call(L, 1)) {
|
||||
int id = lua::tointeger(L, -1);
|
||||
lua::pop(L, 1);
|
||||
|
||||
@ -76,7 +76,7 @@ namespace scripting {
|
||||
const io::path& script
|
||||
);
|
||||
|
||||
std::unique_ptr<Process> start_coroutine(const io::path& script);
|
||||
std::unique_ptr<Process> start_app_script(const io::path& script);
|
||||
|
||||
void on_world_load(LevelController* controller);
|
||||
void on_world_tick(int tps);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user