From 0791b221e5ce5debf99df523c85b60508d1d672e Mon Sep 17 00:00:00 2001 From: frutiemax Date: Mon, 6 Jun 2022 15:00:16 -0400 Subject: [PATCH] Add MusicUpdateFunction field to RTD --- src/openrct2/ride/Ride.cpp | 29 +++++++++---------- src/openrct2/ride/Ride.h | 2 ++ src/openrct2/ride/RideData.h | 4 ++- .../ride/coaster/meta/HybridCoaster.h | 4 +-- src/openrct2/ride/gentle/meta/Circus.h | 1 + src/openrct2/ride/shops/meta/CashMachine.h | 1 + src/openrct2/ride/shops/meta/DrinkStall.h | 1 + src/openrct2/ride/shops/meta/FirstAid.h | 1 + src/openrct2/ride/shops/meta/FoodStall.h | 1 + .../ride/shops/meta/InformationKiosk.h | 1 + src/openrct2/ride/shops/meta/Shop.h | 1 + src/openrct2/ride/shops/meta/Toilets.h | 1 + 12 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index c14f2fbf7c..b6ea448c40 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -104,7 +104,7 @@ static void ride_entrance_exit_connected(Ride* ride); static int32_t ride_get_new_breakdown_problem(Ride* ride); static void ride_inspection_update(Ride* ride); static void ride_mechanic_status_update(Ride* ride, int32_t mechanicStatus); -static void ride_music_update(Ride* ride); +static void RideMusicUpdate(Ride* ride); static void ride_shop_connected(Ride* ride); RideManager GetRideManager() @@ -1020,7 +1020,7 @@ void Ride::Update() if (vehicle_change_timeout != 0) vehicle_change_timeout--; - ride_music_update(this); + RideMusicUpdate(this); // Update stations if (type != RIDE_TYPE_MAZE) @@ -1854,7 +1854,7 @@ static bool RideMusicBreakdownEffect(Ride* ride) * * Circus music is a sound effect, rather than music. Needs separate processing. */ -static void CircusMusicUpdate(Ride* ride) +void CircusMusicUpdate(Ride* ride) { Vehicle* vehicle = GetEntity(ride->vehicles[0]); if (vehicle == nullptr || vehicle->status != Vehicle::Status::DoingCircusShow) @@ -1880,20 +1880,8 @@ static void CircusMusicUpdate(Ride* ride) * * rct2: 0x006ABE85 */ -static void ride_music_update(Ride* ride) +void DefaultMusicUpdate(Ride* ride) { - if (ride->type == RIDE_TYPE_CIRCUS) - { - CircusMusicUpdate(ride); - return; - } - - const auto& rtd = ride->GetRideTypeDescriptor(); - if (!rtd.HasFlag(RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) && !rtd.HasFlag(RIDE_TYPE_FLAG_ALLOW_MUSIC)) - { - return; - } - if (ride->status != RideStatus::Open || !(ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC)) { ride->music_tune_id = 255; @@ -1926,6 +1914,15 @@ static void ride_music_update(Ride* ride) OpenRCT2::RideAudio::UpdateMusicInstance(*ride, rideCoords, sampleRate); } +static void RideMusicUpdate(Ride* ride) +{ + const auto& rtd = ride->GetRideTypeDescriptor(); + + if (!rtd.HasFlag(RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) && !rtd.HasFlag(RIDE_TYPE_FLAG_ALLOW_MUSIC)) + return; + rtd.MusicUpdateFunction(ride); +} + #pragma endregion #pragma region Measurement functions diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 05bac254d5..5d772a2b9e 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -1086,3 +1086,5 @@ void ride_clear_leftover_entrances(Ride* ride); std::vector GetTracklessRides(); void ride_remove_vehicles(Ride* ride); +void CircusMusicUpdate(Ride* ride); +void DefaultMusicUpdate(Ride* ride); diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index 67d6def8f4..e7ee15f2aa 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -144,7 +144,7 @@ struct UpkeepCostsDescriptor }; using RideTrackGroup = OpenRCT2::BitSet; - +using RideMusicUpdateFunction = void (*)(Ride*); struct RideTypeDescriptor { uint8_t AlternateType; @@ -189,6 +189,8 @@ struct RideTypeDescriptor track_colour_preset_list ColourPresets; RideColourPreview ColourPreview; RideColourKey ColourKey; + + RideMusicUpdateFunction MusicUpdateFunction = DefaultMusicUpdate; RideClassification Classification = RideClassification::Ride; bool HasFlag(uint64_t flag) const; diff --git a/src/openrct2/ride/coaster/meta/HybridCoaster.h b/src/openrct2/ride/coaster/meta/HybridCoaster.h index 076b52a143..d8c3699e9d 100644 --- a/src/openrct2/ride/coaster/meta/HybridCoaster.h +++ b/src/openrct2/ride/coaster/meta/HybridCoaster.h @@ -48,7 +48,7 @@ constexpr const RideTypeDescriptor HybridCoasterRTD = { COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_SATURATED_BROWN}, { COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_WHITE} )), - SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_SUPPORTS }), - SET_FIELD(ColourKey, RideColourKey::Ride), + SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_HYBRID_COASTER_SUPPORTS }), + SET_FIELD(ColourKey, RideColourKey::Ride), }; // clang-format on diff --git a/src/openrct2/ride/gentle/meta/Circus.h b/src/openrct2/ride/gentle/meta/Circus.h index 18f4ed8643..75fd9f5d5b 100644 --- a/src/openrct2/ride/gentle/meta/Circus.h +++ b/src/openrct2/ride/gentle/meta/Circus.h @@ -49,5 +49,6 @@ constexpr const RideTypeDescriptor CircusRTD = SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::Ride), + SET_FIELD(MusicUpdateFunction, CircusMusicUpdate), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/CashMachine.h b/src/openrct2/ride/shops/meta/CashMachine.h index 0c1bca8d4d..1d88b3fef5 100644 --- a/src/openrct2/ride/shops/meta/CashMachine.h +++ b/src/openrct2/ride/shops/meta/CashMachine.h @@ -46,6 +46,7 @@ constexpr const RideTypeDescriptor CashMachineRTD = SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::CashMachine), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::KioskOrFacility), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/DrinkStall.h b/src/openrct2/ride/shops/meta/DrinkStall.h index 554af6f876..02393d3105 100644 --- a/src/openrct2/ride/shops/meta/DrinkStall.h +++ b/src/openrct2/ride/shops/meta/DrinkStall.h @@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor DrinkStallRTD = SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::Drink), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::ShopOrStall), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/FirstAid.h b/src/openrct2/ride/shops/meta/FirstAid.h index 13cd6306fa..40ed4ebd26 100644 --- a/src/openrct2/ride/shops/meta/FirstAid.h +++ b/src/openrct2/ride/shops/meta/FirstAid.h @@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor FirstAidRTD = SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::FirstAid), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::KioskOrFacility), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/FoodStall.h b/src/openrct2/ride/shops/meta/FoodStall.h index 4168f665c4..42f9ca9d2e 100644 --- a/src/openrct2/ride/shops/meta/FoodStall.h +++ b/src/openrct2/ride/shops/meta/FoodStall.h @@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor FoodStallRTD = SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::Food), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::ShopOrStall), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/InformationKiosk.h b/src/openrct2/ride/shops/meta/InformationKiosk.h index 6dbed78185..2fa2e171c3 100644 --- a/src/openrct2/ride/shops/meta/InformationKiosk.h +++ b/src/openrct2/ride/shops/meta/InformationKiosk.h @@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor InformationKioskRTD = SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::InfoKiosk), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::KioskOrFacility), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/Shop.h b/src/openrct2/ride/shops/meta/Shop.h index 362641f5f8..e6761aac56 100644 --- a/src/openrct2/ride/shops/meta/Shop.h +++ b/src/openrct2/ride/shops/meta/Shop.h @@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor ShopRTD = SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::Shop), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::ShopOrStall), }; // clang-format on diff --git a/src/openrct2/ride/shops/meta/Toilets.h b/src/openrct2/ride/shops/meta/Toilets.h index 541473d1f8..f6f79b1efb 100644 --- a/src/openrct2/ride/shops/meta/Toilets.h +++ b/src/openrct2/ride/shops/meta/Toilets.h @@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor ToiletsRTD = SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET), SET_FIELD(ColourPreview, { 0, 0 }), SET_FIELD(ColourKey, RideColourKey::Toilets), + SET_FIELD(MusicUpdateFunction, DefaultMusicUpdate), SET_FIELD(Classification, RideClassification::KioskOrFacility), }; // clang-format on