From 59ed2c0c13a6452150470d46a730376f0ce9c8f2 Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Thu, 14 Nov 2024 14:07:02 +0700 Subject: [PATCH] draw cmd widget on intermission screen (#2024) --- src/st_stuff.c | 35 ++++++++++++++++++++++++++--------- src/st_stuff.h | 1 + src/st_widgets.c | 3 ++- src/st_widgets.h | 2 +- src/wi_stuff.c | 1 + 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/st_stuff.c b/src/st_stuff.c index 8e78be6e..1f38cfda 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -134,6 +134,8 @@ static sbardef_t *sbardef; static statusbar_t *statusbar; +static int st_cmd_x, st_cmd_y; + typedef enum { st_original, @@ -782,7 +784,6 @@ static void UpdateNumber(sbarelem_t *elem, player_t *player) number->xoffset -= totalwidth; } - number->font = font; number->value = value; number->numvalues = numvalues; } @@ -840,8 +841,6 @@ static void UpdateLines(sbarelem_t *elem) } line->totalwidth = totalwidth; } - - widget->font = font; } static void UpdateAnimation(sbarelem_t *elem) @@ -1382,6 +1381,11 @@ static void DrawElem(int x, int y, sbarelem_t *elem, player_t *player) break; case sbe_widget: + if (elem == st_cmd_elem) + { + st_cmd_x = x; + st_cmd_y = y; + } DrawLines(x, y, elem); break; @@ -1770,17 +1774,30 @@ void ST_ResetPalette(void) } // [FG] draw Time widget on intermission screen + +void WI_UpdateWidgets(void) +{ + if (st_cmd_elem && STRICTMODE(hud_command_history)) + { + ST_UpdateWidget(st_cmd_elem, &players[displayplayer]); + UpdateLines(st_cmd_elem); + } +} + void WI_DrawWidgets(void) { - if (!st_time_elem || !(hud_level_time & HUD_WIDGET_HUD)) + if (st_time_elem && hud_level_time & HUD_WIDGET_HUD) { - return; + sbarelem_t time = *st_time_elem; + time.alignment = sbe_wide_left; + // leveltime is already added to totalleveltimes before WI_Start() + DrawLines(0, 0, &time); } - sbarelem_t time = *st_time_elem; - time.alignment = sbe_wide_left; - // leveltime is already added to totalleveltimes before WI_Start() - DrawLines(0, 0, &time); + if (st_cmd_elem && STRICTMODE(hud_command_history)) + { + DrawLines(st_cmd_x, st_cmd_y, st_cmd_elem); + } } void ST_BindSTSVariables(void) diff --git a/src/st_stuff.h b/src/st_stuff.h index 695e6cb5..489bc31a 100644 --- a/src/st_stuff.h +++ b/src/st_stuff.h @@ -72,6 +72,7 @@ extern boolean palette_changes; extern struct hudfont_s *stcfnt; extern struct patch_s **hu_font; +void WI_UpdateWidgets(void); void WI_DrawWidgets(void); void ST_BindSTSVariables(void); diff --git a/src/st_widgets.c b/src/st_widgets.c index ebed23e8..2b60c495 100644 --- a/src/st_widgets.c +++ b/src/st_widgets.c @@ -1103,7 +1103,7 @@ void ST_ResetMessageColors(void) } } -sbarelem_t *st_time_elem = NULL; +sbarelem_t *st_time_elem = NULL, *st_cmd_elem = NULL; void ST_UpdateWidget(sbarelem_t *elem, player_t *player) { @@ -1144,6 +1144,7 @@ void ST_UpdateWidget(sbarelem_t *elem, player_t *player) UpdateRate(widget, player); break; case sbw_cmd: + st_cmd_elem = elem; UpdateCmd(widget); break; case sbw_speed: diff --git a/src/st_widgets.h b/src/st_widgets.h index 21e6c22a..81e5175e 100644 --- a/src/st_widgets.h +++ b/src/st_widgets.h @@ -56,7 +56,7 @@ extern int hudcolor_xyco; extern boolean hud_time_use; -extern struct sbarelem_s *st_time_elem; +extern struct sbarelem_s *st_time_elem, *st_cmd_elem; void ST_ResetTitle(void); diff --git a/src/wi_stuff.c b/src/wi_stuff.c index ab1662ad..be31b1c6 100644 --- a/src/wi_stuff.c +++ b/src/wi_stuff.c @@ -2259,6 +2259,7 @@ void WI_Ticker(void) else if (netgame) WI_updateNetgameStats(); else WI_updateStats(); + WI_UpdateWidgets(); break; case ShowNextLoc: