From 617017d9795967b1e50134db7706293e616c8f14 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 12 Feb 2024 03:22:08 +0300 Subject: [PATCH] content-pack specific variables PACK_ENV and PACK_ID --- src/content/ContentLoader.cpp | 2 +- src/logic/scripting/LuaState.cpp | 5 +++++ src/logic/scripting/LuaState.h | 1 + src/logic/scripting/scripting.cpp | 12 ++++++++++-- src/logic/scripting/scripting.h | 2 ++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index 4f803ec0..740ad1de 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -274,7 +274,7 @@ void ContentLoader::loadItem(ItemDef& def, std::string full, std::string name) { void ContentLoader::load(ContentBuilder& builder) { std::cout << "-- loading pack [" << pack->id << "]" << std::endl; - auto runtime = new ContentPackRuntime(*pack, scripting::create_environment()); + auto runtime = new ContentPackRuntime(*pack, scripting::create_pack_environment(*pack)); builder.add(runtime); env = runtime->getEnvironment()->getId(); diff --git a/src/logic/scripting/LuaState.cpp b/src/logic/scripting/LuaState.cpp index 662994eb..2ae3c085 100644 --- a/src/logic/scripting/LuaState.cpp +++ b/src/logic/scripting/LuaState.cpp @@ -181,6 +181,11 @@ int lua::LuaState::pushenv(int env) { return 0; } +int lua::LuaState::pushvalue(int idx) { + lua_pushvalue(L, idx); + return 1; +} + int lua::LuaState::pushglobals() { lua_pushvalue(L, LUA_GLOBALSINDEX); return 1; diff --git a/src/logic/scripting/LuaState.h b/src/logic/scripting/LuaState.h index 9c049bc1..6d606c5e 100644 --- a/src/logic/scripting/LuaState.h +++ b/src/logic/scripting/LuaState.h @@ -32,6 +32,7 @@ namespace lua { int pushnumber(luanumber x); int pushstring(const std::string& str); int pushenv(int env); + int pushvalue(int idx); int pushnil(); int pushglobals(); void pop(int n=1); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 124a9ca8..4baea4b3 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -95,6 +95,16 @@ std::unique_ptr scripting::create_environment(int parent) { return std::make_unique(state->createEnvironment(parent)); } +std::unique_ptr scripting::create_pack_environment(const ContentPack& pack) { + int id = state->createEnvironment(0); + state->pushenv(id); + state->pushvalue(-1); + state->setfield("PACK_ENV"); + state->pushstring(pack.id); + state->setfield("PACK_ID"); + return std::make_unique(id); +} + void scripting::on_world_load(Level* level, BlocksController* blocks) { scripting::level = level; scripting::content = level->content; @@ -230,8 +240,6 @@ bool register_event(int env, const std::string& name, const std::string& id) { // remove previous name state->pushnil(); state->setfield(name, -3); - - std::cout << id << std::endl; // add new global name state->setglobal(id); state->pop(); diff --git a/src/logic/scripting/scripting.h b/src/logic/scripting/scripting.h index 13e7bb1d..bd51a886 100644 --- a/src/logic/scripting/scripting.h +++ b/src/logic/scripting/scripting.h @@ -9,6 +9,7 @@ class LuaState; class Engine; class Content; +class ContentPack; class ContentIndices; class Level; class Block; @@ -52,6 +53,7 @@ namespace scripting { ); std::unique_ptr create_environment(int parent=0); + std::unique_ptr create_pack_environment(const ContentPack& pack); void on_world_load(Level* level, BlocksController* blocks); void on_world_save();