1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-28 09:14:58 +01:00

Use new progress bar widgets in Guest window

This commit is contained in:
Gymnasiast
2024-05-19 18:42:43 +02:00
parent 250a26fb14
commit b5743eccbc

View File

@@ -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;