Add MusicUpdateFunction field to RTD

This commit is contained in:
frutiemax 2022-06-06 15:00:16 -04:00 committed by GitHub
parent 4b11a4fc6a
commit 0791b221e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 28 additions and 19 deletions

View File

@ -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<Vehicle>(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

View File

@ -1086,3 +1086,5 @@ void ride_clear_leftover_entrances(Ride* ride);
std::vector<RideId> GetTracklessRides();
void ride_remove_vehicles(Ride* ride);
void CircusMusicUpdate(Ride* ride);
void DefaultMusicUpdate(Ride* ride);

View File

@ -144,7 +144,7 @@ struct UpkeepCostsDescriptor
};
using RideTrackGroup = OpenRCT2::BitSet<TRACK_GROUP_COUNT>;
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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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