From c7bc4bb463a4072b8887df841f74cd3d3e1fa519 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 21 Mar 2024 01:40:07 +0300 Subject: [PATCH] post-runnables --- res/scripts/stdlib.lua | 15 +++++++++++++++ src/engine.cpp | 1 + src/logic/scripting/scripting.cpp | 6 ++++++ src/logic/scripting/scripting.h | 2 ++ 4 files changed, 24 insertions(+) diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index d00f34b5..cfff1eda 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -184,6 +184,21 @@ _GUI_ROOT = Document.new("core:root") _MENU = _GUI_ROOT.menu menu = _MENU +local __post_runnables = {} + +function __process_post_runnables() + if #__post_runnables then + for _, func in ipairs(__post_runnables) do + func() + end + __post_runnables = {} + end +end + +function time.post_runnable(runnable) + table.insert(__post_runnables, runnable) +end + -- Deprecated functions block_index = block.index block_name = block.name diff --git a/src/engine.cpp b/src/engine.cpp index f8d88015..2758f477 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -170,6 +170,7 @@ void Engine::mainloop() { postRunnables.front()(); postRunnables.pop(); } + scripting::process_post_runnables(); Window::swapBuffers(); Events::pollEvents(); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 8624a394..be74ab8b 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -97,6 +97,12 @@ std::unique_ptr scripting::create_doc_environment(int parent, const return std::make_unique(id); } +void scripting::process_post_runnables() { + if (state->getglobal("__process_post_runnables")) { + state->callNoThrow(0); + } +} + void scripting::on_world_load(Level* level, BlocksController* blocks) { scripting::level = level; scripting::content = level->content; diff --git a/src/logic/scripting/scripting.h b/src/logic/scripting/scripting.h index fd521c22..5fa803c3 100644 --- a/src/logic/scripting/scripting.h +++ b/src/logic/scripting/scripting.h @@ -52,6 +52,8 @@ namespace scripting { std::unique_ptr create_pack_environment(const ContentPack& pack); std::unique_ptr create_doc_environment(int parent, const std::string& name); + void process_post_runnables(); + void on_world_load(Level* level, BlocksController* blocks); void on_world_tick(); void on_world_save();