Refactor IsChild to IsHead

This commit is contained in:
Ted John 2019-02-25 17:58:22 +00:00
parent ca807c5ed4
commit bac3168a23
7 changed files with 29 additions and 28 deletions

View File

@ -4044,7 +4044,7 @@ void rct_peep::UpdateRideLeaveVehicle()
if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16))
{
for (; vehicle->IsChild(); vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride))
for (; !vehicle->IsHead(); vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride))
{
uint16_t trackType = vehicle->track_type >> 2;
if (trackType == TRACK_ELEM_FLAT || trackType > TRACK_ELEM_MIDDLE_STATION)

View File

@ -2549,7 +2549,7 @@ bool rct_peep::UpdateFixingMoveToBrokenDownVehicle(bool firstRun, Ride* ride)
while (true)
{
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
break;
}

View File

@ -1150,7 +1150,7 @@ private:
ImportVehicle(vehicle, srcVehicle);
// If vehicle is the first car on a train add to train list
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
move_sprite_to_list((rct_sprite*)vehicle, SPRITE_LIST_TRAIN * 2);
}

View File

@ -4941,7 +4941,7 @@ static rct_vehicle* vehicle_create_car(
}
if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_4)
{
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
dl = 15;
}

View File

@ -5280,7 +5280,7 @@ static void vehicle_crash_on_land(rct_vehicle* vehicle)
ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED;
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST;
if (vehicle->IsChild() == 0)
if (vehicle->IsHead())
{
vehicle_kill_all_passengers(vehicle);
}
@ -5334,7 +5334,7 @@ static void vehicle_crash_on_water(rct_vehicle* vehicle)
ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED;
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST;
if (vehicle->IsChild() == 0)
if (vehicle->IsHead())
{
vehicle_kill_all_passengers(vehicle);
}
@ -6192,12 +6192,7 @@ void vehicle_set_map_toolbar(const rct_vehicle* vehicle)
int32_t vehicleIndex;
ride = get_ride(vehicle->ride);
while (vehicle->IsChild())
{
vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride);
}
vehicle = vehicle->GetHead();
for (vehicleIndex = 0; vehicleIndex < 32; vehicleIndex++)
if (ride->vehicles[vehicleIndex] == vehicle->sprite_index)
break;
@ -7561,7 +7556,7 @@ static void vehicle_update_handle_water_splash(rct_vehicle* vehicle)
{
if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE)
{
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
if (track_element_is_covered(trackType))
{
@ -7588,7 +7583,7 @@ static void vehicle_update_handle_water_splash(rct_vehicle* vehicle)
}
}
}
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
if (trackType == TRACK_ELEM_WATER_SPLASH)
{
@ -8028,7 +8023,7 @@ loc_6DB358:
if (tileElement->AsTrack()->GetTrackType() == TRACK_ELEM_LEFT_REVERSER
|| tileElement->AsTrack()->GetTrackType() == TRACK_ELEM_RIGHT_REVERSER)
{
if (!vehicle->IsChild() && vehicle->velocity <= 0x30000)
if (vehicle->IsHead() && vehicle->velocity <= 0x30000)
{
vehicle->velocity = 0;
}
@ -8192,7 +8187,7 @@ loc_6DAEB9:
}
if (trackType == TRACK_ELEM_BRAKE_FOR_DROP)
{
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
if (!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP))
{
@ -8761,7 +8756,7 @@ loc_6DC476:
if (vehicle->mini_golf_flags & (1 << 0))
{
regs.di = vehicle->IsChild() ? vehicle->prev_vehicle_on_ride : vehicle->next_vehicle_on_ride;
regs.di = vehicle->IsHead() ? vehicle->next_vehicle_on_ride : vehicle->prev_vehicle_on_ride;
rct_vehicle* vEDI = GET_VEHICLE(regs.di);
if (!(vEDI->mini_golf_flags & (1 << 0)) || (vEDI->mini_golf_flags & (1 << 2)))
{
@ -8777,7 +8772,7 @@ loc_6DC476:
if (vehicle->mini_golf_flags & (1 << 1))
{
regs.di = vehicle->IsChild() ? vehicle->prev_vehicle_on_ride : vehicle->next_vehicle_on_ride;
regs.di = vehicle->IsHead() ? vehicle->next_vehicle_on_ride : vehicle->prev_vehicle_on_ride;
rct_vehicle* vEDI = GET_VEHICLE(regs.di);
if (!(vEDI->mini_golf_flags & (1 << 1)) || (vEDI->mini_golf_flags & (1 << 2)))
{
@ -8802,7 +8797,7 @@ loc_6DC476:
{
break;
}
if (!vEDI->IsChild())
if (vEDI->IsHead())
continue;
if (!(vEDI->mini_golf_flags & (1 << 4)))
continue;
@ -8883,7 +8878,7 @@ loc_6DC476:
vehicle->track_y = y;
vehicle->track_z = z;
if (vehicle->IsChild())
if (!vehicle->IsHead())
{
rct_vehicle* prevVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride);
regs.al = prevVehicle->var_CD;
@ -8901,7 +8896,7 @@ loc_6DC476:
loc_6DC743:
vehicle->track_progress = regs.ax;
if (vehicle->IsChild())
if (!vehicle->IsHead())
{
vehicle->animation_frame++;
if (vehicle->animation_frame >= 6)
@ -8920,7 +8915,7 @@ loc_6DC743:
switch (moveInfo->y)
{
case 0: // loc_6DC7B4
if (vehicle->IsChild())
if (!vehicle->IsHead())
{
vehicle->mini_golf_flags |= (1 << 3);
}
@ -9802,7 +9797,7 @@ int32_t vehicle_update_track_motion(rct_vehicle* vehicle, int32_t* outStation)
if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE)
{
if (!vehicle->IsChild())
if (vehicle->IsHead())
{
if (track_element_is_covered(vehicle->track_type >> 2))
{
@ -10011,9 +10006,14 @@ void vehicle_claxon(const rct_vehicle* vehicle)
rct_vehicle* rct_vehicle::GetHead()
{
auto v = this;
while (v != nullptr && v->IsChild())
while (v != nullptr && !v->IsHead())
{
v = GET_VEHICLE(v->prev_vehicle_on_ride);
}
return v;
}
const rct_vehicle* rct_vehicle::GetHead() const
{
return ((rct_vehicle*)this)->GetHead();
}

View File

@ -221,8 +221,9 @@ struct rct_vehicle : rct_sprite_common
uint8_t seat_rotation; // 0xD8
uint8_t target_seat_rotation; // 0xD9
constexpr bool IsChild() const { return type != 0; }
constexpr bool IsHead() const { return type == 0; }
rct_vehicle* GetHead();
const rct_vehicle* GetHead() const;
};
struct train_ref

View File

@ -1250,13 +1250,13 @@ void vehicle_visual_splash_boats_or_water_coaster(
paint_session* session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle* vehicle,
const rct_ride_entry_vehicle* vehicleEntry)
{
if (vehicle->IsChild())
if (vehicle->IsHead())
{
vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride);
vehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride);
}
else
{
vehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride);
vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride);
}
session->CurrentlyDrawnItem = vehicle;
imageDirection = ((session->CurrentRotation * 8) + vehicle->sprite_direction) & 0x1F;