From 9d617958cf0bfa522d36d6744cd9c2f80a2a5d47 Mon Sep 17 00:00:00 2001 From: Ted John Date: Wed, 30 May 2018 13:06:39 +0100 Subject: [PATCH] Return date and park by reference from game state --- src/openrct2/Cheats.cpp | 7 ++++--- src/openrct2/GameState.h | 5 +++-- src/openrct2/actions/RideDemolishAction.hpp | 2 +- src/openrct2/rct1/S4Importer.cpp | 4 ++-- src/openrct2/scenario/Scenario.cpp | 10 +++++----- src/openrct2/world/Park.cpp | 8 ++++---- src/openrct2/world/Park.h | 3 +++ test/tests/MultiLaunch.cpp | 6 +++--- 8 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/openrct2/Cheats.cpp b/src/openrct2/Cheats.cpp index 0407b79850..ba0bbab2bf 100644 --- a/src/openrct2/Cheats.cpp +++ b/src/openrct2/Cheats.cpp @@ -270,10 +270,11 @@ static void cheat_clear_loan() static void cheat_generate_guests(sint32 count) { - auto park = GetContext()->GetGameState()->GetPark(); + auto& park = GetContext()->GetGameState()->GetPark(); for (sint32 i = 0; i < count; i++) - park->GenerateGuest(); - + { + park.GenerateGuest(); + } window_invalidate_by_class(WC_BOTTOM_TOOLBAR); } diff --git a/src/openrct2/GameState.h b/src/openrct2/GameState.h index a4c21902ea..047f7dc6e6 100644 --- a/src/openrct2/GameState.h +++ b/src/openrct2/GameState.h @@ -34,9 +34,10 @@ namespace OpenRCT2 public: GameState(); + GameState(const GameState&) = delete; - Date * GetDate() { return &_date; } - Park * GetPark() { return _park.get(); } + Date& GetDate() { return _date; } + Park& GetPark() { return *_park; } void InitAll(sint32 mapSize); void Update(); diff --git a/src/openrct2/actions/RideDemolishAction.hpp b/src/openrct2/actions/RideDemolishAction.hpp index 284e696bfe..4159191653 100644 --- a/src/openrct2/actions/RideDemolishAction.hpp +++ b/src/openrct2/actions/RideDemolishAction.hpp @@ -235,7 +235,7 @@ private: user_string_free(ride->name); ride->type = RIDE_TYPE_NULL; - gParkValue = GetContext()->GetGameState()->GetPark()->CalculateParkValue(); + gParkValue = GetContext()->GetGameState()->GetPark().CalculateParkValue(); auto res = std::make_unique(); res->ExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION; diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 871f45a3cd..91fd4b8259 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -284,8 +284,8 @@ public: { // 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(); - _parkValueConversionFactor = (park->CalculateParkValue() * 10) / _s4.park_value; + auto& park = GetContext()->GetGameState()->GetPark(); + _parkValueConversionFactor = (park.CalculateParkValue() * 10) / _s4.park_value; } else { diff --git a/src/openrct2/scenario/Scenario.cpp b/src/openrct2/scenario/Scenario.cpp index 2084de6e31..97a8c9c9b2 100644 --- a/src/openrct2/scenario/Scenario.cpp +++ b/src/openrct2/scenario/Scenario.cpp @@ -111,10 +111,10 @@ void scenario_begin() if (gScenarioObjectiveType != OBJECTIVE_NONE && !gLoadKeepWindowsOpen) context_open_window_view(WV_PARK_OBJECTIVE); - auto park = GetContext()->GetGameState()->GetPark(); - gParkRating = park->CalculateParkRating(); - gParkValue = park->CalculateParkValue(); - gCompanyValue = park->CalculateCompanyValue(); + auto& park = GetContext()->GetGameState()->GetPark(); + gParkRating = park.CalculateParkRating(); + gParkValue = park.CalculateParkValue(); + gCompanyValue = park.CalculateCompanyValue(); gHistoricalProfit = gInitialCash - gBankLoan; gCash = gInitialCash; @@ -173,7 +173,7 @@ void scenario_begin() gTotalAdmissions = 0; gTotalIncomeFromAdmissions = 0; safe_strcpy(gScenarioCompletedBy, "?", sizeof(gScenarioCompletedBy)); - park->ResetHistories(); + park.ResetHistories(); finance_reset_history(); award_reset(); reset_all_ride_build_dates(); diff --git a/src/openrct2/world/Park.cpp b/src/openrct2/world/Park.cpp index 259eec114e..c5a30e1d61 100644 --- a/src/openrct2/world/Park.cpp +++ b/src/openrct2/world/Park.cpp @@ -446,8 +446,8 @@ void game_command_buy_land_rights( void set_forced_park_rating(sint32 rating) { _forcedParkRating = rating; - auto park = GetContext()->GetGameState()->GetPark(); - gParkRating = park->CalculateParkRating(); + auto& park = GetContext()->GetGameState()->GetPark(); + gParkRating = park.CalculateParkRating(); auto intent = Intent(INTENT_ACTION_UPDATE_PARK_RATING); context_broadcast_intent(&intent); } @@ -1058,12 +1058,12 @@ void Park::UpdateHistories() sint32 park_is_open() { - return GetContext()->GetGameState()->GetPark()->IsOpen(); + return GetContext()->GetGameState()->GetPark().IsOpen(); } sint32 park_calculate_size() { - auto tiles = GetContext()->GetGameState()->GetPark()->CalculateParkSize(); + auto tiles = GetContext()->GetGameState()->GetPark().CalculateParkSize(); if (tiles != gParkSize) { gParkSize = tiles; diff --git a/src/openrct2/world/Park.h b/src/openrct2/world/Park.h index 40d97cccaf..e7719f9d68 100644 --- a/src/openrct2/world/Park.h +++ b/src/openrct2/world/Park.h @@ -60,6 +60,9 @@ namespace OpenRCT2 class Park final { public: + Park() = default; + Park(const Park&) = delete; + bool IsOpen() const; uint16 GetParkRating() const; diff --git a/test/tests/MultiLaunch.cpp b/test/tests/MultiLaunch.cpp index af859000a7..2e841292d3 100644 --- a/test/tests/MultiLaunch.cpp +++ b/test/tests/MultiLaunch.cpp @@ -39,15 +39,15 @@ TEST(MultiLaunchTest, all) ASSERT_EQ(gRideCount, 134); auto gs = context->GetGameState(); ASSERT_NE(gs, nullptr); - auto date = gs->GetDate(); - ASSERT_EQ(date->GetMonthTicks(), 0); + auto& date = gs->GetDate(); + ASSERT_EQ(date.GetMonthTicks(), 0); for (int j = 0; j < updatesToTest; j++) { gs->UpdateLogic(); } - ASSERT_EQ(date->GetMonthTicks(), 7862 + updatesToTest); + ASSERT_EQ(date.GetMonthTicks(), 7862 + updatesToTest); // Check ride count again ASSERT_EQ(gRideCount, 134);