From ca807c5ed4fcfef95bc5db77eff116faae0f8e06 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 25 Feb 2019 17:51:25 +0000 Subject: [PATCH] Refactor some IsChild references to GetHead --- src/openrct2/ride/Vehicle.cpp | 25 +++++++++++++------------ src/openrct2/ride/Vehicle.h | 1 + 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 5cc4b9a56a..e34a1364bf 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -3525,10 +3525,7 @@ static void vehicle_update_collision_setup(rct_vehicle* vehicle) Ride* ride = get_ride(vehicle->ride); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - rct_vehicle* frontVehicle = vehicle; - while (frontVehicle->IsChild() != 0) - frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); - + auto frontVehicle = vehicle->GetHead(); int trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); if (trainIndex == VEHICLE_INVALID_ID) { @@ -5266,10 +5263,7 @@ static void vehicle_crash_on_land(rct_vehicle* vehicle) Ride* ride = get_ride(vehicle->ride); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - rct_vehicle* frontVehicle = vehicle; - while (frontVehicle->IsChild() != 0) - frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); - + auto frontVehicle = vehicle->GetHead(); int trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); if (trainIndex == VEHICLE_INVALID_ID) { @@ -5323,10 +5317,7 @@ static void vehicle_crash_on_water(rct_vehicle* vehicle) Ride* ride = get_ride(vehicle->ride); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - rct_vehicle* frontVehicle = vehicle; - while (frontVehicle->IsChild() != 0) - frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); - + auto frontVehicle = vehicle->GetHead(); int trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); if (trainIndex == VEHICLE_INVALID_ID) { @@ -10016,3 +10007,13 @@ void vehicle_claxon(const rct_vehicle* vehicle) break; } } + +rct_vehicle* rct_vehicle::GetHead() +{ + auto v = this; + while (v != nullptr && v->IsChild()) + { + v = GET_VEHICLE(v->prev_vehicle_on_ride); + } + return v; +} diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 2626af0668..909258dc28 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -222,6 +222,7 @@ struct rct_vehicle : rct_sprite_common uint8_t target_seat_rotation; // 0xD9 constexpr bool IsChild() const { return type != 0; } + rct_vehicle* GetHead(); }; struct train_ref