added support for toggling extra game panel items by left Shift key
authorHolger Schemel <info@artsoft.org>
Wed, 5 Feb 2025 23:49:07 +0000 (00:49 +0100)
committerHolger Schemel <info@artsoft.org>
Wed, 5 Feb 2025 23:49:14 +0000 (00:49 +0100)
src/events.c
src/game.c
src/game.h

index f037befc3fb371d010c7ec1226c9e7f175a912e7..8f67cd31b73a9461be35d5031d392b194ef40e05 100644 (file)
@@ -2313,6 +2313,14 @@ void HandleKey(Key key, int key_status)
       if (key_action & JOY_BUTTON)
         game_button_key_pressed = TRUE;
     }
+
+    // check if key to toggle extra game panel items was pressed or released
+    if (key == KSYM_Shift_L)
+    {
+      game.panel.show_extra_items = (key_status == KEY_PRESSED);
+
+      DrawGameDoorValues_ForceRedraw();
+    }
   }
   else
   {
index 7b2e7a35bcb8792be9bc4e9da5dced8fba70d07c..722b59212b09aced6f11e43c8cd4992562d154ef 100644 (file)
 
 #define PANEL_OFF()            (game.panel.active == FALSE)
 #define        PANEL_DEACTIVATED(p)    ((p)->x < 0 || (p)->y < 0 || PANEL_OFF())
-#define PANEL_XOFFSET(p)       (setup.show_extra_panel_items ? (p)->xoffset2 : 0)
-#define PANEL_YOFFSET(p)       (setup.show_extra_panel_items ? (p)->yoffset2 : 0)
-#define PANEL_XPOS(p)          (DX + ALIGNED_TEXT_XPOS(p) + PANEL_XOFFSET(p))
-#define PANEL_YPOS(p)          (DY + ALIGNED_TEXT_YPOS(p) + PANEL_YOFFSET(p))
+#define PANEL_SHOW_EXTRA()     (setup.show_extra_panel_items)
+#define PANEL_TOGGLE_EXTRA()   (game.panel.show_extra_items && !setup.show_extra_panel_items)
+#define PANEL_XOFFSET_2ND(p)   (PANEL_SHOW_EXTRA() ? (p)->xoffset2 : 0)
+#define PANEL_YOFFSET_2ND(p)   (PANEL_SHOW_EXTRA() ? (p)->yoffset2 : 0)
+#define PANEL_XOFFSET_TOGGLE(p)        (PANEL_TOGGLE_EXTRA() ? (p)->xoffset : 0)
+#define PANEL_YOFFSET_TOGGLE(p)        (PANEL_TOGGLE_EXTRA() ? (p)->yoffset : 0)
+#define PANEL_XOFFSETS(p)      (PANEL_XOFFSET_2ND(p) + PANEL_XOFFSET_TOGGLE(p))
+#define PANEL_YOFFSETS(p)      (PANEL_YOFFSET_2ND(p) + PANEL_YOFFSET_TOGGLE(p))
+#define PANEL_XPOS(p)          (DX + ALIGNED_TEXT_XPOS(p) + PANEL_XOFFSETS(p))
+#define PANEL_YPOS(p)          (DY + ALIGNED_TEXT_YPOS(p) + PANEL_YOFFSETS(p))
 
 // game panel display and control definitions
 #define GAME_PANEL_LEVEL_NUMBER                        0
@@ -3006,9 +3012,9 @@ static void UpdateGameControlValues(void)
   }
 }
 
-static void DisplayGameControlValues(void)
+static void DisplayGameControlValuesExt(boolean force_redraw)
 {
-  boolean redraw_panel = FALSE;
+  boolean redraw_panel = force_redraw;
   int i;
 
   for (i = 0; game_panel_controls[i].nr != -1; i++)
@@ -3057,7 +3063,8 @@ static void DisplayGameControlValues(void)
       continue;
 
     if (hasClass(pos->class, CLASS_EXTRA_PANEL_ITEMS) &&
-       !setup.show_extra_panel_items)
+       !setup.show_extra_panel_items &&
+        !game.panel.show_extra_items)
       continue;
 
     if (hasClass(pos->class, CLASS_BD_PRE_HATCHING) &&
@@ -3302,6 +3309,16 @@ static void DisplayGameControlValues(void)
   SetGameStatus(GAME_MODE_PLAYING);
 }
 
+static void DisplayGameControlValues(void)
+{
+  DisplayGameControlValuesExt(FALSE);
+}
+
+static void DisplayGameControlValues_ForceRedraw(void)
+{
+  DisplayGameControlValuesExt(TRUE);
+}
+
 void UpdateAndDisplayGameControlValues(void)
 {
   if (tape.deactivate_display)
@@ -3321,6 +3338,11 @@ void DrawGameDoorValues(void)
   DisplayGameControlValues();
 }
 
+void DrawGameDoorValues_ForceRedraw(void)
+{
+  DisplayGameControlValues_ForceRedraw();
+}
+
 
 // ============================================================================
 // InitGameEngine()
@@ -4371,6 +4393,7 @@ void InitGame(void)
   game.RestartGameRequested = FALSE;
 
   game.panel.active = TRUE;
+  game.panel.show_extra_items = FALSE;
 
   game.no_level_time_limit = (level.time == 0);
   game.time_limit = (leveldir_current->time_limit && setup.time_limit);
index 844bd43ac7ca0249f58d9eaeafbb53de484aac46..656bdb4c7f4c4453b50ec1782873aa72f9b508d5 100644 (file)
@@ -139,6 +139,9 @@ struct GamePanelInfo
 
   // value to determine if panel will be updated or not
   boolean active;
+
+  // value for dynamically showing extra panel items
+  boolean show_extra_items;
 };
 
 struct GameButtonInfo
@@ -460,6 +463,7 @@ int getPlayerInventorySize(int);
 
 void UpdateGameDoorValues(void);
 void DrawGameDoorValues(void);
+void DrawGameDoorValues_ForceRedraw(void);
 
 void UpdateAndDisplayGameControlValues(void);