]> git.lizzy.rs Git - minetest.git/commitdiff
When minimap is disabled in configuration, really disable it (#5771)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Fri, 19 May 2017 05:25:27 +0000 (07:25 +0200)
committerGitHub <noreply@github.com>
Fri, 19 May 2017 05:25:27 +0000 (07:25 +0200)
* When minimap is disabled in configuration, really disable it

doc/client_lua_api.md
src/client.cpp
src/drawscene.cpp
src/drawscene.h
src/game.cpp
src/network/clientpackethandler.cpp
src/script/scripting_client.cpp

index 9f59b46717581de8d6803f598707b864c7c48dfe..2c0351a11a3920dee05804abd4b257767094b07d 100644 (file)
@@ -800,6 +800,7 @@ Call these functions only at load time!
 ### UI
 * `minetest.ui.minimap`
     * Reference to the minimap object. See [`Minimap`](#minimap) class reference for methods.
+    * If client disabled minimap (using enable_minimap setting) this reference will be nil.
 * `minetest.camera`
     * Reference to the camera object. See [`Camera`](#camera) class reference for methods.
 * `minetest.show_formspec(formname, formspec)` : returns true on success
index 1e17e7c1150cc9db8887490399132805f2eba2aa..6ab4002a5e77c69443bd408f9fd6dc628e70489a 100644 (file)
@@ -93,6 +93,7 @@ Client::Client(
        m_address_name(address_name),
        m_device(device),
        m_camera(NULL),
+       m_minimap(NULL),
        m_minimap_disabled_by_server(false),
        m_server_ser_ver(SER_FMT_VER_INVALID),
        m_proto_ver(0),
@@ -127,7 +128,9 @@ Client::Client(
        // Add local player
        m_env.setLocalPlayer(new LocalPlayer(this, playername));
 
-       m_minimap = new Minimap(device, this);
+       if (g_settings->getBool("enable_minimap")) {
+               m_minimap = new Minimap(device, this);
+       }
        m_cache_save_interval = g_settings->getU16("server_map_save_interval");
 
        m_modding_enabled = g_settings->getBool("enable_client_modding");
@@ -502,7 +505,7 @@ void Client::step(float dtime)
                                delete r.mesh;
                        }
 
-                       if (do_mapper_update)
+                       if (m_minimap && do_mapper_update)
                                m_minimap->addBlock(r.p, minimap_mapblock);
 
                        if (r.ack_block_to_server) {
index 7d2d1d12f24ad707d3e3d1a785b9c1c4588abbdd..59f9b8375ce64882282d13a893f54455840acf30 100644 (file)
@@ -509,7 +509,7 @@ void draw_plain(Camera &camera, bool show_hud,
 
 void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
                Camera &camera, Client &client, LocalPlayer *player, Hud &hud,
-               Minimap &mapper, gui::IGUIEnvironment *guienv,
+               Minimap *mapper, gui::IGUIEnvironment *guienv,
                const v2u32 &screensize, const video::SColor &skycolor,
                bool show_hud, bool show_minimap)
 {
@@ -584,8 +584,8 @@ void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
                hud.drawLuaElements(camera.getOffset());
                camera.drawNametags();
 
-               if (show_minimap)
-                       mapper.drawMinimap();
+               if (mapper && show_minimap)
+                       mapper->drawMinimap();
        }
 
        guienv->drawAll();
index 4a71b1f4e51f5e88513d8fa7dfe1d7c0ba54e6d0..99ff1a6bcad528697816486e34ffc689ba15f6b4 100644 (file)
@@ -32,7 +32,7 @@ void draw_load_screen(const std::wstring &text, IrrlichtDevice *device,
 
 void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
                Camera &camera, Client &client, LocalPlayer *player,
-               Hud &hud, Minimap &mapper, gui::IGUIEnvironment *guienv,
+               Hud &hud, Minimap *mapper, gui::IGUIEnvironment *guienv,
                const v2u32 &screensize, const video::SColor &skycolor,
                bool show_hud, bool show_minimap);
 
index f079f836b9e611105323194584f1c2a0842a0f17..f967e349cd7885361fee659dd732d22de32b6665 100644 (file)
@@ -715,16 +715,19 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
                m_eye_position_pixel.set(eye_position_array, services);
                m_eye_position_vertex.set(eye_position_array, services);
 
-               float minimap_yaw_array[3];
-               v3f minimap_yaw = m_client->getMinimap()->getYawVec();
+               if (m_client->getMinimap()) {
+                       float minimap_yaw_array[3];
+                       v3f minimap_yaw = m_client->getMinimap()->getYawVec();
 #if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
-               minimap_yaw_array[0] = minimap_yaw.X;
-               minimap_yaw_array[1] = minimap_yaw.Y;
-               minimap_yaw_array[2] = minimap_yaw.Z;
+                       minimap_yaw_array[0] = minimap_yaw.X;
+                       minimap_yaw_array[1] = minimap_yaw.Y;
+                       minimap_yaw_array[2] = minimap_yaw.Z;
 #else
-               minimap_yaw.getAs3Values(minimap_yaw_array);
+                       minimap_yaw.getAs3Values(minimap_yaw_array);
 #endif
-               m_minimap_yaw.set(minimap_yaw_array, services);
+                       m_minimap_yaw.set(minimap_yaw_array, services);
+
+               }
 
                SamplerLayer_t base_tex = 0,
                                normal_tex = 1,
@@ -1948,7 +1951,8 @@ bool Game::createClient(const std::string &playername,
        }
 
        mapper = client->getMinimap();
-       mapper->setMinimapMode(MINIMAP_MODE_OFF);
+       if (mapper)
+               mapper->setMinimapMode(MINIMAP_MODE_OFF);
 
        return true;
 }
@@ -2781,7 +2785,7 @@ void Game::toggleHud()
 
 void Game::toggleMinimap(bool shift_pressed)
 {
-       if (!flags.show_hud || !g_settings->getBool("enable_minimap"))
+       if (!mapper || !flags.show_hud || !g_settings->getBool("enable_minimap"))
                return;
 
        if (shift_pressed) {
@@ -4194,7 +4198,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
        TimeTaker tt_draw("mainloop: draw");
        driver->beginScene(true, true, skycolor);
 
-       draw_scene(driver, smgr, *camera, *client, player, *hud, *mapper,
+       draw_scene(driver, smgr, *camera, *client, player, *hud, mapper,
                        guienv, screensize, skycolor, flags.show_hud,
                        flags.show_minimap);
 
@@ -4229,7 +4233,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
        /*
                Update minimap pos and rotation
        */
-       if (flags.show_minimap && flags.show_hud) {
+       if (mapper && flags.show_minimap && flags.show_hud) {
                mapper->setPos(floatToInt(player->getPosition(), BS));
                mapper->setAngle(player->getYaw());
        }
index 0dd09c6d19bb803c0f47fa41eaa747ab48c87c5e..59669fe6d0b933c2eabe8d333a117bca7c8cf2da 100644 (file)
@@ -1150,7 +1150,7 @@ void Client::handleCommand_HudSetFlags(NetworkPacket* pkt)
        m_minimap_disabled_by_server = !(player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE);
 
        // Hide minimap if it has been disabled by the server
-       if (m_minimap_disabled_by_server && was_minimap_visible) {
+       if (m_minimap && m_minimap_disabled_by_server && was_minimap_visible) {
                // defers a minimap update, therefore only call it if really
                // needed, by checking that minimap was visible before
                m_minimap->setMinimapMode(MINIMAP_MODE_OFF);
index 24f70b8c1eea273ad7d50b2f4edd5d028150a5c4..da289e564fd7bb411765a023f021416139501400 100644 (file)
@@ -51,7 +51,8 @@ ClientScripting::ClientScripting(Client *client):
        InitializeModApi(L, top);
        lua_pop(L, 1);
 
-       LuaMinimap::create(L, client->getMinimap());
+       if (client->getMinimap())
+               LuaMinimap::create(L, client->getMinimap());
 
        // Push builtin initialization type
        lua_pushstring(L, "client");