Part of #9473: vehicle_update_waiting_to_depart to Vehicle::UpdateWaitingToDepart

This commit is contained in:
hdpoliveira 2020-04-10 03:04:45 -03:00
parent 3b5f9a372f
commit d39b4e9400
2 changed files with 85 additions and 85 deletions

View File

@ -50,7 +50,6 @@ static void vehicle_claxon(const Vehicle* vehicle);
static void vehicle_update_showing_film(Vehicle* vehicle); static void vehicle_update_showing_film(Vehicle* vehicle);
static void vehicle_update_doing_circus_show(Vehicle* vehicle); static void vehicle_update_doing_circus_show(Vehicle* vehicle);
static void vehicle_update_waiting_to_depart(Vehicle* vehicle);
static void vehicle_update_departing(Vehicle* vehicle); static void vehicle_update_departing(Vehicle* vehicle);
static void vehicle_finish_departing(Vehicle* vehicle); static void vehicle_finish_departing(Vehicle* vehicle);
static void vehicle_update_travelling(Vehicle* vehicle); static void vehicle_update_travelling(Vehicle* vehicle);
@ -2002,7 +2001,7 @@ void Vehicle::Update()
UpdateWaitingForPassengers(); UpdateWaitingForPassengers();
break; break;
case VEHICLE_STATUS_WAITING_TO_DEPART: case VEHICLE_STATUS_WAITING_TO_DEPART:
vehicle_update_waiting_to_depart(this); UpdateWaitingToDepart();
break; break;
case VEHICLE_STATUS_CRASHING: case VEHICLE_STATUS_CRASHING:
case VEHICLE_STATUS_CRASHED: case VEHICLE_STATUS_CRASHED:
@ -2475,16 +2474,16 @@ static void vehicle_update_dodgems_mode(Vehicle* vehicle)
* *
* rct2: 0x006D80BE * rct2: 0x006D80BE
*/ */
static void vehicle_update_waiting_to_depart(Vehicle* vehicle) void Vehicle::UpdateWaitingToDepart()
{ {
auto ride = get_ride(vehicle->ride); auto curRide = get_ride(ride);
if (ride == nullptr) if (curRide == nullptr)
return; return;
bool shouldBreak = false; bool shouldBreak = false;
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) if (curRide->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)
{ {
switch (ride->breakdown_reason_pending) switch (curRide->breakdown_reason_pending)
{ {
case BREAKDOWN_RESTRAINTS_STUCK_CLOSED: case BREAKDOWN_RESTRAINTS_STUCK_CLOSED:
case BREAKDOWN_RESTRAINTS_STUCK_OPEN: case BREAKDOWN_RESTRAINTS_STUCK_OPEN:
@ -2498,39 +2497,39 @@ static void vehicle_update_waiting_to_depart(Vehicle* vehicle)
} }
bool skipCheck = false; bool skipCheck = false;
if (shouldBreak || ride->status != RIDE_STATUS_OPEN) if (shouldBreak || curRide->status != RIDE_STATUS_OPEN)
{ {
if (ride->mode == RIDE_MODE_FORWARD_ROTATION || ride->mode == RIDE_MODE_BACKWARD_ROTATION) if (curRide->mode == RIDE_MODE_FORWARD_ROTATION || curRide->mode == RIDE_MODE_BACKWARD_ROTATION)
{ {
uint8_t seat = ((-vehicle->vehicle_sprite_type) >> 3) & 0xF; uint8_t seat = ((-vehicle_sprite_type) >> 3) & 0xF;
if (vehicle->peep[seat * 2] == SPRITE_INDEX_NULL) if (peep[seat * 2] == SPRITE_INDEX_NULL)
{ {
if (vehicle->num_peeps == 0) if (num_peeps == 0)
{ {
skipCheck = true; skipCheck = true;
} }
} }
else else
{ {
if (!ride_get_exit_location(ride, vehicle->current_station).isNull()) if (!ride_get_exit_location(curRide, current_station).isNull())
{ {
vehicle->SetState(VEHICLE_STATUS_UNLOADING_PASSENGERS); SetState(VEHICLE_STATUS_UNLOADING_PASSENGERS);
return; return;
} }
} }
} }
else else
{ {
uint16_t spriteId = vehicle->sprite_index; uint16_t spriteId = sprite_index;
for (Vehicle* curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) for (Vehicle* curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train)
{ {
curVehicle = GET_VEHICLE(spriteId); curVehicle = GET_VEHICLE(spriteId);
if (curVehicle->num_peeps != 0) if (curVehicle->num_peeps != 0)
{ {
if (!ride_get_exit_location(ride, vehicle->current_station).isNull()) if (!ride_get_exit_location(curRide, current_station).isNull())
{ {
vehicle->SetState(VEHICLE_STATUS_UNLOADING_PASSENGERS); SetState(VEHICLE_STATUS_UNLOADING_PASSENGERS);
return; return;
} }
break; break;
@ -2541,17 +2540,17 @@ static void vehicle_update_waiting_to_depart(Vehicle* vehicle)
if (!skipCheck) if (!skipCheck)
{ {
if (!(ride->stations[vehicle->current_station].Depart & STATION_DEPART_FLAG)) if (!(curRide->stations[current_station].Depart & STATION_DEPART_FLAG))
return; return;
} }
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) if (ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS))
{ {
if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) if (curRide->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS)
{ {
if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT) if (update_flags & VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT)
{ {
if (!vehicle_can_depart_synchronised(vehicle)) if (!vehicle_can_depart_synchronised(this))
{ {
return; return;
} }
@ -2559,132 +2558,132 @@ static void vehicle_update_waiting_to_depart(Vehicle* vehicle)
} }
} }
vehicle->SetState(VEHICLE_STATUS_DEPARTING); SetState(VEHICLE_STATUS_DEPARTING);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) if (curRide->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)
{ {
CoordsXYE track; CoordsXYE track;
int32_t z; int32_t zUnused;
int32_t direction; int32_t direction;
uint8_t trackDirection = (vehicle->track_direction & 0x3); uint8_t trackDirection = (track_direction & 0x3);
if (track_block_get_next_from_zero( if (track_block_get_next_from_zero(
vehicle->TrackLocation.x, vehicle->TrackLocation.y, vehicle->TrackLocation.z, ride, trackDirection, &track, &z, TrackLocation.x, TrackLocation.y, TrackLocation.z, curRide, trackDirection, &track, &zUnused, &direction,
&direction, false)) false))
{ {
if (track.element->AsTrack()->HasCableLift()) if (track.element->AsTrack()->HasCableLift())
{ {
vehicle->SetState(VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT, vehicle->sub_state); SetState(VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT, sub_state);
} }
} }
} }
switch (ride->mode) switch (curRide->mode)
{ {
case RIDE_MODE_BUMPERCAR: case RIDE_MODE_BUMPERCAR:
// Bumper mode uses sub_state / var_CE to tell how long // Bumper mode uses sub_state / var_CE to tell how long
// the vehicle has been ridden. // the vehicle has been ridden.
vehicle->SetState(VEHICLE_STATUS_TRAVELLING_DODGEMS); SetState(VEHICLE_STATUS_TRAVELLING_DODGEMS);
vehicle->var_CE = 0; var_CE = 0;
vehicle_update_dodgems_mode(vehicle); vehicle_update_dodgems_mode(this);
break; break;
case RIDE_MODE_SWING: case RIDE_MODE_SWING:
vehicle->SetState(VEHICLE_STATUS_SWINGING); SetState(VEHICLE_STATUS_SWINGING);
vehicle->var_CE = 0; var_CE = 0;
vehicle->current_time = -1; current_time = -1;
vehicle_update_swinging(vehicle); vehicle_update_swinging(this);
break; break;
case RIDE_MODE_ROTATION: case RIDE_MODE_ROTATION:
vehicle->SetState(VEHICLE_STATUS_ROTATING); SetState(VEHICLE_STATUS_ROTATING);
vehicle->var_CE = 0; var_CE = 0;
vehicle->current_time = -1; current_time = -1;
vehicle_update_rotating(vehicle); vehicle_update_rotating(this);
break; break;
case RIDE_MODE_FILM_AVENGING_AVIATORS: case RIDE_MODE_FILM_AVENGING_AVIATORS:
vehicle->SetState(VEHICLE_STATUS_SIMULATOR_OPERATING); SetState(VEHICLE_STATUS_SIMULATOR_OPERATING);
vehicle->current_time = -1; current_time = -1;
vehicle_update_simulator_operating(vehicle); vehicle_update_simulator_operating(this);
break; break;
case RIDE_MODE_FILM_THRILL_RIDERS: case RIDE_MODE_FILM_THRILL_RIDERS:
vehicle->SetState(VEHICLE_STATUS_SIMULATOR_OPERATING, 1); SetState(VEHICLE_STATUS_SIMULATOR_OPERATING, 1);
vehicle->current_time = -1; current_time = -1;
vehicle_update_simulator_operating(vehicle); vehicle_update_simulator_operating(this);
break; break;
case RIDE_MODE_BEGINNERS: case RIDE_MODE_BEGINNERS:
case RIDE_MODE_INTENSE: case RIDE_MODE_INTENSE:
case RIDE_MODE_BERSERK: case RIDE_MODE_BERSERK:
vehicle->SetState(VEHICLE_STATUS_TOP_SPIN_OPERATING, vehicle->sub_state); SetState(VEHICLE_STATUS_TOP_SPIN_OPERATING, sub_state);
switch (ride->mode) switch (curRide->mode)
{ {
case RIDE_MODE_BEGINNERS: case RIDE_MODE_BEGINNERS:
vehicle->sub_state = 0; sub_state = 0;
break; break;
case RIDE_MODE_INTENSE: case RIDE_MODE_INTENSE:
vehicle->sub_state = 1; sub_state = 1;
break; break;
case RIDE_MODE_BERSERK: case RIDE_MODE_BERSERK:
vehicle->sub_state = 2; sub_state = 2;
break; break;
} }
vehicle->current_time = -1; current_time = -1;
vehicle->vehicle_sprite_type = 0; vehicle_sprite_type = 0;
vehicle->bank_rotation = 0; bank_rotation = 0;
vehicle_update_top_spin_operating(vehicle); vehicle_update_top_spin_operating(this);
break; break;
case RIDE_MODE_FORWARD_ROTATION: case RIDE_MODE_FORWARD_ROTATION:
case RIDE_MODE_BACKWARD_ROTATION: case RIDE_MODE_BACKWARD_ROTATION:
vehicle->SetState(VEHICLE_STATUS_FERRIS_WHEEL_ROTATING, vehicle->vehicle_sprite_type); SetState(VEHICLE_STATUS_FERRIS_WHEEL_ROTATING, vehicle_sprite_type);
vehicle->var_CE = 0; var_CE = 0;
vehicle->ferris_wheel_var_0 = 8; ferris_wheel_var_0 = 8;
vehicle->ferris_wheel_var_1 = 8; ferris_wheel_var_1 = 8;
vehicle_update_ferris_wheel_rotating(vehicle); vehicle_update_ferris_wheel_rotating(this);
break; break;
case RIDE_MODE_3D_FILM_MOUSE_TAILS: case RIDE_MODE_3D_FILM_MOUSE_TAILS:
case RIDE_MODE_3D_FILM_STORM_CHASERS: case RIDE_MODE_3D_FILM_STORM_CHASERS:
case RIDE_MODE_3D_FILM_SPACE_RAIDERS: case RIDE_MODE_3D_FILM_SPACE_RAIDERS:
vehicle->SetState(VEHICLE_STATUS_SHOWING_FILM, vehicle->sub_state); SetState(VEHICLE_STATUS_SHOWING_FILM, sub_state);
switch (ride->mode) switch (curRide->mode)
{ {
case RIDE_MODE_3D_FILM_MOUSE_TAILS: case RIDE_MODE_3D_FILM_MOUSE_TAILS:
vehicle->sub_state = 0; sub_state = 0;
break; break;
case RIDE_MODE_3D_FILM_STORM_CHASERS: case RIDE_MODE_3D_FILM_STORM_CHASERS:
vehicle->sub_state = 1; sub_state = 1;
break; break;
case RIDE_MODE_3D_FILM_SPACE_RAIDERS: case RIDE_MODE_3D_FILM_SPACE_RAIDERS:
vehicle->sub_state = 2; sub_state = 2;
break; break;
} }
vehicle->current_time = -1; current_time = -1;
vehicle_update_showing_film(vehicle); vehicle_update_showing_film(this);
break; break;
case RIDE_MODE_CIRCUS_SHOW: case RIDE_MODE_CIRCUS_SHOW:
vehicle->SetState(VEHICLE_STATUS_DOING_CIRCUS_SHOW); SetState(VEHICLE_STATUS_DOING_CIRCUS_SHOW);
vehicle->current_time = -1; current_time = -1;
vehicle_update_doing_circus_show(vehicle); vehicle_update_doing_circus_show(this);
break; break;
case RIDE_MODE_SPACE_RINGS: case RIDE_MODE_SPACE_RINGS:
vehicle->SetState(VEHICLE_STATUS_SPACE_RINGS_OPERATING); SetState(VEHICLE_STATUS_SPACE_RINGS_OPERATING);
vehicle->vehicle_sprite_type = 0; vehicle_sprite_type = 0;
vehicle->current_time = -1; current_time = -1;
vehicle_update_space_rings_operating(vehicle); vehicle_update_space_rings_operating(this);
break; break;
case RIDE_MODE_HAUNTED_HOUSE: case RIDE_MODE_HAUNTED_HOUSE:
vehicle->SetState(VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING); SetState(VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING);
vehicle->vehicle_sprite_type = 0; vehicle_sprite_type = 0;
vehicle->current_time = -1; current_time = -1;
vehicle_update_haunted_house_operating(vehicle); vehicle_update_haunted_house_operating(this);
break; break;
case RIDE_MODE_CROOKED_HOUSE: case RIDE_MODE_CROOKED_HOUSE:
vehicle->SetState(VEHICLE_STATUS_CROOKED_HOUSE_OPERATING); SetState(VEHICLE_STATUS_CROOKED_HOUSE_OPERATING);
vehicle->vehicle_sprite_type = 0; vehicle_sprite_type = 0;
vehicle->current_time = -1; current_time = -1;
vehicle_update_crooked_house_operating(vehicle); vehicle_update_crooked_house_operating(this);
break; break;
default: default:
vehicle->SetState(vehicle->status); SetState(status);
vehicle->var_CE = 0; var_CE = 0;
break; break;
} }
} }

View File

@ -310,6 +310,7 @@ private:
void CableLiftUpdate(); void CableLiftUpdate();
void UpdateMovingToEndOfStation(); void UpdateMovingToEndOfStation();
void UpdateWaitingForPassengers(); void UpdateWaitingForPassengers();
void UpdateWaitingToDepart();
}; };
struct train_ref struct train_ref