From 28c861ee7e1dfc5004bfb6d2dd11d2ea0451cc52 Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 01:41:55 -0300 Subject: [PATCH 1/4] Part of #9473: Create Vehicle::TestReset Converted from vehicle_test_reset --- src/openrct2/ride/Vehicle.cpp | 20 ++++++++++++-------- src/openrct2/ride/Vehicle.h | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index c589d4b728..5476339225 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -3036,11 +3036,9 @@ void vehicle_update_test_finish(Vehicle* vehicle) * * rct2: 0x006D6BE7 */ -void vehicle_test_reset(Vehicle* vehicle) +static void test_reset(ride_id_t rideId, StationIndex curStation) { - vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TESTING; - - auto ride = get_ride(vehicle->ride); + auto ride = get_ride(rideId); if (ride == nullptr) return; @@ -3075,8 +3073,14 @@ void vehicle_test_reset(Vehicle* vehicle) station.SegmentTime = 0; } ride->total_air_time = 0; - ride->current_test_station = vehicle->current_station; - window_invalidate_by_number(WC_RIDE, vehicle->ride); + ride->current_test_station = curStation; + window_invalidate_by_number(WC_RIDE, rideId); +} + +void Vehicle::TestReset() +{ + update_flags |= VEHICLE_UPDATE_FLAG_TESTING; + test_reset(ride, current_station); } bool Vehicle::CurrentTowerElementIsTop() @@ -3203,7 +3207,7 @@ void Vehicle::UpdateDeparting() } else if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS) && !IsGhost()) { - vehicle_test_reset(this); + TestReset(); } } } @@ -4174,7 +4178,7 @@ void Vehicle::UpdateTravellingCableLift() } else if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS) && !IsGhost()) { - vehicle_test_reset(this); + TestReset(); } } } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index f126d87d43..7b48703a0e 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -360,6 +360,7 @@ private: bool CurrentTowerElementIsTop(); bool UpdateTrackMotionForwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); bool UpdateTrackMotionBackwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); + void TestReset(); void PeepEasterEggHereWeAre() const; }; @@ -562,7 +563,6 @@ int32_t vehicle_is_used_in_pairs(const Vehicle* vehicle); int32_t vehicle_get_total_num_peeps(const Vehicle* vehicle); void vehicle_invalidate_window(Vehicle* vehicle); void vehicle_update_test_finish(Vehicle* vehicle); -void vehicle_test_reset(Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection); From 49be02dbfdd22680ba69fa972092cc388ed27925 Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 01:55:17 -0300 Subject: [PATCH 2/4] Part of #9473: Create Vehicle::UpdateTestFinish Converted from vehicle_update_test_finish --- src/openrct2/ride/Vehicle.cpp | 25 ++++++++++++++++--------- src/openrct2/ride/Vehicle.h | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 5476339225..f9945c6034 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -2996,14 +2996,13 @@ void Vehicle::PeepEasterEggHereWeAre() const * Performed when vehicle has completed a full circuit * rct2: 0x006D7338 */ -void vehicle_update_test_finish(Vehicle* vehicle) +static bool test_finish(ride_id_t rideId) { - auto ride = get_ride(vehicle->ride); + auto ride = get_ride(rideId); if (ride == nullptr) - return; + return false; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TEST_IN_PROGRESS; - vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_TESTING; ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; for (int32_t i = ride->num_stations - 1; i >= 1; i--) @@ -3028,8 +3027,16 @@ void vehicle_update_test_finish(Vehicle* vehicle) totalTime = std::max(totalTime, 1u); ride->average_speed = ride->average_speed / totalTime; + window_invalidate_by_number(WC_RIDE, rideId); + return true; +} - window_invalidate_by_number(WC_RIDE, vehicle->ride); +void Vehicle::UpdateTestFinish() +{ + if (!test_finish(ride)) + return; + + update_flags &= ~VEHICLE_UPDATE_FLAG_TESTING; } /** @@ -3202,7 +3209,7 @@ void Vehicle::UpdateDeparting() } else { - vehicle_update_test_finish(this); + UpdateTestFinish(); } } else if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS) && !IsGhost()) @@ -4067,7 +4074,7 @@ void Vehicle::UpdateUnloadingPassengers() if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_TESTED) && update_flags & VEHICLE_UPDATE_FLAG_TESTING && curRide->current_test_segment + 1 >= curRide->num_stations) { - vehicle_update_test_finish(this); + UpdateTestFinish(); } SetState(VEHICLE_STATUS_MOVING_TO_END_OF_STATION); return; @@ -4107,7 +4114,7 @@ void Vehicle::UpdateUnloadingPassengers() if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_TESTED) && update_flags & VEHICLE_UPDATE_FLAG_TESTING && curRide->current_test_segment + 1 >= curRide->num_stations) { - vehicle_update_test_finish(this); + UpdateTestFinish(); } SetState(VEHICLE_STATUS_MOVING_TO_END_OF_STATION); } @@ -4173,7 +4180,7 @@ void Vehicle::UpdateTravellingCableLift() } else { - vehicle_update_test_finish(this); + UpdateTestFinish(); } } else if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS) && !IsGhost()) diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 7b48703a0e..9243a771a0 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -361,6 +361,7 @@ private: bool UpdateTrackMotionForwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); bool UpdateTrackMotionBackwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); void TestReset(); + void UpdateTestFinish(); void PeepEasterEggHereWeAre() const; }; @@ -562,7 +563,6 @@ void vehicle_set_map_toolbar(const Vehicle* vehicle); int32_t vehicle_is_used_in_pairs(const Vehicle* vehicle); int32_t vehicle_get_total_num_peeps(const Vehicle* vehicle); void vehicle_invalidate_window(Vehicle* vehicle); -void vehicle_update_test_finish(Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection); From 421fc5bc5984241a8828806f021fa0453757367f Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 02:01:07 -0300 Subject: [PATCH 3/4] Part of #9473: Create Vehicle::InvalidateWindow Converted from vehicle_invalidate_window --- src/openrct2/ride/Vehicle.cpp | 6 +++--- src/openrct2/ride/Vehicle.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index f9945c6034..1bea889d30 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -9806,10 +9806,10 @@ int32_t vehicle_get_total_num_peeps(const Vehicle* vehicle) * * rct2: 0x006DA1EC */ -void vehicle_invalidate_window(Vehicle* vehicle) +void Vehicle::InvalidateWindow() { auto intent = Intent(INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW); - intent.putExtra(INTENT_EXTRA_VEHICLE, vehicle); + intent.putExtra(INTENT_EXTRA_VEHICLE, this); context_broadcast_intent(&intent); } @@ -9985,7 +9985,7 @@ void Vehicle::SetState(VEHICLE_STATUS vehicleStatus, uint8_t subState) { status = vehicleStatus; sub_state = subState; - vehicle_invalidate_window(this); + InvalidateWindow(); } bool Vehicle::IsGhost() const diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 9243a771a0..780ab6fd05 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -360,6 +360,7 @@ private: bool CurrentTowerElementIsTop(); bool UpdateTrackMotionForwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); bool UpdateTrackMotionBackwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); + void InvalidateWindow(); void TestReset(); void UpdateTestFinish(); void PeepEasterEggHereWeAre() const; @@ -562,7 +563,6 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle); void vehicle_set_map_toolbar(const Vehicle* vehicle); int32_t vehicle_is_used_in_pairs(const Vehicle* vehicle); int32_t vehicle_get_total_num_peeps(const Vehicle* vehicle); -void vehicle_invalidate_window(Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection); From 4d7ad5f92b70e2790f1c46d19b6ba84b1584c1bf Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 02:06:31 -0300 Subject: [PATCH 4/4] Part of #9473: Create Vehicle::NumPeepsUntilTrainTail Converted from vehicle_get_total_num_peeps --- src/openrct2/ride/Vehicle.cpp | 7 ++++--- src/openrct2/ride/Vehicle.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 1bea889d30..3a761863fb 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -3593,7 +3593,7 @@ void Vehicle::UpdateCrashSetup() } SetState(VEHICLE_STATUS_CRASHING, sub_state); - if (vehicle_get_total_num_peeps(this) != 0) + if (NumPeepsUntilTrainTail() != 0) { audio_play_sound_at_location(SoundId::HauntedHouseScream2, { x, y, z }); } @@ -5572,7 +5572,7 @@ SoundId Vehicle::UpdateScreamSound() rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle_type]; - int32_t totalNumPeeps = vehicle_get_total_num_peeps(this); + int32_t totalNumPeeps = NumPeepsUntilTrainTail(); if (totalNumPeeps == 0) return SoundId::Null; @@ -9785,8 +9785,9 @@ rct_ride_entry_vehicle* Vehicle::Entry() const return &rideEntry->vehicles[vehicle_type]; } -int32_t vehicle_get_total_num_peeps(const Vehicle* vehicle) +int32_t Vehicle::NumPeepsUntilTrainTail() const { + const Vehicle* vehicle = this; uint16_t spriteIndex; int32_t numPeeps = 0; for (;;) diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 780ab6fd05..bad690b4ff 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -360,6 +360,7 @@ private: bool CurrentTowerElementIsTop(); bool UpdateTrackMotionForwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); bool UpdateTrackMotionBackwards(rct_ride_entry_vehicle* vehicleEntry, Ride* curRide, rct_ride_entry* rideEntry); + int32_t NumPeepsUntilTrainTail() const; void InvalidateWindow(); void TestReset(); void UpdateTestFinish(); @@ -562,7 +563,6 @@ void vehicle_sounds_update(); GForces vehicle_get_g_forces(const Vehicle* vehicle); void vehicle_set_map_toolbar(const Vehicle* vehicle); int32_t vehicle_is_used_in_pairs(const Vehicle* vehicle); -int32_t vehicle_get_total_num_peeps(const Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection);