diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index deea1a66ba..49bdfa2041 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -6321,7 +6321,8 @@ static void WindowRideIncomeTogglePrimaryPrice(rct_window* w) return; ShopItem shop_item; - if (ride->type == RIDE_TYPE_TOILETS) + const auto& rtd = ride->GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { shop_item = ShopItem::Admission; } @@ -6440,7 +6441,8 @@ static bool WindowRideIncomeCanModifyPrimaryPrice(rct_window* w) return false; auto rideEntry = ride->GetRideEntry(); - return park_ride_prices_unlocked() || ride->type == RIDE_TYPE_TOILETS + const auto& rtd = ride->GetRideTypeDescriptor(); + return park_ride_prices_unlocked() || rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET) || (rideEntry != nullptr && rideEntry->shop_item[0] != ShopItem::None); } @@ -6639,7 +6641,8 @@ static void WindowRideIncomeInvalidate(rct_window* w) window_ride_income_widgets[WIDX_PRIMARY_PRICE].tooltip = STR_NONE; // If ride prices are locked, do not allow setting the price, unless we're dealing with a shop or toilet. - if (!park_ride_prices_unlocked() && rideEntry->shop_item[0] == ShopItem::None && ride->type != RIDE_TYPE_TOILETS) + const auto& rtd = ride->GetRideTypeDescriptor(); + if (!park_ride_prices_unlocked() && rideEntry->shop_item[0] == ShopItem::None && !rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { w->disabled_widgets |= (1ULL << WIDX_PRIMARY_PRICE); window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].tooltip = STR_RIDE_INCOME_ADMISSION_PAY_FOR_ENTRY_TIP; @@ -6658,7 +6661,7 @@ static void WindowRideIncomeInvalidate(rct_window* w) window_ride_income_widgets[WIDX_PRIMARY_PRICE].text = STR_FREE; ShopItem primaryItem = ShopItem::Admission; - if (ride->type == RIDE_TYPE_TOILETS || ((primaryItem = rideEntry->shop_item[0]) != ShopItem::None)) + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET) || ((primaryItem = rideEntry->shop_item[0]) != ShopItem::None)) { window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WindowWidgetType::Checkbox; diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index 2a4db962bc..08f16d0292 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -235,7 +235,7 @@ GameActions::Result RideCreateAction::Execute() const ride->price[0] = 0; } - if (ride->type == RIDE_TYPE_TOILETS) + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { if (shop_item_has_common_price(ShopItem::Admission)) { diff --git a/src/openrct2/actions/RideSetPriceAction.cpp b/src/openrct2/actions/RideSetPriceAction.cpp index d51088e3c9..ab6cbbb4c7 100644 --- a/src/openrct2/actions/RideSetPriceAction.cpp +++ b/src/openrct2/actions/RideSetPriceAction.cpp @@ -97,7 +97,9 @@ GameActions::Result RideSetPriceAction::Execute() const if (_primaryPrice) { shopItem = ShopItem::Admission; - if (ride->type != RIDE_TYPE_TOILETS) + + const auto& rtd = ride->GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { shopItem = rideEntry->shop_item[0]; if (shopItem == ShopItem::None) @@ -149,7 +151,8 @@ void RideSetPriceAction::RideSetCommonPrice(ShopItem shopItem) const { auto invalidate = false; auto rideEntry = get_ride_entry(ride.subtype); - if (ride.type == RIDE_TYPE_TOILETS && shopItem == ShopItem::Admission) + const auto& rtd = ride.GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET) && shopItem == ShopItem::Admission) { if (ride.price[0] != _price) { diff --git a/src/openrct2/entity/Guest.cpp b/src/openrct2/entity/Guest.cpp index 66ebab750e..3e9d655325 100644 --- a/src/openrct2/entity/Guest.cpp +++ b/src/openrct2/entity/Guest.cpp @@ -2206,7 +2206,8 @@ bool Guest::ShouldGoToShop(Ride* ride, bool peepAtShop) return false; } - if (ride->type == RIDE_TYPE_TOILETS) + const auto& rtd = ride->GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { if (Toilet < 70) { diff --git a/src/openrct2/management/Award.cpp b/src/openrct2/management/Award.cpp index cdce1a502a..0937571b86 100644 --- a/src/openrct2/management/Award.cpp +++ b/src/openrct2/management/Award.cpp @@ -376,7 +376,8 @@ static bool award_is_deserved_best_restrooms([[maybe_unused]] int32_t activeAwar // Count open restrooms const auto& rideManager = GetRideManager(); auto numRestrooms = static_cast(std::count_if(rideManager.begin(), rideManager.end(), [](const Ride& ride) { - return ride.type == RIDE_TYPE_TOILETS && ride.status == RideStatus::Open; + const auto& rtd = ride.GetRideTypeDescriptor(); + return rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET) && ride.status == RideStatus::Open; })); // At least 4 open restrooms diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 0d194b5e5b..82fc50cf9d 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -234,11 +234,12 @@ int32_t ride_get_count() size_t Ride::GetNumPrices() const { size_t result = 0; - if (type == RIDE_TYPE_CASH_MACHINE || type == RIDE_TYPE_FIRST_AID) + const auto& rtd = GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_CASH_MACHINE) || type == RIDE_TYPE_FIRST_AID) { result = 0; } - else if (type == RIDE_TYPE_TOILETS) + else if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { result = 1; } diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 8c9d178231..059dc77c8b 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2222,7 +2222,9 @@ void PaintTrack(paint_session& session, Direction direction, int32_t height, con if (lightfx_is_available()) { uint8_t zOffset = 16; - if (ride->type == RIDE_TYPE_TOILETS || ride->type == RIDE_TYPE_FIRST_AID || ride->type == RIDE_TYPE_CASH_MACHINE) + const auto& rtd = ride->GetRideTypeDescriptor(); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET) || ride->type == RIDE_TYPE_FIRST_AID + || rtd.HasFlag(RIDE_TYPE_FLAG_IS_CASH_MACHINE)) zOffset = 23; if (ride->type == RIDE_TYPE_INFORMATION_KIOSK) diff --git a/src/openrct2/ride/shops/meta/Toilets.h b/src/openrct2/ride/shops/meta/Toilets.h index 87da2af4b2..b6b429c8a3 100644 --- a/src/openrct2/ride/shops/meta/Toilets.h +++ b/src/openrct2/ride/shops/meta/Toilets.h @@ -24,7 +24,7 @@ constexpr const RideTypeDescriptor ToiletsRTD = SET_FIELD(StartTrackPiece, TrackElemType::FlatTrack1x1A), SET_FIELD(TrackPaintFunction, get_track_paint_function_facility), SET_FIELD(Flags, 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_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | + RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY | RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_IS_TOILET | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY), SET_FIELD(RideModes, EnumsToFlags(RideMode::ShopStall)), SET_FIELD(DefaultMode, RideMode::ShopStall),