diff --git a/demo/data/rollball.lua b/demo/data/rollball.lua index 1221bc17c5a1bc3a13277f25d3e9ac1f46dc271d..7c16c4b72d266b9ba0800ff03b5891130da01e1d 100644 --- a/demo/data/rollball.lua +++ b/demo/data/rollball.lua @@ -1 +1,2 @@ -print("File has been loaded!") \ No newline at end of file +print("File has been loaded!") +print(state); \ No newline at end of file diff --git a/demo/demo/rollball.cpp b/demo/demo/rollball.cpp index 55f86311a4ca27a8e96c5824a0c441dcba10833f..c594b320d25862fe824003e668162e1f643e1a40 100644 --- a/demo/demo/rollball.cpp +++ b/demo/demo/rollball.cpp @@ -81,7 +81,9 @@ namespace demo { m_phys = physService->create(&world(), entFactory); auto* scriptProvider = m_owner.service<fggl::script::ScriptProvider>(); + m_scripts = scriptProvider->create(); + m_scripts->setGlobal("state", this); // asset loader auto* assetLoader = m_owner.service<fggl::assets::Loader>(); diff --git a/include/fggl/script/engine.hpp b/include/fggl/script/engine.hpp index f81d7f1f6aa7226bae0335da093de01f6327e8fe..fb566cf21009ac979a9a9510c0a5eefffd0efc8f 100644 --- a/include/fggl/script/engine.hpp +++ b/include/fggl/script/engine.hpp @@ -40,6 +40,8 @@ namespace fggl::script { // run code in engine virtual bool run(const char* script) = 0; virtual bool load(const char* filename) = 0; + + virtual void setGlobal(const char* name, void* ptr) = 0; }; class ScriptProvider { diff --git a/integrations/lua/include/fggl/script/lua/engine.hpp b/integrations/lua/include/fggl/script/lua/engine.hpp index 0442c7486199daa339e8ebebbecb5570d1c3321a..dcce6f2ad2ae99a7f24a01afdba7be157b5b5c85 100644 --- a/integrations/lua/include/fggl/script/lua/engine.hpp +++ b/integrations/lua/include/fggl/script/lua/engine.hpp @@ -45,6 +45,9 @@ namespace fggl::script::lua { bool run(const char* script) override; bool load(const char* filename) override; + // variables + void setGlobal(const char* name, void* ptr) override; + private: data::Storage* m_storage; lua_State* m_state; diff --git a/integrations/lua/src/engine.cpp b/integrations/lua/src/engine.cpp index 984b5885a54fc93fad1a9b8cf1e9887f50149b95..e171ef8da9e8286378f24a76ab4d1785654d2d01 100644 --- a/integrations/lua/src/engine.cpp +++ b/integrations/lua/src/engine.cpp @@ -95,4 +95,9 @@ namespace fggl::script::lua { return true; } + void LuaScriptEngine::setGlobal(const char *name, void *ptr) { + lua_pushlightuserdata(m_state, ptr); + lua_setglobal(m_state, name); + } + } \ No newline at end of file