Remove gotos from TrackMotionForwardsGetNewTrack (#11955)

* Remove gotos from TrackMotionForwardsGetNewTrack

* Move default case to the bottom of the switch

Co-authored-by: Michael Steenbeek <m.o.steenbeek@gmail.com>
This commit is contained in:
Hudson Oliveira 2020-06-14 20:25:13 -03:00 committed by GitHub
parent 1e5739b739
commit feb3fcfd6e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 50 additions and 49 deletions

View File

@ -7996,79 +7996,80 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur
// Change from original: this used to check if the vehicle allowed doors. // Change from original: this used to check if the vehicle allowed doors.
vehicle_update_scenery_door(this); vehicle_update_scenery_door(this);
bool isGoingBack = false;
switch (TrackSubposition) switch (TrackSubposition)
{ {
default:
goto loc_6DB358;
case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK: case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK:
case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL: case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL:
TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK; TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK;
goto loc_6DB32A; isGoingBack = true;
break;
case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL: case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL:
TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT; TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT;
goto loc_6DB358; break;
case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE: case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE:
TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE; TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE;
goto loc_6DB358; break;
case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE: case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE:
TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE; TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE;
goto loc_6DB358; break;
default:
break;
} }
loc_6DB32A: if (isGoingBack)
{
track_begin_end trackBeginEnd;
if (!track_block_get_previous({ TrackLocation, tileElement }, &trackBeginEnd))
{ {
return false; track_begin_end trackBeginEnd;
} if (!track_block_get_previous({ TrackLocation, tileElement }, &trackBeginEnd))
location.x = trackBeginEnd.begin_x;
location.y = trackBeginEnd.begin_y;
location.z = trackBeginEnd.begin_z;
location.direction = trackBeginEnd.begin_direction;
tileElement = trackBeginEnd.begin_element;
}
goto loc_6DB41D;
loc_6DB358:
{
int32_t curZ, direction;
CoordsXYE xyElement = { TrackLocation, tileElement };
if (!track_block_get_next(&xyElement, &xyElement, &curZ, &direction))
{
return false;
}
tileElement = xyElement.element;
location = { xyElement, curZ, static_cast<Direction>(direction) };
}
if (tileElement->AsTrack()->GetTrackType() == TRACK_ELEM_LEFT_REVERSER
|| tileElement->AsTrack()->GetTrackType() == TRACK_ELEM_RIGHT_REVERSER)
{
if (IsHead() && velocity <= 0x30000)
{ {
velocity = 0; return false;
} }
location.x = trackBeginEnd.begin_x;
location.y = trackBeginEnd.begin_y;
location.z = trackBeginEnd.begin_z;
location.direction = trackBeginEnd.begin_direction;
tileElement = trackBeginEnd.begin_element;
} }
else
if (!loc_6DB38B(this, tileElement))
{ {
return false;
}
// Update VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES flag
ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES);
{
int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type;
if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)
{ {
if (tileElement->AsTrack()->IsInverted()) int32_t curZ, direction;
CoordsXYE xyElement = { TrackLocation, tileElement };
if (!track_block_get_next(&xyElement, &xyElement, &curZ, &direction))
{ {
SetUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); return false;
}
tileElement = xyElement.element;
location = { xyElement, curZ, static_cast<Direction>(direction) };
}
if (tileElement->AsTrack()->GetTrackType() == TRACK_ELEM_LEFT_REVERSER
|| tileElement->AsTrack()->GetTrackType() == TRACK_ELEM_RIGHT_REVERSER)
{
if (IsHead() && velocity <= 0x30000)
{
velocity = 0;
}
}
if (!loc_6DB38B(this, tileElement))
{
return false;
}
// Update VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES flag
ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES);
{
int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type;
if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)
{
if (tileElement->AsTrack()->IsInverted())
{
SetUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES);
}
} }
} }
} }
loc_6DB41D:
TrackLocation = location; TrackLocation = location;
// TODO check if getting the vehicle entry again is necessary // TODO check if getting the vehicle entry again is necessary