From 68b8a148d7e97fb94407b211ff8514fccaaa36d7 Mon Sep 17 00:00:00 2001 From: Petr Mikheev Date: Sat, 17 Jul 2021 20:12:41 +0200 Subject: [PATCH] Initialize Lua packages in LuaManager::init rather than in constructor. --- apps/openmw/mwlua/luamanagerimp.cpp | 10 +++++++--- apps/openmw/mwlua/luamanagerimp.hpp | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwlua/luamanagerimp.cpp b/apps/openmw/mwlua/luamanagerimp.cpp index e01273bb84..b02dbbc296 100644 --- a/apps/openmw/mwlua/luamanagerimp.cpp +++ b/apps/openmw/mwlua/luamanagerimp.cpp @@ -31,7 +31,10 @@ namespace MWLua mLocalLoader = createUserdataSerializer(true, mWorldView.getObjectRegistry(), &mContentFileMapping); mGlobalScripts.setSerializer(mGlobalSerializer.get()); + } + void LuaManager::init() + { Context context; context.mIsGlobal = true; context.mLuaManager = this; @@ -60,14 +63,12 @@ namespace MWLua mCameraPackage = initCameraPackage(localContext); mUserInterfacePackage = initUserInterfacePackage(localContext); mNearbyPackage = initNearbyPackage(localContext); - } - void LuaManager::init() - { mKeyPressEvents.clear(); for (const std::string& path : mGlobalScriptList) if (mGlobalScripts.addNewScript(path)) Log(Debug::Info) << "Global script started: " << path; + mInitialized = true; } void LuaManager::update(bool paused, float dt) @@ -198,6 +199,8 @@ namespace MWLua void LuaManager::setupPlayer(const MWWorld::Ptr& ptr) { + if (!mInitialized) + return; if (!mPlayer.isEmpty()) throw std::logic_error("Player is initialized twice"); mWorldView.objectAddedToScene(ptr); @@ -279,6 +282,7 @@ namespace MWLua LocalScripts* LuaManager::createLocalScripts(const MWWorld::Ptr& ptr) { + assert(mInitialized); std::shared_ptr scripts; // When loading a game, it can be called before LuaManager::setPlayer, // so we can't just check ptr == mPlayer here. diff --git a/apps/openmw/mwlua/luamanagerimp.hpp b/apps/openmw/mwlua/luamanagerimp.hpp index df87457b23..a212f213c0 100644 --- a/apps/openmw/mwlua/luamanagerimp.hpp +++ b/apps/openmw/mwlua/luamanagerimp.hpp @@ -70,6 +70,7 @@ namespace MWLua private: LocalScripts* createLocalScripts(const MWWorld::Ptr& ptr); + bool mInitialized = false; LuaUtil::LuaState mLua; sol::table mNearbyPackage; sol::table mUserInterfacePackage;