From 275e970d6983f0bb712868147e42073c7953059f Mon Sep 17 00:00:00 2001 From: frutiemax Date: Wed, 4 May 2022 14:37:11 -0400 Subject: [PATCH] Add RIDE_TYPE_FLAG_IS_CASH_MACHINE flag to RTD (#17130) * Add RIDE_TYPE_FLAG_HAS_CASH flag to RTD * Rename to RIDE_TYPE_FLAG_IS_CASH_MACHINE --- src/openrct2/entity/Guest.cpp | 27 ++++++++++++---------- src/openrct2/ride/RideData.h | 1 + src/openrct2/ride/shops/meta/CashMachine.h | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/openrct2/entity/Guest.cpp b/src/openrct2/entity/Guest.cpp index 8000a44708..aa005d28d3 100644 --- a/src/openrct2/entity/Guest.cpp +++ b/src/openrct2/entity/Guest.cpp @@ -438,7 +438,7 @@ static void peep_update_hunger(Guest* peep); static void peep_decide_whether_to_leave_park(Guest* peep); static void peep_leave_park(Guest* peep); static void peep_head_for_nearest_ride_type(Guest* peep, int32_t rideType); -static void peep_head_for_nearest_ride_with_flags(Guest* peep, int32_t rideTypeFlags); +static void PeepHeadForNearestRideWithFlags(Guest* peep, int64_t rideTypeFlags); bool loc_690FD0(Peep* peep, RideId* rideToView, uint8_t* rideSeatToView, TileElement* tileElement); template<> bool EntityBase::Is() const @@ -1088,16 +1088,16 @@ void Guest::Tick128UpdateGuest(int32_t index) switch (chosen_thought) { case PeepThoughtType::Hungry: - peep_head_for_nearest_ride_with_flags(this, RIDE_TYPE_FLAG_SELLS_FOOD); + PeepHeadForNearestRideWithFlags(this, RIDE_TYPE_FLAG_SELLS_FOOD); break; case PeepThoughtType::Thirsty: - peep_head_for_nearest_ride_with_flags(this, RIDE_TYPE_FLAG_SELLS_DRINKS); + PeepHeadForNearestRideWithFlags(this, RIDE_TYPE_FLAG_SELLS_DRINKS); break; case PeepThoughtType::Toilet: - peep_head_for_nearest_ride_with_flags(this, RIDE_TYPE_FLAG_IS_TOILET); + PeepHeadForNearestRideWithFlags(this, RIDE_TYPE_FLAG_IS_TOILET); break; case PeepThoughtType::RunningOut: - peep_head_for_nearest_ride_type(this, RIDE_TYPE_CASH_MACHINE); + PeepHeadForNearestRideWithFlags(this, RIDE_TYPE_FLAG_IS_CASH_MACHINE); break; default: break; @@ -3218,7 +3218,7 @@ static void peep_head_for_nearest_ride_type(Guest* peep, int32_t rideType) peep, considerOnlyCloseRides, [rideType](const Ride& ride) { return ride.type == rideType; }); } -static void peep_head_for_nearest_ride_with_flags(Guest* peep, int32_t rideTypeFlags) +static void PeepHeadForNearestRideWithFlags(Guest* peep, int64_t rideTypeFlags) { if ((rideTypeFlags & RIDE_TYPE_FLAG_IS_TOILET) && peep->HasFoodOrDrink()) { @@ -3239,16 +3239,17 @@ void Guest::StopPurchaseThought(uint8_t ride_type) { auto thoughtType = PeepThoughtType::Hungry; - if (!GetRideTypeDescriptor(ride_type).HasFlag(RIDE_TYPE_FLAG_SELLS_FOOD)) + const auto& rtd = GetRideTypeDescriptor(ride_type); + if (!rtd.HasFlag(RIDE_TYPE_FLAG_SELLS_FOOD)) { thoughtType = PeepThoughtType::Thirsty; - if (!GetRideTypeDescriptor(ride_type).HasFlag(RIDE_TYPE_FLAG_SELLS_DRINKS)) + if (!rtd.HasFlag(RIDE_TYPE_FLAG_SELLS_DRINKS)) { thoughtType = PeepThoughtType::RunningOut; - if (ride_type != RIDE_TYPE_CASH_MACHINE) + if (!rtd.HasFlag(RIDE_TYPE_FLAG_IS_CASH_MACHINE)) { thoughtType = PeepThoughtType::Toilet; - if (!GetRideTypeDescriptor(ride_type).HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) + if (!rtd.HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { return; } @@ -3332,7 +3333,8 @@ void Guest::UpdateBuying() return; } - if (ride->type == RIDE_TYPE_CASH_MACHINE) + const auto& rtd = GetRideTypeDescriptor(ride->type); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_CASH_MACHINE)) { if (CurrentRide != PreviousRide) { @@ -3354,7 +3356,8 @@ void Guest::UpdateBuying() if (CurrentRide != PreviousRide) { - if (ride->type == RIDE_TYPE_CASH_MACHINE) + const auto& rtd = GetRideTypeDescriptor(ride->type); + if (rtd.HasFlag(RIDE_TYPE_FLAG_IS_CASH_MACHINE)) { item_bought = peep_should_use_cash_machine(this, CurrentRide); if (!item_bought) diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index 3351912532..67d6def8f4 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -277,6 +277,7 @@ enum ride_type_flags : uint64_t RIDE_TYPE_FLAG_HAS_LANDSCAPE_DOORS = (1ULL << 51), RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT = (1ULL << 52), RIDE_TYPE_FLAG_PEEP_CAN_USE_UMBRELLA = (1ULL << 53), + RIDE_TYPE_FLAG_IS_CASH_MACHINE = (1ULL << 54), }; // Set on ride types that have a main colour, additional colour and support colour. diff --git a/src/openrct2/ride/shops/meta/CashMachine.h b/src/openrct2/ride/shops/meta/CashMachine.h index cd88825352..0c1bca8d4d 100644 --- a/src/openrct2/ride/shops/meta/CashMachine.h +++ b/src/openrct2/ride/shops/meta/CashMachine.h @@ -23,7 +23,7 @@ constexpr const RideTypeDescriptor CashMachineRTD = SET_FIELD(CoveredTrackPieces, {}), SET_FIELD(StartTrackPiece, TrackElemType::FlatTrack1x1A), SET_FIELD(TrackPaintFunction, get_track_paint_function_shop), - 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 | + 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_IS_CASH_MACHINE | 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_LIST_VEHICLES_SEPARATELY), SET_FIELD(RideModes, EnumsToFlags(RideMode::ShopStall)), SET_FIELD(DefaultMode, RideMode::ShopStall),