Minimap: Add new HUD flag for minimap radar mode
authorparamat <paramat@users.noreply.github.com>
Fri, 18 Aug 2017 15:43:31 +0000 (16:43 +0100)
committerparamat <mat.gregory@virginmedia.com>
Sun, 20 Aug 2017 22:58:15 +0000 (23:58 +0100)
Flag default is true to not change default behaviour.
The existing minimap HUD flag remains the master control for minimap.

doc/lua_api.txt
src/game.cpp
src/hud.h
src/network/clientpackethandler.cpp
src/player.cpp
src/script/lua_api/l_object.cpp

index 3c87c2e2ff469706f27218b17451dc3e41d59e80..37c754c9d339b98741734311ad91ca6f056f8ba0 100644 (file)
@@ -3310,13 +3310,16 @@ This is basically a reference to a C++ `ServerActiveObject`
     * element `stat` values: `position`, `name`, `scale`, `text`, `number`, `item`, `dir`
 * `hud_get(id)`: gets the HUD element definition structure of the specified ID
 * `hud_set_flags(flags)`: sets specified HUD flags to `true`/`false`
-    * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem`, `minimap`
+    * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem`, `breathbar`,
+      `minimap`, `minimap_radar`
     * pass a table containing a `true`/`false` value of each flag to be set or unset
     * if a flag equals `nil`, the flag is not modified
     * note that setting `minimap` modifies the client's permission to view the minimap -
     * the client may locally elect to not view the minimap
+    * minimap `radar` is only usable when `minimap` is true
 * `hud_get_flags()`: returns a table containing status of hud flags
-    * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true, minimap=true }`
+    * returns `{hotbar=true, healthbar=true, crosshair=true, wielditem=true,
+      breathbar=true, minimap=true, minimap_radar=true}`
 * `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar
     * `count`: number of items, must be between `1` and `23`
 * `hud_get_hotbar_itemcount`: returns number of visible items
index fad902d03e1bbf0fa47b42ee7142572c019b054d..0f82277492cb1c63b0764afa9cbc815a14f73550 100644 (file)
@@ -2818,6 +2818,9 @@ void Game::toggleMinimap(bool shift_pressed)
        if (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) {
                mode = mapper->getMinimapMode();
                mode = (MinimapMode)((int)mode + 1);
+               // If radar is disabled and in, or switching to, radar mode
+               if (!(hud_flags & HUD_FLAG_MINIMAP_RADAR_VISIBLE) && mode > 3)
+                       mode = MINIMAP_MODE_OFF;
        }
 
        flags.show_minimap = true;
index 363909b0b3cd57e6ee42bc71cde3c5315841121d..3084478b1f8e8b8ef414a902a0444eded78e1b7d 100644 (file)
--- a/src/hud.h
+++ b/src/hud.h
@@ -34,12 +34,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 // Note that these visibility flags do not determine if the hud items are
 // 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)
-#define HUD_FLAG_WIELDITEM_VISIBLE (1 << 3)
-#define HUD_FLAG_BREATHBAR_VISIBLE (1 << 4)
-#define HUD_FLAG_MINIMAP_VISIBLE   (1 << 5)
+#define HUD_FLAG_HOTBAR_VISIBLE        (1 << 0)
+#define HUD_FLAG_HEALTHBAR_VISIBLE     (1 << 1)
+#define HUD_FLAG_CROSSHAIR_VISIBLE     (1 << 2)
+#define HUD_FLAG_WIELDITEM_VISIBLE     (1 << 3)
+#define HUD_FLAG_BREATHBAR_VISIBLE     (1 << 4)
+#define HUD_FLAG_MINIMAP_VISIBLE       (1 << 5)
+#define HUD_FLAG_MINIMAP_RADAR_VISIBLE (1 << 6)
 
 #define HUD_PARAM_HOTBAR_ITEMCOUNT 1
 #define HUD_PARAM_HOTBAR_IMAGE 2
index 1d5a2827723556a2a3a7cf9e83aa2d21b08899af..86bb88f6195cbf185f812c3be7699061d23a107f 100644 (file)
@@ -1183,18 +1183,23 @@ void Client::handleCommand_HudSetFlags(NetworkPacket* pkt)
        assert(player != NULL);
 
        bool was_minimap_visible = player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE;
+       bool was_minimap_radar_visible = player->hud_flags & HUD_FLAG_MINIMAP_RADAR_VISIBLE;
 
        player->hud_flags &= ~mask;
        player->hud_flags |= flags;
 
        m_minimap_disabled_by_server = !(player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE);
+       bool m_minimap_radar_disabled_by_server = !(player->hud_flags & HUD_FLAG_MINIMAP_RADAR_VISIBLE);
 
        // Hide minimap if it has been disabled by the server
-       if (m_minimap && 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);
-       }
+
+       // Switch to surface mode if radar disabled by server
+       if (m_minimap && m_minimap_radar_disabled_by_server && was_minimap_radar_visible)
+               m_minimap->setMinimapMode(MINIMAP_MODE_SURFACEx1);
 }
 
 void Client::handleCommand_HudSetParam(NetworkPacket* pkt)
index 53e1734981da2b227fc78b846af591e884c0b53f..1ff953253a0ca030a952fc8b737a837b7a5d30ec 100644 (file)
@@ -70,7 +70,8 @@ Player::Player(const char *name, IItemDefManager *idef):
        hud_flags =
                HUD_FLAG_HOTBAR_VISIBLE    | HUD_FLAG_HEALTHBAR_VISIBLE |
                HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE |
-               HUD_FLAG_BREATHBAR_VISIBLE | HUD_FLAG_MINIMAP_VISIBLE;
+               HUD_FLAG_BREATHBAR_VISIBLE | HUD_FLAG_MINIMAP_VISIBLE   |
+               HUD_FLAG_MINIMAP_RADAR_VISIBLE;
 
        hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
 }
index a65a5e88ff6ad11266a02e3d0828bc813c1b9dbd..46ac61f2749e51788e0e6c09c845e3e8f2cb357e 100644 (file)
@@ -60,12 +60,13 @@ struct EnumString es_HudElementStat[] =
 
 struct EnumString es_HudBuiltinElement[] =
 {
-       {HUD_FLAG_HOTBAR_VISIBLE,    "hotbar"},
-       {HUD_FLAG_HEALTHBAR_VISIBLE, "healthbar"},
-       {HUD_FLAG_CROSSHAIR_VISIBLE, "crosshair"},
-       {HUD_FLAG_WIELDITEM_VISIBLE, "wielditem"},
-       {HUD_FLAG_BREATHBAR_VISIBLE, "breathbar"},
-       {HUD_FLAG_MINIMAP_VISIBLE,   "minimap"},
+       {HUD_FLAG_HOTBAR_VISIBLE,        "hotbar"},
+       {HUD_FLAG_HEALTHBAR_VISIBLE,     "healthbar"},
+       {HUD_FLAG_CROSSHAIR_VISIBLE,     "crosshair"},
+       {HUD_FLAG_WIELDITEM_VISIBLE,     "wielditem"},
+       {HUD_FLAG_BREATHBAR_VISIBLE,     "breathbar"},
+       {HUD_FLAG_MINIMAP_VISIBLE,       "minimap"},
+       {HUD_FLAG_MINIMAP_RADAR_VISIBLE, "minimap_radar"},
        {0, NULL},
 };
 
@@ -1569,6 +1570,8 @@ int ObjectRef::l_hud_get_flags(lua_State *L)
        lua_setfield(L, -2, "breathbar");
        lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE);
        lua_setfield(L, -2, "minimap");
+       lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_RADAR_VISIBLE);
+       lua_setfield(L, -2, "minimap_radar");
 
        return 1;
 }