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:
@@ -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 };
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -26,6 +26,7 @@ namespace OpenRCT2
|
||||
{
|
||||
uint32_t CurrentTicks{};
|
||||
uint64_t ParkFlags;
|
||||
uint16_t ParkRating;
|
||||
ClimateType Climate;
|
||||
ClimateState ClimateNext;
|
||||
money64 Cash;
|
||||
|
||||
@@ -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")
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@ namespace OpenRCT2
|
||||
};
|
||||
} // namespace OpenRCT2
|
||||
|
||||
extern uint16_t gParkRating;
|
||||
extern money64 gParkEntranceFee;
|
||||
extern uint32_t gParkSize;
|
||||
extern money64 gLandPrice;
|
||||
|
||||
Reference in New Issue
Block a user