mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	minimap: Add ability to disable from server
This commit is contained in:
		@@ -2519,11 +2519,13 @@ 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`
 | 
			
		||||
    * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem`, `minimap`
 | 
			
		||||
    * 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
 | 
			
		||||
* `hud_get_flags()`: returns a table containing status of hud flags
 | 
			
		||||
    * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true }`
 | 
			
		||||
    * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true, minimap=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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										85
									
								
								src/game.cpp
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								src/game.cpp
									
									
									
									
									
								
							@@ -1497,7 +1497,7 @@ protected:
 | 
			
		||||
 | 
			
		||||
	void toggleChat(float *statustext_time, bool *flag);
 | 
			
		||||
	void toggleHud(float *statustext_time, bool *flag);
 | 
			
		||||
	void toggleMinimap(float *statustext_time, bool *flag1, bool *flag2,
 | 
			
		||||
	void toggleMinimap(float *statustext_time, bool *flag, bool show_hud,
 | 
			
		||||
			bool shift_pressed);
 | 
			
		||||
	void toggleFog(float *statustext_time, bool *flag);
 | 
			
		||||
	void toggleDebug(float *statustext_time, bool *show_debug,
 | 
			
		||||
@@ -2642,7 +2642,7 @@ void Game::processKeyboardInput(VolatileRunFlags *flags,
 | 
			
		||||
	} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_HUD])) {
 | 
			
		||||
		toggleHud(statustext_time, &flags->show_hud);
 | 
			
		||||
	} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_MINIMAP])) {
 | 
			
		||||
		toggleMinimap(statustext_time, &flags->show_minimap, &flags->show_hud,
 | 
			
		||||
		toggleMinimap(statustext_time, &flags->show_minimap, flags->show_hud,
 | 
			
		||||
			input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SNEAK]));
 | 
			
		||||
	} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_CHAT])) {
 | 
			
		||||
		toggleChat(statustext_time, &flags->show_chat);
 | 
			
		||||
@@ -2864,43 +2864,54 @@ void Game::toggleHud(float *statustext_time, bool *flag)
 | 
			
		||||
		client->setHighlighted(client->getHighlighted(), *flag);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Game::toggleMinimap(float *statustext_time, bool *flag, bool *show_hud, bool shift_pressed)
 | 
			
		||||
void Game::toggleMinimap(float *statustext_time, bool *flag,
 | 
			
		||||
	bool show_hud, bool shift_pressed)
 | 
			
		||||
{
 | 
			
		||||
	if (*show_hud && g_settings->getBool("enable_minimap")) {
 | 
			
		||||
		if (shift_pressed) {
 | 
			
		||||
			mapper->toggleMinimapShape();
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		MinimapMode mode = mapper->getMinimapMode();
 | 
			
		||||
		mode = (MinimapMode)((int)(mode) + 1);
 | 
			
		||||
		*flag = true;
 | 
			
		||||
		switch (mode) {
 | 
			
		||||
			case MINIMAP_MODE_SURFACEx1:
 | 
			
		||||
				statustext = L"Minimap in surface mode, Zoom x1";
 | 
			
		||||
				break;
 | 
			
		||||
			case MINIMAP_MODE_SURFACEx2:
 | 
			
		||||
				statustext = L"Minimap in surface mode, Zoom x2";
 | 
			
		||||
				break;
 | 
			
		||||
			case MINIMAP_MODE_SURFACEx4:
 | 
			
		||||
				statustext = L"Minimap in surface mode, Zoom x4";
 | 
			
		||||
				break;
 | 
			
		||||
			case MINIMAP_MODE_RADARx1:
 | 
			
		||||
				statustext = L"Minimap in radar mode, Zoom x1";
 | 
			
		||||
				break;
 | 
			
		||||
			case MINIMAP_MODE_RADARx2:
 | 
			
		||||
				statustext = L"Minimap in radar mode, Zoom x2";
 | 
			
		||||
				break;
 | 
			
		||||
			case MINIMAP_MODE_RADARx4:
 | 
			
		||||
				statustext = L"Minimap in radar mode, Zoom x4";
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				mode = MINIMAP_MODE_OFF;
 | 
			
		||||
				*flag = false;
 | 
			
		||||
				statustext = L"Minimap hidden";
 | 
			
		||||
		}
 | 
			
		||||
		*statustext_time = 0;
 | 
			
		||||
		mapper->setMinimapMode(mode);
 | 
			
		||||
	if (!show_hud || !g_settings->getBool("enable_minimap"))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (shift_pressed) {
 | 
			
		||||
		mapper->toggleMinimapShape();
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	u32 hud_flags = client->getEnv().getLocalPlayer()->hud_flags;
 | 
			
		||||
 | 
			
		||||
	MinimapMode mode = MINIMAP_MODE_OFF;
 | 
			
		||||
	if (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) {
 | 
			
		||||
		mode = mapper->getMinimapMode();
 | 
			
		||||
		mode = (MinimapMode)((int)mode + 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*flag = true;
 | 
			
		||||
	switch (mode) {
 | 
			
		||||
		case MINIMAP_MODE_SURFACEx1:
 | 
			
		||||
			statustext = L"Minimap in surface mode, Zoom x1";
 | 
			
		||||
			break;
 | 
			
		||||
		case MINIMAP_MODE_SURFACEx2:
 | 
			
		||||
			statustext = L"Minimap in surface mode, Zoom x2";
 | 
			
		||||
			break;
 | 
			
		||||
		case MINIMAP_MODE_SURFACEx4:
 | 
			
		||||
			statustext = L"Minimap in surface mode, Zoom x4";
 | 
			
		||||
			break;
 | 
			
		||||
		case MINIMAP_MODE_RADARx1:
 | 
			
		||||
			statustext = L"Minimap in radar mode, Zoom x1";
 | 
			
		||||
			break;
 | 
			
		||||
		case MINIMAP_MODE_RADARx2:
 | 
			
		||||
			statustext = L"Minimap in radar mode, Zoom x2";
 | 
			
		||||
			break;
 | 
			
		||||
		case MINIMAP_MODE_RADARx4:
 | 
			
		||||
			statustext = L"Minimap in radar mode, Zoom x4";
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			mode = MINIMAP_MODE_OFF;
 | 
			
		||||
			*flag = false;
 | 
			
		||||
			statustext = (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) ?
 | 
			
		||||
				L"Minimap hidden" : L"Minimap disabled by server";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*statustext_time = 0;
 | 
			
		||||
	mapper->setMinimapMode(mode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Game::toggleFog(float *statustext_time, bool *flag)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								src/hud.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/hud.h
									
									
									
									
									
								
							@@ -32,11 +32,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
#define HUD_CORNER_LOWER  1
 | 
			
		||||
#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.
 | 
			
		||||
#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_PARAM_HOTBAR_ITEMCOUNT 1
 | 
			
		||||
#define HUD_PARAM_HOTBAR_IMAGE 2
 | 
			
		||||
@@ -116,11 +120,11 @@ public:
 | 
			
		||||
	std::string hotbar_selected_image;
 | 
			
		||||
	bool use_hotbar_selected_image;
 | 
			
		||||
	v3s16 camera_offset;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	Hud(video::IVideoDriver *driver,scene::ISceneManager* smgr,
 | 
			
		||||
		gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player,
 | 
			
		||||
		Inventory *inventory);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	void drawHotbar(u16 playeritem);
 | 
			
		||||
	void resizeHotbar();
 | 
			
		||||
	void drawCrosshair();
 | 
			
		||||
@@ -129,12 +133,12 @@ public:
 | 
			
		||||
private:
 | 
			
		||||
	void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
 | 
			
		||||
			s32 count, v2s32 offset, v2s32 size=v2s32());
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	void drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
 | 
			
		||||
		InventoryList *mainlist, u16 selectitem, u16 direction);
 | 
			
		||||
 | 
			
		||||
	void drawItem(const ItemStack &item, const core::rect<s32>& rect, bool selected);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	v2u32 m_screensize;
 | 
			
		||||
	v2s32 m_displaycenter;
 | 
			
		||||
	s32 m_hotbar_imagesize;
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,8 @@ Player::Player(IGameDef *gamedef, const char *name):
 | 
			
		||||
		"listring[]"
 | 
			
		||||
		"list[current_player;craftpreview;7,1;1,1;]";
 | 
			
		||||
 | 
			
		||||
	// Initialize movement settings at default values, so movement can work if the server fails to send them
 | 
			
		||||
	// Initialize movement settings at default values, so movement can work
 | 
			
		||||
	// if the server fails to send them
 | 
			
		||||
	movement_acceleration_default   = 3    * BS;
 | 
			
		||||
	movement_acceleration_air       = 2    * BS;
 | 
			
		||||
	movement_acceleration_fast      = 10   * BS;
 | 
			
		||||
@@ -97,9 +98,10 @@ Player::Player(IGameDef *gamedef, const char *name):
 | 
			
		||||
	physics_override_sneak        = true;
 | 
			
		||||
	physics_override_sneak_glitch = true;
 | 
			
		||||
 | 
			
		||||
	hud_flags = HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE |
 | 
			
		||||
			 HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE |
 | 
			
		||||
			 HUD_FLAG_BREATHBAR_VISIBLE;
 | 
			
		||||
	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_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,7 @@ struct EnumString es_HudBuiltinElement[] =
 | 
			
		||||
	{HUD_FLAG_CROSSHAIR_VISIBLE, "crosshair"},
 | 
			
		||||
	{HUD_FLAG_WIELDITEM_VISIBLE, "wielditem"},
 | 
			
		||||
	{HUD_FLAG_BREATHBAR_VISIBLE, "breathbar"},
 | 
			
		||||
	{HUD_FLAG_MINIMAP_VISIBLE,   "minimap"},
 | 
			
		||||
	{0, NULL},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -1384,6 +1385,8 @@ int ObjectRef::l_hud_get_flags(lua_State *L)
 | 
			
		||||
	lua_setfield(L, -2, "wielditem");
 | 
			
		||||
	lua_pushboolean(L, player->hud_flags & HUD_FLAG_BREATHBAR_VISIBLE);
 | 
			
		||||
	lua_setfield(L, -2, "breathbar");
 | 
			
		||||
	lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE);
 | 
			
		||||
	lua_setfield(L, -2, "minimap");
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user