From b5743eccbcd0a78508b3783789d16f0278b6916d Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 19 May 2024 18:42:43 +0200 Subject: [PATCH] Use new progress bar widgets in Guest window --- src/openrct2-ui/windows/Guest.cpp | 92 ++++++++++++------------------- 1 file changed, 36 insertions(+), 56 deletions(-) diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index 66fd20e284..d1cc1937c0 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -70,7 +70,9 @@ namespace OpenRCT2::Ui::Windows WIDX_TAB_6, WIDX_TAB_7, - WIDX_MARQUEE = 11, + WIDX_TAB_CONTENT_START, + + WIDX_MARQUEE = WIDX_TAB_CONTENT_START, WIDX_VIEWPORT, WIDX_ACTION_LBL, WIDX_PICKUP, @@ -78,7 +80,14 @@ namespace OpenRCT2::Ui::Windows WIDX_LOCATE, WIDX_TRACK, - WIDX_RIDE_SCROLL = 11 + WIDX_HAPPINESS_BAR = WIDX_TAB_CONTENT_START, + WIDX_ENERGY_BAR, + WIDX_HUNGER_BAR, + WIDX_THIRST_BAR, + WIDX_NAUSEA_BAR, + WIDX_TOILET_BAR, + + WIDX_RIDE_SCROLL = WIDX_TAB_CONTENT_START, }; validate_global_widx(WC_PEEP, WIDX_PICKUP); @@ -112,6 +121,12 @@ static Widget _guestWindowWidgetsOverview[] = { static Widget _guestWindowWidgetsStats[] = { MAIN_GUEST_WIDGETS, + MakeProgressBar({ 65, (kListRowHeight * 0) + 4 + 43 }, { 119, 10 }, COLOUR_BRIGHT_GREEN, 0, 19), // Happiness + MakeProgressBar({ 65, (kListRowHeight * 1) + 4 + 43 }, { 119, 10 }, COLOUR_BRIGHT_GREEN, 0, 19), // Energy + MakeProgressBar({ 65, (kListRowHeight * 2) + 4 + 43 }, { 119, 10 }, COLOUR_BRIGHT_RED, 67, 100), // Hunger + MakeProgressBar({ 65, (kListRowHeight * 3) + 4 + 43 }, { 119, 10 }, COLOUR_BRIGHT_RED, 67, 100), // Thirst + MakeProgressBar({ 65, (kListRowHeight * 4) + 4 + 43 }, { 119, 10 }, COLOUR_BRIGHT_RED, 47, 100), // Nausea + MakeProgressBar({ 65, (kListRowHeight * 5) + 4 + 43 }, { 119, 10 }, COLOUR_BRIGHT_RED, 62, 100), // Toilet kWidgetsEnd, }; @@ -1036,38 +1051,14 @@ static_assert(_guestWindowPageWidgets.size() == WINDOW_GUEST_PAGE_COUNT); Invalidate(); } - void StatsBarsDraw(int32_t value, const ScreenCoordsXY& origCoords, DrawPixelInfo& dpi, int32_t colour, bool blinkFlag) - { - auto coords = origCoords; - if (FontGetLineHeight(FontStyle::Medium) > 10) - { - coords.y += 1; - } - - GfxFillRectInset( - dpi, { coords + ScreenCoordsXY{ 61, 1 }, coords + ScreenCoordsXY{ 61 + 121, 9 } }, colours[1], INSET_RECT_F_30); - - if (!blinkFlag || GameIsPaused() || (gCurrentRealTimeTicks & 8) == 0) - { - value *= 118; - value >>= 8; - - if (value <= 2) - return; - - GfxFillRectInset( - dpi, { coords + ScreenCoordsXY{ 63, 2 }, coords + ScreenCoordsXY{ 63 + value - 1, 8 } }, colour, 0); - } - } - /** - * Takes a guest stat value (scaled to currMax) and adjusts it to be scaled out of 255. - * Then clamp the value to between newMin and 255. + * Takes a guest stat value (scaled to currMax) and adjusts it to be scaled out of 100. + * Then clamp the value to between newMin and 100. */ int32_t NormalizeGuestStatValue(int32_t value, int32_t currMax, int32_t newMin) const { - int32_t newValue = (value * 255) / currMax; - return std::clamp(newValue, newMin, 255); + int32_t newValue = (value * 100) / currMax; + return std::clamp(newValue, newMin, 100); } void OnDrawStats(DrawPixelInfo& dpi) @@ -1096,57 +1087,46 @@ static_assert(_guestWindowPageWidgets.size() == WINDOW_GUEST_PAGE_COUNT); // Happiness DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_HAPPINESS_LABEL); - int32_t happiness = NormalizeGuestStatValue(peep->Happiness, kPeepMaxHappiness, 10); - int32_t barColour = COLOUR_BRIGHT_GREEN; - bool barBlink = happiness < 50; - StatsBarsDraw(happiness, screenCoords, dpi, barColour, barBlink); + int32_t happinessPercentage = NormalizeGuestStatValue(peep->Happiness, kPeepMaxHappiness, 10); + WidgetProgressBarSetNewPercentage(widgets[WIDX_HAPPINESS_BAR], happinessPercentage); // Energy screenCoords.y += kListRowHeight; DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_ENERGY_LABEL); - int32_t energy = NormalizeGuestStatValue(peep->Energy - kPeepMinEnergy, kPeepMaxEnergy - kPeepMinEnergy, 10); - barColour = COLOUR_BRIGHT_GREEN; - barBlink = energy < 50; - StatsBarsDraw(energy, screenCoords, dpi, barColour, barBlink); + int32_t energyPercentage = NormalizeGuestStatValue( + peep->Energy - kPeepMinEnergy, kPeepMaxEnergy - kPeepMinEnergy, 10); + WidgetProgressBarSetNewPercentage(widgets[WIDX_ENERGY_BAR], energyPercentage); // Hunger screenCoords.y += kListRowHeight; DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_HUNGER_LABEL); - int32_t hunger = NormalizeGuestStatValue(peep->Hunger - 32, 158, 0); - hunger = 255 - hunger; // the bar should be longer when peep->Hunger is low - barColour = COLOUR_BRIGHT_RED; - barBlink = hunger > 170; - StatsBarsDraw(hunger, screenCoords, dpi, barColour, barBlink); + int32_t hungerPercentage = NormalizeGuestStatValue(peep->Hunger - 32, 158, 0); + hungerPercentage = 100 - hungerPercentage; // the bar should be longer when peep->Hunger is low + WidgetProgressBarSetNewPercentage(widgets[WIDX_HUNGER_BAR], hungerPercentage); // Thirst screenCoords.y += kListRowHeight; DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_THIRST_LABEL); - int32_t thirst = NormalizeGuestStatValue(peep->Thirst - 32, 158, 0); - thirst = 255 - thirst; // the bar should be longer when peep->Thirst is low - barColour = COLOUR_BRIGHT_RED; - barBlink = thirst > 170; - StatsBarsDraw(thirst, screenCoords, dpi, barColour, barBlink); + int32_t thirstPercentage = NormalizeGuestStatValue(peep->Thirst - 32, 158, 0); + thirstPercentage = 100 - thirstPercentage; // the bar should be longer when peep->Thirst is low + WidgetProgressBarSetNewPercentage(widgets[WIDX_THIRST_BAR], thirstPercentage); // Nausea screenCoords.y += kListRowHeight; DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_NAUSEA_LABEL); - int32_t nausea = NormalizeGuestStatValue(peep->Nausea - 32, 223, 0); - barColour = COLOUR_BRIGHT_RED; - barBlink = nausea > 120; - StatsBarsDraw(nausea, screenCoords, dpi, barColour, barBlink); + int32_t nauseaPercentage = NormalizeGuestStatValue(peep->Nausea - 32, 223, 0); + WidgetProgressBarSetNewPercentage(widgets[WIDX_NAUSEA_BAR], nauseaPercentage); // Toilet screenCoords.y += kListRowHeight; DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_TOILET_LABEL); - int32_t toilet = NormalizeGuestStatValue(peep->Toilet - 64, 178, 0); - barColour = COLOUR_BRIGHT_RED; - barBlink = toilet > 160; - StatsBarsDraw(toilet, screenCoords, dpi, barColour, barBlink); + int32_t toiletPercentage = NormalizeGuestStatValue(peep->Toilet - 64, 178, 0); + WidgetProgressBarSetNewPercentage(widgets[WIDX_TOILET_BAR], toiletPercentage); // Time in park screenCoords.y += kListRowHeight + 1;