A few initialization cleanups
authorsfan5 <sfan5@live.de>
Fri, 10 Apr 2020 19:45:07 +0000 (21:45 +0200)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Sat, 11 Apr 2020 11:12:51 +0000 (13:12 +0200)
src/client/client.cpp
src/client/game.cpp
src/script/scripting_client.cpp
src/script/scripting_client.h

index c9cd24cb3f000b4cefe10c113fa67161cfadf111..c3e2a4d2abcca17e4f3d54f28b9cc54af71b8392 100644 (file)
@@ -178,7 +178,7 @@ void Client::loadMods()
                infostream << mod.name << " ";
        infostream << std::endl;
 
-       // Load and run "mod" scripts
+       // Load "mod" scripts
        for (const ModSpec &mod : m_mods) {
                if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) {
                        throw ModError("Error loading mod \"" + mod.name +
@@ -188,7 +188,7 @@ void Client::loadMods()
                scanModIntoMemory(mod.name, mod.path);
        }
 
-       // Load and run "mod" scripts
+       // Run them
        for (const ModSpec &mod : m_mods)
                m_script->loadModFromMemory(mod.name);
 
@@ -197,10 +197,14 @@ void Client::loadMods()
 
        // Run a callback when mods are loaded
        m_script->on_mods_loaded();
+
+       // Create objects if they're ready
        if (m_state == LC_Ready)
                m_script->on_client_ready(m_env.getLocalPlayer());
        if (m_camera)
                m_script->on_camera_ready(m_camera);
+       if (m_minimap)
+               m_script->on_minimap_ready(m_minimap);
 }
 
 bool Client::checkBuiltinIntegrity()
index 437cc78716ef69f735adb36da83ffc8b82520cb0..505108caf472a457562a1e990a5bf813888705d8 100644 (file)
@@ -1407,8 +1407,11 @@ bool Game::createClient(const std::string &playername,
        }
 
        mapper = client->getMinimap();
-       if (mapper)
+       if (mapper) {
                mapper->setMinimapMode(MINIMAP_MODE_OFF);
+               if (client->modsLoaded())
+                       client->getScript()->on_minimap_ready(mapper);
+       }
 
        return true;
 }
index 1288b1df756bfed704341deacd59dcb6d38bbd32..6643a9509d93512ae939a3deba6978136827b620 100644 (file)
@@ -55,9 +55,6 @@ ClientScripting::ClientScripting(Client *client):
        InitializeModApi(L, top);
        lua_pop(L, 1);
 
-       if (client->getMinimap())
-               LuaMinimap::create(L, client->getMinimap());
-
        // Push builtin initialization type
        lua_pushstring(L, "client");
        lua_setglobal(L, "INIT");
@@ -94,3 +91,8 @@ void ClientScripting::on_camera_ready(Camera *camera)
 {
        LuaCamera::create(getStack(), camera);
 }
+
+void ClientScripting::on_minimap_ready(Minimap *minimap)
+{
+       LuaMinimap::create(getStack(), minimap);
+}
index cfecfa16596190a49feb13aba79d5d6773f1dec7..3088029f028dbdb2f633c8b7c1cdd53647ca7e41 100644 (file)
@@ -28,6 +28,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 class Client;
 class LocalPlayer;
 class Camera;
+class Minimap;
+
 class ClientScripting:
        virtual public ScriptApiBase,
        public ScriptApiSecurity,
@@ -38,6 +40,7 @@ public:
        ClientScripting(Client *client);
        void on_client_ready(LocalPlayer *localplayer);
        void on_camera_ready(Camera *camera);
+       void on_minimap_ready(Minimap *minimap);
 
 private:
        virtual void InitializeModApi(lua_State *L, int top);