diff --git a/src/client.cpp b/src/client.cpp index dda0f519..4a9398f7 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -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), diff --git a/src/client.h b/src/client.h index 75fd0c98..5b57aa52 100644 --- a/src/client.h +++ b/src/client.h @@ -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; diff --git a/src/game.cpp b/src/game.cpp index 0e26493a..840d627b 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -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(); } } diff --git a/src/hud.h b/src/hud.h index 614e7c92..65453aec 100644 --- 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) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 04f94c58..d49c9602 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -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)