From 8e8cabf2d1707725a8b38e48a8c183c448a452d1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 24 Apr 2025 22:42:15 +0300 Subject: [PATCH] add data argument to container:add(...) --- src/logic/scripting/lua/libs/libgui.cpp | 10 +++++++++- src/logic/scripting/scripting.cpp | 16 ++++++++++++++++ src/logic/scripting/scripting.hpp | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index 3fb5fcde..e1180e1c 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -83,8 +83,16 @@ static int l_container_add(lua::State* L) { } auto xmlsrc = lua::require_string(L, 2); try { + auto env = docnode.document->getEnvironment(); + if (lua::istable(L, 3)) { + env = create_environment(std::move(env)); + lua::pushenv(L, *env); + lua::pushvalue(L, 3); + lua::setfield(L, "DATA"); + lua::pop(L); + } auto subnode = guiutil::create( - engine->getGUI(), xmlsrc, docnode.document->getEnvironment() + engine->getGUI(), xmlsrc, std::move(env) ); node->add(subnode); UINode::getIndices(subnode, docnode.document->getMapWriteable()); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 5ebbb42b..2d95fdaa 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -154,6 +154,22 @@ std::unique_ptr scripting::start_coroutine( }); } +[[nodiscard]] scriptenv scripting::create_environment( + const scriptenv& parent +) { + auto L = lua::get_main_state(); + int id = lua::create_environment(L, (parent ? *parent : 0)); + lua::pushenv(L, id); + lua::pushvalue(L, -1); + lua::setfield(L, "CUR_ENV"); + + lua::pop(L); + return std::shared_ptr(new int(id), [=](int* id) { //-V508 + lua::remove_environment(L, *id); + delete id; + }); +} + [[nodiscard]] scriptenv scripting::create_doc_environment( const scriptenv& parent, const std::string& name ) { diff --git a/src/logic/scripting/scripting.hpp b/src/logic/scripting/scripting.hpp index e5f4ef32..0f375746 100644 --- a/src/logic/scripting/scripting.hpp +++ b/src/logic/scripting/scripting.hpp @@ -58,6 +58,7 @@ namespace scripting { scriptenv get_root_environment(); scriptenv create_pack_environment(const ContentPack& pack); + scriptenv create_environment(const scriptenv& parent); scriptenv create_doc_environment( const scriptenv& parent, const std::string& name );