Hide minimap if it has been disabled by server
authorest31 <MTest31@outlook.com>
Tue, 1 Sep 2015 01:07:02 +0000 (03:07 +0200)
committerest31 <MTest31@outlook.com>
Tue, 1 Sep 2015 17:00:33 +0000 (19:00 +0200)
src/client.cpp
src/client.h
src/game.cpp
src/hud.h
src/network/clientpackethandler.cpp

index dda0f5191c39f1d06a317fa2dd3af4a07dd4f288..4a9398f7082c07b89f73242c7921cc8ba18592b2 100644 (file)
@@ -228,6 +228,7 @@ Client::Client(
        m_particle_manager(&m_env),
        m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this),
        m_device(device),
+       m_minimap_disabled_by_server(false),
        m_server_ser_ver(SER_FMT_VER_INVALID),
        m_proto_ver(0),
        m_playeritem(0),
index 75fd0c9842fc99b3c3e9e88e4ee3b4dc52405fa1..5b57aa52a6e345a9ead4456086e13e4e2fab4b55 100644 (file)
@@ -510,6 +510,9 @@ public:
        Mapper* getMapper ()
        { return m_mapper; }
 
+       bool isMinimapDisabledByServer()
+       { return m_minimap_disabled_by_server; }
+
        // IGameDef interface
        virtual IItemDefManager* getItemDefManager();
        virtual INodeDefManager* getNodeDefManager();
@@ -590,6 +593,7 @@ private:
        con::Connection m_con;
        IrrlichtDevice *m_device;
        Mapper *m_mapper;
+       bool m_minimap_disabled_by_server;
        // Server serialization version
        u8 m_server_ser_ver;
 
index 0e26493a24fe070e303955589b55737121cba062..840d627b6796916716d2ac0d0514068a2cc72f06 100644 (file)
@@ -1857,6 +1857,9 @@ void Game::run()
                updateFrame(highlight_boxes, &graph, &stats, &runData, dtime,
                                flags, cam_view);
                updateProfilerGraphs(&graph);
+
+               // Update if minimap has been disabled by the server
+               flags.show_minimap &= !client->isMinimapDisabledByServer();
        }
 }
 
index 614e7c92dde80efa55c0c001cce4f1efb7e30f40..65453aec1ae7288cbdd127226bf1f0bc57bfd758 100644 (file)
--- a/src/hud.h
+++ b/src/hud.h
@@ -33,8 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define HUD_CORNER_CENTER 2
 
 // Note that these visibility flags do not determine if the hud items are
-// actually drawn, but rather, allows the item to be drawn should the rest of
-// the game state permit it.
+// actually drawn, but rather, whether to draw the item should the rest
+// of the game state permit it.
 #define HUD_FLAG_HOTBAR_VISIBLE    (1 << 0)
 #define HUD_FLAG_HEALTHBAR_VISIBLE (1 << 1)
 #define HUD_FLAG_CROSSHAIR_VISIBLE (1 << 2)
index 04f94c58b2985ecdfef4d51538914e3755c89693..d49c9602983c48db119222f78b9b138ebad9a4a6 100644 (file)
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "log.h"
 #include "map.h"
 #include "mapsector.h"
+#include "minimap.h"
 #include "nodedef.h"
 #include "serialization.h"
 #include "server.h"
@@ -1094,8 +1095,19 @@ void Client::handleCommand_HudSetFlags(NetworkPacket* pkt)
        Player *player = m_env.getLocalPlayer();
        assert(player != NULL);
 
+       bool was_minimap_visible = player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE;
+
        player->hud_flags &= ~mask;
        player->hud_flags |= flags;
+
+       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) {
+               // defers a minimap update, therefore only call it if really
+               // needed, by checking that minimap was visible before
+               m_mapper->setMinimapMode(MINIMAP_MODE_OFF);
+       }
 }
 
 void Client::handleCommand_HudSetParam(NetworkPacket* pkt)