From: Holger Schemel Date: Wed, 5 Feb 2025 23:49:07 +0000 (+0100) Subject: added support for toggling extra game panel items by left Shift key X-Git-Tag: 4.4.0.4~7 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=be8cad4e08e0588ffd86834e72282c00417bf581;p=rocksndiamonds.git added support for toggling extra game panel items by left Shift key --- diff --git a/src/events.c b/src/events.c index f037befc..8f67cd31 100644 --- a/src/events.c +++ b/src/events.c @@ -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 { diff --git a/src/game.c b/src/game.c index 7b2e7a35..722b5921 100644 --- a/src/game.c +++ b/src/game.c @@ -83,10 +83,16 @@ #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); diff --git a/src/game.h b/src/game.h index 844bd43a..656bdb4c 100644 --- a/src/game.h +++ b/src/game.h @@ -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);