]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Readd basic_debug as a HUD flag (#12020)
authorLars Müller <34514239+appgurueu@users.noreply.github.com>
Sat, 5 Mar 2022 21:16:17 +0000 (22:16 +0100)
committerGitHub <noreply@github.com>
Sat, 5 Mar 2022 21:16:17 +0000 (22:16 +0100)
doc/lua_api.txt
src/client/game.cpp
src/hud.cpp
src/hud.h
src/player.cpp
src/script/lua_api/l_object.cpp

index 8af261e0c9d5d8e99af1aa7a09857a69aab7f45c..89bc7dc4b86a3fb115eadf66d61879c7c1d28276 100644 (file)
@@ -6772,17 +6772,18 @@ object you are working with still exists.
 * `hud_get(id)`: gets the HUD element definition structure of the specified ID
 * `hud_set_flags(flags)`: sets specified HUD flags of player.
     * `flags`: A table with the following fields set to boolean values
-        * hotbar
-        * healthbar
-        * crosshair
-        * wielditem
-        * breathbar
-        * minimap
-        * minimap_radar
+        * `hotbar`
+        * `healthbar`
+        * `crosshair`
+        * `wielditem`
+        * `breathbar`
+        * `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
+        * `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.
     * If a flag equals `nil`, the flag is not modified
-    * `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 of player HUD flags with boolean values.
     * See `hud_set_flags` for a list of flags that can be toggled.
 * `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar
index 4337d308e457bd600c891ae241959d5358a90607..7450fb91c1e8b02b8a52e9b32b1fb859fd59bdb3 100644 (file)
@@ -723,7 +723,7 @@ class Game {
        void processClientEvents(CameraOrientation *cam);
        void updateCamera(f32 dtime);
        void updateSound(f32 dtime);
-       void processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug);
+       void processPlayerInteraction(f32 dtime, bool show_hud);
        /*!
         * Returns the object or node the player is pointing at.
         * Also updates the selected thing in the Hud.
@@ -1134,8 +1134,7 @@ void Game::run()
                updateDebugState();
                updateCamera(dtime);
                updateSound(dtime);
-               processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud,
-                       m_game_ui->m_flags.show_basic_debug);
+               processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud);
                updateFrame(&graph, &stats, dtime, cam_view);
                updateProfilerGraphs(&graph);
 
@@ -1740,17 +1739,16 @@ void Game::processQueues()
 
 void Game::updateDebugState()
 {
-       const bool has_basic_debug = true;
+       LocalPlayer *player = client->getEnv().getLocalPlayer();
        bool has_debug = client->checkPrivilege("debug");
+       bool has_basic_debug = has_debug || (player->hud_flags & HUD_FLAG_BASIC_DEBUG);
 
        if (m_game_ui->m_flags.show_basic_debug) {
-               if (!has_basic_debug) {
+               if (!has_basic_debug)
                        m_game_ui->m_flags.show_basic_debug = false;
-               }
        } else if (m_game_ui->m_flags.show_minimal_debug) {
-               if (has_basic_debug) {
+               if (has_basic_debug)
                        m_game_ui->m_flags.show_basic_debug = true;
-               }
        }
        if (!has_basic_debug)
                hud->disableBlockBounds();
@@ -2211,27 +2209,27 @@ void Game::toggleCinematic()
 
 void Game::toggleBlockBounds()
 {
-       if (true /* basic_debug */) {
-               enum Hud::BlockBoundsMode newmode = hud->toggleBlockBounds();
-               switch (newmode) {
-                       case Hud::BLOCK_BOUNDS_OFF:
-                               m_game_ui->showTranslatedStatusText("Block bounds hidden");
-                               break;
-                       case Hud::BLOCK_BOUNDS_CURRENT:
-                               m_game_ui->showTranslatedStatusText("Block bounds shown for current block");
-                               break;
-                       case Hud::BLOCK_BOUNDS_NEAR:
-                               m_game_ui->showTranslatedStatusText("Block bounds shown for nearby blocks");
-                               break;
-                       case Hud::BLOCK_BOUNDS_MAX:
-                               m_game_ui->showTranslatedStatusText("Block bounds shown for all blocks");
-                               break;
-                       default:
-                               break;
-               }
-
-       } else {
-               m_game_ui->showTranslatedStatusText("Can't show block bounds (need 'basic_debug' privilege)");
+       LocalPlayer *player = client->getEnv().getLocalPlayer();
+       if (!(client->checkPrivilege("debug") || (player->hud_flags & HUD_FLAG_BASIC_DEBUG))) {
+               m_game_ui->showTranslatedStatusText("Can't show block bounds (disabled by mod or game)");
+               return;
+       }
+       enum Hud::BlockBoundsMode newmode = hud->toggleBlockBounds();
+       switch (newmode) {
+               case Hud::BLOCK_BOUNDS_OFF:
+                       m_game_ui->showTranslatedStatusText("Block bounds hidden");
+                       break;
+               case Hud::BLOCK_BOUNDS_CURRENT:
+                       m_game_ui->showTranslatedStatusText("Block bounds shown for current block");
+                       break;
+               case Hud::BLOCK_BOUNDS_NEAR:
+                       m_game_ui->showTranslatedStatusText("Block bounds shown for nearby blocks");
+                       break;
+               case Hud::BLOCK_BOUNDS_MAX:
+                       m_game_ui->showTranslatedStatusText("Block bounds shown for all blocks");
+                       break;
+               default:
+                       break;
        }
 }
 
