Move Park to GameState_t

This commit is contained in:
Gymnasiast 2024-03-26 14:37:30 +01:00
parent 1f1377a8ef
commit 28451027b1
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
21 changed files with 45 additions and 60 deletions

View File

@ -134,7 +134,7 @@ static InteractionInfo ViewportInteractionGetItemLeft(const ScreenCoordsXY& scre
break;
case ViewportInteractionItem::ParkEntrance:
{
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
auto parkName = park.Name.c_str();
auto ft = Formatter();

View File

@ -662,7 +662,7 @@ static uint64_t window_editor_objective_options_page_hold_down_widgets[] = {
{
case WIDX_PARK_NAME:
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
WindowTextInputRawOpen(
this, WIDX_PARK_NAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, {}, park.Name.c_str(), ParkNameMaxLength);
break;
@ -794,7 +794,7 @@ static uint64_t window_editor_objective_options_page_hold_down_widgets[] = {
if (gameState.ScenarioName.empty())
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
gameState.ScenarioName = park.Name;
}
break;
@ -972,7 +972,7 @@ static uint64_t window_editor_objective_options_page_hold_down_widgets[] = {
widthToSet = widgets[WIDX_PARK_NAME].left - 16;
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
auto parkName = park.Name.c_str();
ft = Formatter();

View File

@ -870,7 +870,7 @@ static Widget _windowFinancesResearchWidgets[] =
break;
default:
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
auto parkName = park.Name.c_str();
ft.Add<StringId>(STR_STRING);
ft.Add<const char*>(parkName);

View File

@ -1629,7 +1629,7 @@ static_assert(_guestWindowPageWidgets.size() == WINDOW_GUEST_PAGE_COUNT);
std::pair<StringId, Formatter> InventoryFormatItem(Guest& guest, ShopItem item) const
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
auto parkName = park.Name.c_str();
// Default arguments

View File

@ -458,7 +458,7 @@ static Widget window_loadsave_widgets[] =
}
else
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
auto buffer = park.Name;
if (buffer.empty())
{

View File

@ -402,7 +402,7 @@ static constexpr WindowParkAward _parkAwards[] = {
void PrepareWindowTitleText()
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
auto parkName = park.Name.c_str();
auto ft = Formatter::Common();
@ -423,7 +423,7 @@ static constexpr WindowParkAward _parkAwards[] = {
break;
case WIDX_RENAME:
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
WindowTextInputRawOpen(
this, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, {}, park.Name.c_str(), USER_STRING_MAX_LENGTH);
break;
@ -512,7 +512,7 @@ static constexpr WindowParkAward _parkAwards[] = {
// Set open / close park button state
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
auto parkName = park.Name.c_str();
auto ft = Formatter::Common();

View File

@ -62,7 +62,6 @@ namespace OpenRCT2
GameState::GameState()
{
_park = std::make_unique<Park>();
}
/**
@ -77,7 +76,7 @@ void GameState::InitAll(const TileCoordsXY& mapSize)
gameState.CurrentTicks = 0;
MapInit(mapSize);
_park->Initialise();
gameState.Park.Initialise();
FinanceInit();
BannerInit(gameState);
RideInitAll();
@ -340,7 +339,7 @@ void GameState::UpdateLogic()
if (!(gScreenFlags & SCREEN_FLAGS_EDITOR))
{
_park->Update(gameState.Date);
gameState.Park.Update(gameState.Date);
}
ResearchUpdate();

View File

@ -38,6 +38,7 @@ namespace OpenRCT2
struct GameState_t
{
::OpenRCT2::Park Park{};
uint32_t CurrentTicks{};
::OpenRCT2::Date Date;
uint64_t ParkFlags;
@ -162,18 +163,10 @@ namespace OpenRCT2
*/
class GameState final
{
private:
std::unique_ptr<Park> _park;
public:
GameState();
GameState(const GameState&) = delete;
Park& GetPark()
{
return *_park;
}
void InitAll(const TileCoordsXY& mapSize);
void Tick();
void UpdateLogic();

View File

@ -607,7 +607,7 @@ void CheatSetAction::ClearLoan() const
void CheatSetAction::GenerateGuests(int32_t count) const
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
for (int32_t i = 0; i < count; i++)
{
park.GenerateGuest();

View File

@ -56,7 +56,7 @@ GameActions::Result ParkSetNameAction::Query() const
GameActions::Result ParkSetNameAction::Execute() const
{
// Do a no-op if new name is the same as the current name is the same
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
if (_name != park.Name)
{
park.Name = _name;

View File

@ -156,7 +156,7 @@ GameActions::Result RideDemolishAction::DemolishRide(Ride& ride) const
}
ride.Delete();
GetGameState().ParkValue = GetContext()->GetGameState()->GetPark().CalculateParkValue();
GetGameState().ParkValue = GetGameState().Park.CalculateParkValue();
// Close windows related to the demolished ride
WindowCloseByNumber(WindowClass::RideConstruction, rideId.ToUnderlying());

View File

@ -105,7 +105,7 @@ void ScreenshotCheck()
static std::string ScreenshotGetParkName()
{
return GetContext()->GetGameState()->GetPark().Name;
return GetGameState().Park.Name;
}
static std::string ScreenshotGetDirectory()

View File

@ -63,12 +63,8 @@ DiscordService::~DiscordService()
static std::string GetParkName()
{
auto gameState = OpenRCT2::GetContext()->GetGameState();
if (gameState != nullptr)
{
return gameState->GetPark().Name;
}
return {};
auto& gameState = OpenRCT2::GetGameState();
return gameState.Park.Name;
}
void DiscordService::Tick()

View File

@ -222,7 +222,7 @@ static void PaintParkEntranceScrollingText(
auto ft = Formatter();
if (GetGameState().ParkFlags & PARK_FLAGS_PARK_OPEN)
{
const auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
const auto& park = OpenRCT2::GetGameState().Park;
auto name = park.Name.c_str();
ft.Add<StringId>(STR_STRING);
ft.Add<const char*>(name);

View File

@ -420,11 +420,7 @@ namespace OpenRCT2
os.ReadWriteChunk(ParkFileChunkType::SCENARIO, [&gameState, &os](OrcaStream::ChunkStream& cs) {
cs.ReadWrite(gameState.ScenarioCategory);
ReadWriteStringTable(cs, gameState.ScenarioName, "en-GB");
// TODO: Use the passed gameState instead of the global one.
auto& park = GetContext()->GetGameState()->GetPark();
ReadWriteStringTable(cs, park.Name, "en-GB");
ReadWriteStringTable(cs, gameState.Park.Name, "en-GB");
ReadWriteStringTable(cs, gameState.ScenarioDetails, "en-GB");
cs.ReadWrite(gameState.ScenarioObjective.Type);
@ -653,8 +649,7 @@ namespace OpenRCT2
void ReadWritePluginStorageChunk(GameState_t& gameState, OrcaStream& os)
{
// TODO: Use the passed gameState instead of the global one.
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = gameState.Park;
if (os.GetMode() == OrcaStream::Mode::WRITING)
{
#ifdef ENABLE_SCRIPTING
@ -798,9 +793,7 @@ namespace OpenRCT2
{
os.ReadWriteChunk(
ParkFileChunkType::PARK, [version = os.GetHeader().TargetVersion, &gameState](OrcaStream::ChunkStream& cs) {
// TODO: Use the passed gameState instead of the global one.
auto& park = GetContext()->GetGameState()->GetPark();
cs.ReadWrite(park.Name);
cs.ReadWrite(gameState.Park.Name);
cs.ReadWrite(gameState.Cash);
cs.ReadWrite(gameState.BankLoan);
cs.ReadWrite(gameState.MaxBankLoan);

View File

@ -275,7 +275,7 @@ namespace RCT1
{
// Use the ratio between the old and new park value to calcute the ratio to
// use for the park value history and the goal.
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
_parkValueConversionFactor = (park.CalculateParkValue() * 10) / _s4.ParkValue;
}
else
@ -2136,7 +2136,7 @@ namespace RCT1
}
}
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
park.Name = std::move(parkName);
}
@ -2150,7 +2150,7 @@ namespace RCT1
// Park rating
gameState.ParkRating = _s4.ParkRating;
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
park.ResetHistories();
std::copy(std::begin(_s4.ParkRatingHistory), std::end(_s4.ParkRatingHistory), gameState.ParkRatingHistory);
for (size_t i = 0; i < std::size(_s4.GuestsInParkHistory); i++)
@ -2351,7 +2351,7 @@ namespace RCT1
gameState.ScenarioDetails = std::move(details);
if (_isScenario && !parkName.empty())
{
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
park.Name = std::move(parkName);
}
}

View File

@ -307,7 +307,7 @@ namespace RCT2
gameState.ParkRating = _s6.ParkRating;
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto& park = OpenRCT2::GetGameState().Park;
park.ResetHistories();
std::copy(std::begin(_s6.ParkRatingHistory), std::end(_s6.ParkRatingHistory), gameState.ParkRatingHistory);
for (size_t i = 0; i < std::size(_s6.GuestsInParkHistory); i++)

View File

@ -100,7 +100,7 @@ void ScenarioReset(GameState_t& gameState)
ScenerySetDefaultPlacementConfiguration();
News::InitQueue();
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
gameState.ParkRating = park.CalculateParkRating();
gameState.ParkValue = park.CalculateParkValue();
gameState.CompanyValue = park.CalculateCompanyValue();

View File

@ -278,13 +278,13 @@ namespace OpenRCT2::Scripting
std::string ScPark::name_get() const
{
return GetContext()->GetGameState()->GetPark().Name;
return GetGameState().Park.Name;
}
void ScPark::name_set(std::string value)
{
ThrowIfGameStateNotMutable();
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
if (park.Name != value)
{
park.Name = std::move(value);

View File

@ -152,7 +152,7 @@ void ParkUpdateFencesAroundTile(const CoordsXY& coords)
void ParkSetForcedRating(int32_t rating)
{
_forcedParkRating = rating;
auto& park = GetContext()->GetGameState()->GetPark();
auto& park = GetGameState().Park;
GetGameState().ParkRating = park.CalculateParkRating();
auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING);
ContextBroadcastIntent(&intent);
@ -776,13 +776,13 @@ void Park::UpdateHistories()
int32_t ParkIsOpen()
{
return GetContext()->GetGameState()->GetPark().IsOpen();
return GetGameState().Park.IsOpen();
}
uint32_t ParkCalculateSize()
{
auto& gameState = GetGameState();
auto tiles = GetContext()->GetGameState()->GetPark().CalculateParkSize();
auto tiles = GetGameState().Park.CalculateParkSize();
if (tiles != gameState.ParkSize)
{
gameState.ParkSize = tiles;

View File

@ -98,11 +98,13 @@ TEST_F(PlayTests, SecondGuestInQueueShouldNotRideIfNoFunds)
auto gs = context->GetGameState();
ASSERT_NE(gs, nullptr);
auto& gameState = GetGameState();
// Open park for free but charging for rides
execute<ParkSetParameterAction>(ParkParameter::Open);
execute<ParkSetEntranceFeeAction>(0);
GetGameState().ParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
gameState.ParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
// Find ferris wheel
auto rideManager = GetRideManager();
@ -116,10 +118,10 @@ TEST_F(PlayTests, SecondGuestInQueueShouldNotRideIfNoFunds)
execute<RideSetPriceAction>(ferrisWheel.id, 0, true);
// Ignore intensity to stimulate peeps to queue into ferris wheel
GetGameState().Cheats.IgnoreRideIntensity = true;
gameState.Cheats.IgnoreRideIntensity = true;
// Insert a rich guest
auto richGuest = gs->GetPark().GenerateGuest();
auto richGuest = gameState.Park.GenerateGuest();
richGuest->CashInPocket = 3000;
// Wait for rich guest to get in queue
@ -127,7 +129,7 @@ TEST_F(PlayTests, SecondGuestInQueueShouldNotRideIfNoFunds)
ASSERT_TRUE(matched);
// Insert poor guest
auto poorGuest = gs->GetPark().GenerateGuest();
auto poorGuest = gameState.Park.GenerateGuest();
poorGuest->CashInPocket = 5;
// Wait for poor guest to get in queue
@ -159,11 +161,13 @@ TEST_F(PlayTests, CarRideWithOneCarOnlyAcceptsTwoGuests)
auto gs = context->GetGameState();
ASSERT_NE(gs, nullptr);
auto& gameState = GetGameState();
// Open park for free but charging for rides
execute<ParkSetParameterAction>(ParkParameter::Open);
execute<ParkSetEntranceFeeAction>(0);
GetGameState().ParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
gameState.ParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
// Find car ride
auto rideManager = GetRideManager();
@ -176,13 +180,13 @@ TEST_F(PlayTests, CarRideWithOneCarOnlyAcceptsTwoGuests)
execute<RideSetPriceAction>(carRide.id, 0, true);
// Ignore intensity to stimulate peeps to queue into the ride
GetGameState().Cheats.IgnoreRideIntensity = true;
gameState.Cheats.IgnoreRideIntensity = true;
// Create some guests
std::vector<Peep*> guests;
for (int i = 0; i < 25; i++)
{
guests.push_back(gs->GetPark().GenerateGuest());
guests.push_back(gameState.Park.GenerateGuest());
}
// Wait until one of them is riding