From 7c291c330ef0a7d6a6035bb0c609cd94b8fcab1d Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 22:38:46 -0300 Subject: [PATCH 1/3] Part of #9473: Create Vehicle::CrashOnWater Converted from vehicle_crash_on_water --- src/openrct2/ride/Vehicle.cpp | 68 +++++++++++++++++------------------ src/openrct2/ride/Vehicle.h | 1 + 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index de18b4b479..2756d2e573 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -5293,68 +5293,68 @@ static void vehicle_crash_on_land(Vehicle* vehicle) vehicle->crash_z = 0; } -static void vehicle_crash_on_water(Vehicle* vehicle) +void Vehicle::CrashOnWater() { - auto ride = get_ride(vehicle->ride); - if (ride == nullptr) + auto curRide = get_ride(ride); + if (curRide == nullptr) return; - if (ride->status == RIDE_STATUS_SIMULATING) + if (curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(vehicle); + vehicle_simulate_crash(this); return; } - vehicle->SetState(VEHICLE_STATUS_CRASHED, vehicle->sub_state); + SetState(VEHICLE_STATUS_CRASHED, sub_state); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) + if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - auto frontVehicle = vehicle->GetHead(); - auto trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); + auto frontVehicle = GetHead(); + auto trainIndex = ride_get_train_index_from_vehicle(curRide, frontVehicle->sprite_index); if (!trainIndex) { return; } - ride->Crash(*trainIndex); + curRide->Crash(*trainIndex); - if (ride->status != RIDE_STATUS_CLOSED) + if (curRide->status != RIDE_STATUS_CLOSED) { // We require this to execute right away during the simulation, always ignore network and queue. - auto gameAction = RideSetStatusAction(ride->id, RIDE_STATUS_CLOSED); + auto gameAction = RideSetStatusAction(curRide->id, RIDE_STATUS_CLOSED); GameActions::ExecuteNested(&gameAction); } } - ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; + curRide->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; + curRide->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; - if (vehicle->IsHead()) + if (IsHead()) { - vehicle_kill_all_passengers(vehicle); + vehicle_kill_all_passengers(this); } - vehicle->sub_state = 2; - audio_play_sound_at_location(SoundId::Water1, { vehicle->x, vehicle->y, vehicle->z }); + sub_state = 2; + audio_play_sound_at_location(SoundId::Water1, { x, y, z }); - crash_splash_create(vehicle->x, vehicle->y, vehicle->z); - crash_splash_create(vehicle->x - 8, vehicle->y - 9, vehicle->z); - crash_splash_create(vehicle->x + 11, vehicle->y - 9, vehicle->z); - crash_splash_create(vehicle->x + 11, vehicle->y + 8, vehicle->z); - crash_splash_create(vehicle->x - 4, vehicle->y + 8, vehicle->z); + crash_splash_create(x, y, z); + crash_splash_create(x - 8, y - 9, z); + crash_splash_create(x + 11, y - 9, z); + crash_splash_create(x + 11, y + 8, z); + crash_splash_create(x - 4, y + 8, z); for (int32_t i = 0; i < 10; ++i) - crashed_vehicle_particle_create(vehicle->colours, vehicle->x - 4, vehicle->y + 8, vehicle->z); + crashed_vehicle_particle_create(colours, x - 4, y + 8, z); - vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; - vehicle->animation_frame = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; - vehicle->sprite_height_negative = 45; - vehicle->sprite_height_positive = 5; + flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; + animation_frame = 0; + var_C8 = 0; + sprite_width = 13; + sprite_height_negative = 45; + sprite_height_positive = 5; - sprite_move(vehicle->x, vehicle->y, vehicle->z, vehicle); - vehicle->Invalidate(); + sprite_move(x, y, z, this); + Invalidate(); - vehicle->crash_z = -1; + crash_z = -1; } /** @@ -5410,7 +5410,7 @@ void Vehicle::UpdateCrash() zDiff = curVehicle->z - waterHeight; if (zDiff <= 0 && zDiff >= -20) { - vehicle_crash_on_water(curVehicle); + curVehicle->CrashOnWater(); continue; } } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index e88d7c9f98..f828c641cb 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -384,6 +384,7 @@ private: void UpdateVelocity(); bool OpenRestraints(); bool CloseRestraints(); + void CrashOnWater(); }; struct train_ref From 0fdc6531dc323249aaf01e686a57f115d3b443fd Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 22:53:04 -0300 Subject: [PATCH 2/3] Part of #9473: Create Vehicle::CrashOnLand Converted from vehicle_crash_on_land --- src/openrct2/ride/Vehicle.cpp | 68 +++++++++++++++++------------------ src/openrct2/ride/Vehicle.h | 1 + 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 2756d2e573..0935bfb622 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -5230,67 +5230,67 @@ static void vehicle_kill_all_passengers(Vehicle* vehicle) } } -static void vehicle_crash_on_land(Vehicle* vehicle) +void Vehicle::CrashOnLand() { - auto ride = get_ride(vehicle->ride); - if (ride == nullptr) + auto curRide = get_ride(ride); + if (curRide == nullptr) return; - if (ride->status == RIDE_STATUS_SIMULATING) + if (curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(vehicle); + vehicle_simulate_crash(this); return; } - vehicle->SetState(VEHICLE_STATUS_CRASHED, vehicle->sub_state); + SetState(VEHICLE_STATUS_CRASHED, sub_state); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) + if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - auto frontVehicle = vehicle->GetHead(); - auto trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); + auto frontVehicle = GetHead(); + auto trainIndex = ride_get_train_index_from_vehicle(curRide, frontVehicle->sprite_index); if (!trainIndex) { return; } - ride->Crash(*trainIndex); + curRide->Crash(*trainIndex); - if (ride->status != RIDE_STATUS_CLOSED) + if (curRide->status != RIDE_STATUS_CLOSED) { // We require this to execute right away during the simulation, always ignore network and queue. - auto gameAction = RideSetStatusAction(ride->id, RIDE_STATUS_CLOSED); + auto gameAction = RideSetStatusAction(curRide->id, RIDE_STATUS_CLOSED); GameActions::ExecuteNested(&gameAction); } } - ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; + curRide->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; + curRide->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; - if (vehicle->IsHead()) + if (IsHead()) { - vehicle_kill_all_passengers(vehicle); + vehicle_kill_all_passengers(this); } - vehicle->sub_state = 2; - audio_play_sound_at_location(SoundId::Crash, { vehicle->x, vehicle->y, vehicle->z }); + sub_state = 2; + audio_play_sound_at_location(SoundId::Crash, { x, y, z }); - sprite_misc_explosion_cloud_create(vehicle->x, vehicle->y, vehicle->z); - sprite_misc_explosion_flare_create(vehicle->x, vehicle->y, vehicle->z); + sprite_misc_explosion_cloud_create(x, y, z); + sprite_misc_explosion_flare_create(x, y, z); - uint8_t numParticles = std::min(vehicle->sprite_width, static_cast(7)); + uint8_t numParticles = std::min(sprite_width, static_cast(7)); while (numParticles-- != 0) - crashed_vehicle_particle_create(vehicle->colours, vehicle->x, vehicle->y, vehicle->z); + crashed_vehicle_particle_create(colours, x, y, z); - vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; - vehicle->animation_frame = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; - vehicle->sprite_height_negative = 45; - vehicle->sprite_height_positive = 5; + flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; + animation_frame = 0; + var_C8 = 0; + sprite_width = 13; + sprite_height_negative = 45; + sprite_height_positive = 5; - sprite_move(vehicle->x, vehicle->y, vehicle->z, vehicle); - vehicle->Invalidate(); + sprite_move(x, y, z, this); + Invalidate(); - vehicle->crash_z = 0; + crash_z = 0; } void Vehicle::CrashOnWater() @@ -5398,7 +5398,7 @@ void Vehicle::UpdateCrash() } else if (curVehicle->sub_state == 1) { - vehicle_crash_on_land(curVehicle); + curVehicle->CrashOnLand(); continue; } @@ -5418,7 +5418,7 @@ void Vehicle::UpdateCrash() zDiff = curVehicle->z - height; if ((zDiff <= 0 && zDiff >= -20) || curVehicle->z < 16) { - vehicle_crash_on_land(curVehicle); + curVehicle->CrashOnLand(); continue; } @@ -5433,7 +5433,7 @@ void Vehicle::UpdateCrash() if (!map_is_location_valid(curPosition)) { - vehicle_crash_on_land(curVehicle); + curVehicle->CrashOnLand(); continue; } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index f828c641cb..d66324588c 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -385,6 +385,7 @@ private: bool OpenRestraints(); bool CloseRestraints(); void CrashOnWater(); + void CrashOnLand(); }; struct train_ref From 3b099f52d08109c91018fbd25fc2751aaa8b22d6 Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 22:58:15 -0300 Subject: [PATCH 3/3] Part of #9473: Create Vehicle::SimulateCrash Converted from vehicle_simulate_crash --- src/openrct2/ride/Vehicle.cpp | 16 ++++++++-------- src/openrct2/ride/Vehicle.h | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 0935bfb622..265d6ac42c 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -3484,12 +3484,12 @@ void Vehicle::CheckIfMissing() } } -static void vehicle_simulate_crash(Vehicle* vehicle) +void Vehicle::SimulateCrash() const { - auto ride = get_ride(vehicle->ride); - if (ride != nullptr) + auto curRide = get_ride(ride); + if (curRide != nullptr) { - ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; + curRide->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; } } @@ -3507,7 +3507,7 @@ void Vehicle::UpdateCollisionSetup() if (curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(this); + SimulateCrash(); return; } @@ -3589,7 +3589,7 @@ void Vehicle::UpdateCrashSetup() auto curRide = get_ride(ride); if (curRide != nullptr && curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(this); + SimulateCrash(); return; } SetState(VEHICLE_STATUS_CRASHING, sub_state); @@ -5238,7 +5238,7 @@ void Vehicle::CrashOnLand() if (curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(this); + SimulateCrash(); return; } SetState(VEHICLE_STATUS_CRASHED, sub_state); @@ -5301,7 +5301,7 @@ void Vehicle::CrashOnWater() if (curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(this); + SimulateCrash(); return; } SetState(VEHICLE_STATUS_CRASHED, sub_state); diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index d66324588c..9ec071a63c 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -386,6 +386,7 @@ private: bool CloseRestraints(); void CrashOnWater(); void CrashOnLand(); + void SimulateCrash() const; }; struct train_ref