Browse Source

Add chat HUD flag (#13189)

Alex 1 year ago
parent
commit
af4009d924
7 changed files with 23 additions and 12 deletions
  1. 2 0
      doc/lua_api.txt
  2. 1 1
      src/client/game.cpp
  3. 15 9
      src/client/gameui.cpp
  4. 1 1
      src/client/gameui.h
  5. 1 0
      src/hud.cpp
  6. 1 0
      src/hud.h
  7. 2 1
      src/player.cpp

+ 2 - 0
doc/lua_api.txt

@@ -7274,6 +7274,8 @@ child will follow movement and rotation of that bone.
         * `basic_debug`: Allow showing basic debug info that might give a gameplay advantage.
           This includes map seed, player position, look direction, the pointed node and block bounds.
           Does not affect players with the `debug` privilege.
+        * `chat`: Modifies the client's permission to view chat on the HUD.
+          The client may locally elect to not view chat. Does not affect the console.
     * If a flag equals `nil`, the flag is not modified
 * `hud_get_flags()`: returns a table of player HUD flags with boolean values.
     * See `hud_set_flags` for a list of flags that can be toggled.

+ 1 - 1
src/client/game.cpp

@@ -2085,7 +2085,7 @@ void Game::processKeyInput()
 	} else if (wasKeyDown(KeyType::MINIMAP)) {
 		toggleMinimap(isKeyDown(KeyType::SNEAK));
 	} else if (wasKeyDown(KeyType::TOGGLE_CHAT)) {
-		m_game_ui->toggleChat();
+		m_game_ui->toggleChat(client);
 	} else if (wasKeyDown(KeyType::TOGGLE_FOG)) {
 		toggleFog();
 	} else if (wasKeyDown(KeyType::TOGGLE_UPDATE_CAMERA)) {

+ 15 - 9
src/client/gameui.cpp

@@ -102,6 +102,8 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
 {
 	v2u32 screensize = RenderingEngine::getWindowSize();
 
+	LocalPlayer *player = client->getEnv().getLocalPlayer();
+
 	s32 minimal_debug_height = 0;
 
 	// Minimal debug text must only contain info that can't give a gameplay advantage
@@ -137,7 +139,6 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
 
 	// Basic debug text also shows info that might give a gameplay advantage
 	if (m_flags.show_basic_debug) {
-		LocalPlayer *player = client->getEnv().getLocalPlayer();
 		v3f player_position = player->getPosition();
 
 		std::ostringstream os(std::ios_base::binary);
@@ -208,8 +209,8 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
 		m_guitext_status->enableOverrideColor(true);
 	}
 
-	// Hide chat when console is visible
-	m_guitext_chat->setVisible(isChatVisible() && !chat_console->isVisible());
+	// Hide chat when disabled by server or when console is visible
+	m_guitext_chat->setVisible(isChatVisible() && !chat_console->isVisible() && (player->hud_flags & HUD_FLAG_CHAT_VISIBLE));
 }
 
 void GameUI::initFlags()
@@ -287,13 +288,18 @@ void GameUI::updateProfiler()
 	m_guitext_profiler->setVisible(m_profiler_current_page != 0);
 }
 
-void GameUI::toggleChat()
+void GameUI::toggleChat(Client *client)
 {
-	m_flags.show_chat = !m_flags.show_chat;
-	if (m_flags.show_chat)
-		showTranslatedStatusText("Chat shown");
-	else
-		showTranslatedStatusText("Chat hidden");
+	if (client->getEnv().getLocalPlayer()->hud_flags & HUD_FLAG_CHAT_VISIBLE) {
+		m_flags.show_chat = !m_flags.show_chat;
+		if (m_flags.show_chat)
+			showTranslatedStatusText("Chat shown");
+		else
+			showTranslatedStatusText("Chat hidden");
+	} else {
+		showTranslatedStatusText("Chat currently disabled by game or mod");
+	}
+
 }
 
 void GameUI::toggleHud()

+ 1 - 1
src/client/gameui.h

@@ -93,7 +93,7 @@ public:
 
 	void updateProfiler();
 
-	void toggleChat();
+	void toggleChat(Client *client);
 	void toggleHud();
 	void toggleProfiler();
 

+ 1 - 0
src/hud.cpp

@@ -64,5 +64,6 @@ const struct EnumString es_HudBuiltinElement[] =
 	{HUD_FLAG_MINIMAP_VISIBLE,       "minimap"},
 	{HUD_FLAG_MINIMAP_RADAR_VISIBLE, "minimap_radar"},
 	{HUD_FLAG_BASIC_DEBUG,           "basic_debug"},
+	{HUD_FLAG_CHAT_VISIBLE,          "chat"},
 	{0, NULL},
 };

+ 1 - 0
src/hud.h

@@ -48,6 +48,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define HUD_FLAG_MINIMAP_VISIBLE       (1 << 5)
 #define HUD_FLAG_MINIMAP_RADAR_VISIBLE (1 << 6)
 #define HUD_FLAG_BASIC_DEBUG           (1 << 7)
+#define HUD_FLAG_CHAT_VISIBLE          (1 << 8)
 
 #define HUD_PARAM_HOTBAR_ITEMCOUNT 1
 #define HUD_PARAM_HOTBAR_IMAGE 2

+ 2 - 1
src/player.cpp

@@ -71,7 +71,8 @@ Player::Player(const char *name, IItemDefManager *idef):
 		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_MINIMAP_RADAR_VISIBLE | HUD_FLAG_BASIC_DEBUG;
+		HUD_FLAG_MINIMAP_RADAR_VISIBLE | HUD_FLAG_BASIC_DEBUG   |
+		HUD_FLAG_CHAT_VISIBLE;
 
 	hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;