1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-22 22:34:33 +01:00

#21193: Move gParkRating to GameState_t

This commit is contained in:
Hielke Morsink
2024-01-23 00:11:34 +01:00
parent b5786c2a86
commit f85cac627d
12 changed files with 35 additions and 29 deletions

View File

@@ -143,7 +143,7 @@ private:
auto screenCoords = windowPos + ScreenCoordsXY{ widget.left + 11, widget.midY() - 5 };
DrawParkRating(
dpi, colours[3], screenCoords, std::max(10, ((gParkRating / 4) * 263) / 256));
dpi, colours[3], screenCoords, std::max(10, ((gameState.ParkRating / 4) * 263) / 256));
}
}
@@ -479,7 +479,7 @@ public:
ft.Add<money64>(gParkValue);
break;
case WIDX_PARK_RATING:
ft.Add<int16_t>(gParkRating);
ft.Add<int16_t>(GetGameState().ParkRating);
break;
}
return { fallback, ft };

View File

@@ -697,7 +697,7 @@ private:
// Current value
auto ft = Formatter();
ft.Add<uint16_t>(gParkRating);
ft.Add<uint16_t>(GetGameState().ParkRating);
DrawTextBasic(dpi, screenPos + ScreenCoordsXY{ widget->left + 3, widget->top + 2 }, STR_PARK_RATING_LABEL, ft);
// Graph border

View File

@@ -26,6 +26,7 @@ namespace OpenRCT2
{
uint32_t CurrentTicks{};
uint64_t ParkFlags;
uint16_t ParkRating;
ClimateType Climate;
ClimateState ClimateNext;
money64 Cash;

View File

@@ -557,7 +557,7 @@ static int32_t ConsoleCommandGet(InteractiveConsole& console, const arguments_t&
{
if (argv[0] == "park_rating")
{
console.WriteFormatLine("park_rating %d", gParkRating);
console.WriteFormatLine("park_rating %d", gameState.ParkRating);
}
else if (argv[0] == "park_value")
{

View File

@@ -410,7 +410,7 @@ static bool AwardIsDeservedMostDisappointing(int32_t activeAwardTypes)
{
if (activeAwardTypes & EnumToFlag(AwardType::BestValue))
return false;
if (gParkRating > 650)
if (GetGameState().ParkRating > 650)
return false;
// Count the number of disappointing rides

View File

@@ -889,7 +889,7 @@ namespace OpenRCT2
cs.ReadWrite(gParkSize);
cs.ReadWrite(gNumGuestsInPark);
cs.ReadWrite(gNumGuestsHeadingForPark);
cs.ReadWrite(gParkRating);
cs.ReadWrite(gameState.ParkRating);
cs.ReadWrite(gParkRatingCasualtyPenalty);
cs.ReadWrite(gCurrentExpenditure);
cs.ReadWrite(gCurrentProfit);

View File

@@ -2126,7 +2126,7 @@ namespace RCT1
GetContext()->GetGameState()->SetDate(Date(_s4.Month, _s4.Day));
// Park rating
gParkRating = _s4.ParkRating;
gameState.ParkRating = _s4.ParkRating;
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
park.ResetHistories();

View File

@@ -305,7 +305,7 @@ namespace RCT2
gStaffMechanicColour = _s6.MechanicColour;
gStaffSecurityColour = _s6.SecurityColour;
gParkRating = _s6.ParkRating;
gameState.ParkRating = _s6.ParkRating;
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
park.ResetHistories();

View File

@@ -114,7 +114,7 @@ void ScenarioReset()
auto& gameState = GetGameState();
auto& park = GetContext()->GetGameState()->GetPark();
gParkRating = park.CalculateParkRating();
gameState.ParkRating = park.CalculateParkRating();
gParkValue = park.CalculateParkValue();
gCompanyValue = park.CalculateCompanyValue();
gHistoricalProfit = gameState.InitialCash - gBankLoan;
@@ -621,7 +621,7 @@ ResultWithMessage ScenarioPrepareForSave()
ObjectiveStatus Objective::CheckGuestsBy() const
{
auto parkRating = gParkRating;
auto parkRating = GetGameState().ParkRating;
int32_t currentMonthYear = GetDate().GetMonthsElapsed();
if (currentMonthYear == MONTH_COUNT * Year || AllowEarlyCompletion())
@@ -700,7 +700,8 @@ ObjectiveStatus Objective::Check10RollerCoasters() const
*/
ObjectiveStatus Objective::CheckGuestsAndRating() const
{
if (gParkRating < 700 && GetDate().GetMonthsElapsed() >= 1)
auto& gameState = GetGameState();
if (gameState.ParkRating < 700 && GetDate().GetMonthsElapsed() >= 1)
{
gScenarioParkRatingWarningDays++;
if (gScenarioParkRatingWarningDays == 1)
@@ -734,7 +735,6 @@ ObjectiveStatus Objective::CheckGuestsAndRating() const
else if (gScenarioParkRatingWarningDays == 29)
{
News::AddItemToQueue(News::ItemType::Graph, STR_PARK_HAS_BEEN_CLOSED_DOWN, 0, {});
auto& gameState = GetGameState();
gameState.ParkFlags &= ~PARK_FLAGS_PARK_OPEN;
gameState.GuestInitialHappiness = 50;
return ObjectiveStatus::Failure;
@@ -745,7 +745,7 @@ ObjectiveStatus Objective::CheckGuestsAndRating() const
gScenarioParkRatingWarningDays = 0;
}
if (gParkRating >= 700)
if (gameState.ParkRating >= 700)
if (gNumGuestsInPark >= NumGuests)
return ObjectiveStatus::Success;

View File

@@ -57,9 +57,10 @@ namespace OpenRCT2::Scripting
{
ThrowIfGameStateNotMutable();
if (GetGameState().Cash != value)
auto& gameState = GetGameState();
if (gameState.Cash != value)
{
GetGameState().Cash = value;
gameState.Cash = value;
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
ContextBroadcastIntent(&intent);
}
@@ -67,16 +68,17 @@ namespace OpenRCT2::Scripting
int32_t ScPark::rating_get() const
{
return gParkRating;
return GetGameState().ParkRating;
}
void ScPark::rating_set(int32_t value)
{
ThrowIfGameStateNotMutable();
auto valueClamped = std::min(std::max(0, value), 999);
if (gParkRating != valueClamped)
auto& gameState = GetGameState();
if (gameState.ParkRating != valueClamped)
{
gParkRating = std::min(std::max(0, value), 999);
gameState.ParkRating = std::min(std::max(0, value), 999);
auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING);
ContextBroadcastIntent(&intent);
}

View File

@@ -46,7 +46,6 @@
using namespace OpenRCT2;
uint16_t gParkRating;
money64 gParkEntranceFee;
uint32_t gParkSize;
money64 gLandPrice;
@@ -180,7 +179,7 @@ void ParkSetForcedRating(int32_t rating)
{
_forcedParkRating = rating;
auto& park = GetContext()->GetGameState()->GetPark();
gParkRating = park.CalculateParkRating();
GetGameState().ParkRating = park.CalculateParkRating();
auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING);
ContextBroadcastIntent(&intent);
}
@@ -238,7 +237,7 @@ bool Park::IsOpen() const
uint16_t Park::GetParkRating() const
{
return gParkRating;
return GetGameState().ParkRating;
}
money64 Park::GetParkValue() const
@@ -254,6 +253,7 @@ money64 Park::GetCompanyValue() const
void Park::Initialise()
{
auto& gameState = GetGameState();
Name = FormatStringID(STR_UNNAMED_PARK, nullptr);
PluginStorage = {};
gStaffHandymanColour = COLOUR_BRIGHT_RED;
@@ -263,7 +263,7 @@ void Park::Initialise()
gNumGuestsInParkLastWeek = 0;
gNumGuestsHeadingForPark = 0;
gGuestChangeModifier = 0;
gParkRating = 0;
gameState.ParkRating = 0;
_guestGenerationProbability = 0;
gTotalRideValueForMoney = 0;
_suggestedGuestMaximum = 0;
@@ -296,7 +296,7 @@ void Park::Initialise()
gScenarioObjective.NumGuests = 1000;
gLandPrice = 90.00_GBP;
gConstructionRightsPrice = 40.00_GBP;
GetGameState().ParkFlags = PARK_FLAGS_NO_MONEY | PARK_FLAGS_SHOW_REAL_GUEST_NAMES;
gameState.ParkFlags = PARK_FLAGS_NO_MONEY | PARK_FLAGS_SHOW_REAL_GUEST_NAMES;
ResetHistories();
FinanceResetHistory();
AwardReset();
@@ -315,12 +315,13 @@ void Park::Update(const Date& date)
UpdateHistories();
}
const auto currentTicks = GetGameState().CurrentTicks;
auto& gameState = GetGameState();
const auto currentTicks = gameState.CurrentTicks;
// Every ~13 seconds
if (currentTicks % 512 == 0)
{
gParkRating = CalculateParkRating();
gameState.ParkRating = CalculateParkRating();
gParkValue = CalculateParkValue();
gCompanyValue = CalculateCompanyValue();
gTotalRideValueForMoney = CalculateTotalRideValueForMoney();
@@ -599,8 +600,10 @@ uint32_t Park::CalculateSuggestedMaxGuests() const
uint32_t Park::CalculateGuestGenerationProbability() const
{
auto& gameState = GetGameState();
// Begin with 50 + park rating
uint32_t probability = 50 + std::clamp(gParkRating - 200, 0, 650);
uint32_t probability = 50 + std::clamp(gameState.ParkRating - 200, 0, 650);
// The more guests, the lower the chance of a new one
uint32_t numGuests = gNumGuestsInPark + gNumGuestsHeadingForPark;
@@ -608,7 +611,7 @@ uint32_t Park::CalculateGuestGenerationProbability() const
{
probability /= 4;
// Even lower for difficult guest generation
if (GetGameState().ParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION)
if (gameState.ParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION)
{
probability /= 4;
}
@@ -759,7 +762,8 @@ void Park::UpdateHistories()
gNumGuestsInParkLastWeek = gNumGuestsInPark;
// Update park rating, guests in park and current cash history
HistoryPushRecord<uint8_t, 32>(gParkRatingHistory, gParkRating / 4);
auto& gameState = GetGameState();
HistoryPushRecord<uint8_t, 32>(gParkRatingHistory, gameState.ParkRating / 4);
HistoryPushRecord<uint32_t, 32>(gGuestsInParkHistory, gNumGuestsInPark);
HistoryPushRecord<money64, std::size(gCashHistory)>(gCashHistory, FinanceGetCurrentCash() - gBankLoan);

View File

@@ -92,7 +92,6 @@ namespace OpenRCT2
};
} // namespace OpenRCT2
extern uint16_t gParkRating;
extern money64 gParkEntranceFee;
extern uint32_t gParkSize;
extern money64 gLandPrice;