From b67a80aabacc0ffbd611a99e363395516684fb5b Mon Sep 17 00:00:00 2001 From: frutiemax Date: Sat, 17 Dec 2022 10:42:51 -0500 Subject: [PATCH] Add RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE flag (#18848) --- src/openrct2/entity/Guest.cpp | 19 +++++++++++++------ src/openrct2/ride/RideData.h | 1 + src/openrct2/ride/gentle/meta/SpiralSlide.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/openrct2/entity/Guest.cpp b/src/openrct2/entity/Guest.cpp index 652e49dc96..4a59bfe6eb 100644 --- a/src/openrct2/entity/Guest.cpp +++ b/src/openrct2/entity/Guest.cpp @@ -3868,7 +3868,8 @@ void Guest::UpdateRideFreeVehicleEnterRide(Ride* ride) } } - if (ride->type == RIDE_TYPE_SPIRAL_SLIDE) + const auto& rtd = ride->GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE)) { SwitchToSpecialSprite(1); } @@ -4590,6 +4591,7 @@ void Guest::UpdateRideApproachSpiralSlide() return; } + [[maybe_unused]] const auto& rtd = ride->GetRideTypeDescriptor(); if (waypoint == 2) { bool lastRide = false; @@ -4610,7 +4612,7 @@ void Guest::UpdateRideApproachSpiralSlide() Var37 = (exit.direction * 4) | (Var37 & 0x30) | waypoint; CoordsXY targetLoc = ride->GetStation(CurrentRideStation).Start; - assert(ride->type == RIDE_TYPE_SPIRAL_SLIDE); + assert(rtd.HasFlag(RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE)); targetLoc += SpiralSlideWalkingPath[Var37]; SetDestination(targetLoc); @@ -4624,7 +4626,7 @@ void Guest::UpdateRideApproachSpiralSlide() CoordsXY targetLoc = ride->GetStation(CurrentRideStation).Start; - assert(ride->type == RIDE_TYPE_SPIRAL_SLIDE); + assert(rtd.HasFlag(RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE)); targetLoc += SpiralSlideWalkingPath[Var37]; SetDestination(targetLoc); @@ -4653,7 +4655,12 @@ static constexpr const CoordsXY _SpiralSlideEndWaypoint[] = { void Guest::UpdateRideOnSpiralSlide() { auto ride = get_ride(CurrentRide); - if (ride == nullptr || ride->type != RIDE_TYPE_SPIRAL_SLIDE) + + if (ride == nullptr) + return; + + const auto& rtd = ride->GetRideTypeDescriptor(); + if (!rtd.HasFlag(RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE)) return; auto destination = GetDestination(); @@ -4718,7 +4725,6 @@ void Guest::UpdateRideOnSpiralSlide() CoordsXY targetLoc = ride->GetStation(CurrentRideStation).Start; - assert(ride->type == RIDE_TYPE_SPIRAL_SLIDE); targetLoc += SpiralSlideWalkingPath[Var37]; SetDestination(targetLoc); @@ -4758,7 +4764,8 @@ void Guest::UpdateRideLeaveSpiralSlide() Var37--; CoordsXY targetLoc = ride->GetStation(CurrentRideStation).Start; - assert(ride->type == RIDE_TYPE_SPIRAL_SLIDE); + [[maybe_unused]] const auto& rtd = ride->GetRideTypeDescriptor(); + assert(rtd.HasFlag(RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE)); targetLoc += SpiralSlideWalkingPath[Var37]; SetDestination(targetLoc); diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index a6a84bdd7f..a11e00c2f2 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -339,6 +339,7 @@ enum ride_type_flags : uint64_t RIDE_TYPE_FLAG_HAS_SEAT_ROTATION = (1uLL << 56), RIDE_TYPE_FLAG_IS_FIRST_AID = (1uLL << 57), RIDE_TYPE_FLAG_IS_MAZE = (1uLL << 58), + RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE = (1uLL << 59), }; // Set on ride types that have a main colour, additional colour and support colour. diff --git a/src/openrct2/ride/gentle/meta/SpiralSlide.h b/src/openrct2/ride/gentle/meta/SpiralSlide.h index 9443e5e376..be30ea4846 100644 --- a/src/openrct2/ride/gentle/meta/SpiralSlide.h +++ b/src/openrct2/ride/gentle/meta/SpiralSlide.h @@ -27,7 +27,7 @@ constexpr const RideTypeDescriptor SpiralSlideRTD = SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | - RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY), + RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY | RIDE_TYPE_FLAG_IS_SPIRAL_SLIDE), SET_FIELD(RideModes, EnumsToFlags(RideMode::SingleRidePerAdmission, RideMode::UnlimitedRidesPerAdmission)), SET_FIELD(DefaultMode, RideMode::SingleRidePerAdmission), SET_FIELD(OperatingSettings, { 1, 5, 0, 0, 0, 0 }),