From: est31 <MTest31@outlook.com>
Date: Tue, 1 Sep 2015 01:07:02 +0000 (+0200)
Subject: Hide minimap if it has been disabled by server
X-Git-Tag: 0.4.14~744
X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0903190ba2ed2134c464f2efe694d7281ead1c09;p=oweals%2Fminetest.git

Hide minimap if it has been disabled by server
---

diff --git a/src/client.cpp b/src/client.cpp
index dda0f5191..4a9398f70 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 75fd0c984..5b57aa52a 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 0e26493a2..840d627b6 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 614e7c92d..65453aec1 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 04f94c58b..d49c96029 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)