Refactor some IsChild references to GetHead

This commit is contained in:
Ted John 2019-02-25 17:51:25 +00:00
parent 520b1b4819
commit ca807c5ed4
2 changed files with 14 additions and 12 deletions

View File

@ -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;
}

View File

@ -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