mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
Minimap: Add new HUD flag for minimap radar mode
Flag default is true to not change default behaviour. The existing minimap HUD flag remains the master control for minimap.
This commit is contained in:
parent
a3441638c6
commit
7657fe7a50
@ -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
|
||||
|
@ -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;
|
||||
|
13
src/hud.h
13
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
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user