@@ -2298,6 +2296,9 @@ void Game::toggleFog()
 
 void Game::toggleDebug()
 {
+       LocalPlayer *player = client->getEnv().getLocalPlayer();
+       bool has_debug = client->checkPrivilege("debug");
+       bool has_basic_debug = has_debug || (player->hud_flags & HUD_FLAG_BASIC_DEBUG);
        // Initial: No debug info
        // 1x toggle: Debug text
        // 2x toggle: Debug text with profiler graph
@@ -2307,9 +2308,8 @@ void Game::toggleDebug()
        // The debug text can be in 2 modes: minimal and basic.
        // * Minimal: Only technical client info that not gameplay-relevant
        // * Basic: Info that might give gameplay advantage, e.g. pos, angle
-       // Basic mode is always used.
-
-       const bool has_basic_debug = true;
+       // Basic mode is used when player has the debug HUD flag set,
+       // otherwise the Minimal mode is used.
        if (!m_game_ui->m_flags.show_minimal_debug) {
                m_game_ui->m_flags.show_minimal_debug = true;
                if (has_basic_debug)
@@ -2333,7 +2333,7 @@ void Game::toggleDebug()
                m_game_ui->m_flags.show_basic_debug = false;
                m_game_ui->m_flags.show_profiler_graph = false;
                draw_control->show_wireframe = false;
-               if (client->checkPrivilege("debug")) {
+               if (has_debug) {
                        m_game_ui->showTranslatedStatusText("Debug info, profiler graph, and wireframe hidden");
                } else {
                        m_game_ui->showTranslatedStatusText("Debug info and profiler graph hidden");
@@ -3039,7 +3039,7 @@ void Game::updateSound(f32 dtime)
 }
 
 
-void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
+void Game::processPlayerInteraction(f32 dtime, bool show_hud)
 {
        LocalPlayer *player = client->getEnv().getLocalPlayer();
 
@@ -3157,7 +3157,8 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
                handlePointingAtNode(pointed, selected_item, hand_item, dtime);
        } else if (pointed.type == POINTEDTHING_OBJECT) {
                v3f player_position  = player->getPosition();
-               handlePointingAtObject(pointed, tool_item, player_position, show_debug);
+               handlePointingAtObject(pointed, tool_item, player_position,
+                               client->checkPrivilege("debug") || (player->hud_flags & HUD_FLAG_BASIC_DEBUG));
        } else if (isKeyDown(KeyType::DIG)) {
                // When button is held down in air, show continuous animation
                runData.punching = true;
index e4ad7940fa28cdf48b4411bf2c01e679e38790c7..841c907587eb456f199791d94c0ba6185d256549 100644 (file)
@@ -63,5 +63,6 @@ const struct EnumString es_HudBuiltinElement[] =
        {HUD_FLAG_BREATHBAR_VISIBLE,     "breathbar"},
        {HUD_FLAG_MINIMAP_VISIBLE,       "minimap"},
        {HUD_FLAG_MINIMAP_RADAR_VISIBLE, "minimap_radar"},
+       {HUD_FLAG_BASIC_DEBUG,           "basic_debug"},
        {0, NULL},
 };
index 769966688d91d002e564c6c32c832964615e4101..173633fcc824283bd34f0ad1de45da5881dc9249 100644 (file)
--- a/src/hud.h
+++ b/src/hud.h
@@ -47,6 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define HUD_FLAG_BREATHBAR_VISIBLE     (1 << 4)
 #define HUD_FLAG_MINIMAP_VISIBLE       (1 << 5)
 #define HUD_FLAG_MINIMAP_RADAR_VISIBLE (1 << 6)
+#define HUD_FLAG_BASIC_DEBUG           (1 << 7)
 
 #define HUD_PARAM_HOTBAR_ITEMCOUNT 1
 #define HUD_PARAM_HOTBAR_IMAGE 2
index 347be30f1ff46723641bea897357b16e53a2b541..1e064c1dac557d43c92ab9663c9d552f4c3f8e7b 100644 (file)
@@ -71,7 +71,7 @@ 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_MINIMAP_RADAR_VISIBLE | HUD_FLAG_BASIC_DEBUG;
 
        hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
 
index ba86fbc488d09a324c1931c4ea8ca0e9aaf34b58..1ed6b0d5c9a7fa9d9ac94ea1874770e33c3964c5 100644 (file)
@@ -1617,20 +1617,11 @@ int ObjectRef::l_hud_get_flags(lua_State *L)
                return 0;
 
        lua_newtable(L);
-       lua_pushboolean(L, player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE);
-       lua_setfield(L, -2, "hotbar");
-       lua_pushboolean(L, player->hud_flags & HUD_FLAG_HEALTHBAR_VISIBLE);
-       lua_setfield(L, -2, "healthbar");
-       lua_pushboolean(L, player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE);
-       lua_setfield(L, -2, "crosshair");
-       lua_pushboolean(L, player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE);
-       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");
-       lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_RADAR_VISIBLE);
-       lua_setfield(L, -2, "minimap_radar");
+       const EnumString *esp = es_HudBuiltinElement;
+       for (int i = 0; esp[i].str; i++) {
+               lua_pushboolean(L, (player->hud_flags & esp[i].num) != 0);
+               lua_setfield(L, -2, esp[i].str);
+       }
        return 1;
 }