Add MusicTrackOffsetLength field to RTD (#17684)

This commit is contained in:
frutiemax 2022-08-13 08:56:05 -04:00 committed by GitHub
parent 2202f8d060
commit a21d9183e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 5 deletions

View File

@ -283,13 +283,13 @@ namespace OpenRCT2::RideAudio
} }
} }
static std::pair<size_t, size_t> RideMusicGetTrackOffsetLength(const Ride& ride) std::pair<size_t, size_t> RideMusicGetTrackOffsetLength_Circus(const Ride& ride)
{ {
if (ride.type == RIDE_TYPE_CIRCUS) return { 1378, 12427456 };
{ }
return { 1378, 12427456 };
}
std::pair<size_t, size_t> RideMusicGetTrackOffsetLength_Default(const Ride& ride)
{
auto& objManager = GetContext()->GetObjectManager(); auto& objManager = GetContext()->GetObjectManager();
auto musicObj = static_cast<MusicObject*>(objManager.GetLoadedObject(ObjectType::Music, ride.music)); auto musicObj = static_cast<MusicObject*>(objManager.GetLoadedObject(ObjectType::Music, ride.music));
if (musicObj != nullptr) if (musicObj != nullptr)
@ -304,6 +304,12 @@ namespace OpenRCT2::RideAudio
return { 0, 0 }; return { 0, 0 };
} }
static std::pair<size_t, size_t> RideMusicGetTrackOffsetLength(const Ride& ride)
{
const auto& rtd = ride.GetRideTypeDescriptor();
return rtd.MusicTrackOffsetLength(ride);
}
static void RideUpdateMusicPosition(Ride& ride) static void RideUpdateMusicPosition(Ride& ride)
{ {
auto [trackOffset, trackLength] = RideMusicGetTrackOffsetLength(ride); auto [trackOffset, trackLength] = RideMusicGetTrackOffsetLength(ride);

View File

@ -12,6 +12,7 @@
#include "../Identifiers.h" #include "../Identifiers.h"
#include <cstdint> #include <cstdint>
#include <utility>
struct CoordsXYZ; struct CoordsXYZ;
struct Ride; struct Ride;
@ -40,4 +41,7 @@ namespace OpenRCT2::RideAudio
void DefaultStartRideMusicChannel(const ViewportRideMusicInstance& instance); void DefaultStartRideMusicChannel(const ViewportRideMusicInstance& instance);
void CircusStartRideMusicChannel(const ViewportRideMusicInstance& instance); void CircusStartRideMusicChannel(const ViewportRideMusicInstance& instance);
std::pair<size_t, size_t> RideMusicGetTrackOffsetLength_Circus(const Ride& ride);
std::pair<size_t, size_t> RideMusicGetTrackOffsetLength_Default(const Ride& ride);
} // namespace OpenRCT2::RideAudio } // namespace OpenRCT2::RideAudio

View File

@ -161,6 +161,7 @@ using PeepUpdateRideLeaveEntranceFunc = void (*)(Guest*, Ride*, CoordsXYZD&);
using StartRideMusicFunction = void (*)(const OpenRCT2::RideAudio::ViewportRideMusicInstance&); using StartRideMusicFunction = void (*)(const OpenRCT2::RideAudio::ViewportRideMusicInstance&);
using LightFXAddLightsMagicVehicleFunction = void (*)(const Vehicle* vehicle); using LightFXAddLightsMagicVehicleFunction = void (*)(const Vehicle* vehicle);
using RideUpdateMeasurementsSpecialElementsFunc = void (*)(Ride* ride, const track_type_t trackType); using RideUpdateMeasurementsSpecialElementsFunc = void (*)(Ride* ride, const track_type_t trackType);
using MusicTrackOffsetLengthFunc = std::pair<size_t, size_t> (*)(const Ride& ride);
enum class RideConstructionWindowContext : uint8_t enum class RideConstructionWindowContext : uint8_t
{ {
@ -230,6 +231,8 @@ struct RideTypeDescriptor
RideUpdateMeasurementsSpecialElementsFunc UpdateMeasurementsSpecialElements = RideUpdateMeasurementsSpecialElements_Default; RideUpdateMeasurementsSpecialElementsFunc UpdateMeasurementsSpecialElements = RideUpdateMeasurementsSpecialElements_Default;
MusicTrackOffsetLengthFunc MusicTrackOffsetLength = OpenRCT2::RideAudio::RideMusicGetTrackOffsetLength_Default;
bool HasFlag(uint64_t flag) const; bool HasFlag(uint64_t flag) const;
void GetAvailableTrackPieces(RideTrackGroup& res) const; void GetAvailableTrackPieces(RideTrackGroup& res) const;
bool SupportsTrackPiece(const uint64_t trackPiece) const; bool SupportsTrackPiece(const uint64_t trackPiece) const;

View File

@ -54,5 +54,10 @@ constexpr const RideTypeDescriptor CircusRTD =
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::CircusStartRideMusicChannel), SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::CircusStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default), SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),
SET_FIELD(MusicUpdateFunction, CircusMusicUpdate), SET_FIELD(MusicUpdateFunction, CircusMusicUpdate),
SET_FIELD(Classification,RideClassification::Ride),
SET_FIELD(UpdateLeaveEntrance,PeepUpdateRideLeaveEntranceDefault),
SET_FIELD(ConstructionWindowContext, RideConstructionWindowContext::Default),
SET_FIELD(UpdateMeasurementsSpecialElements, RideUpdateMeasurementsSpecialElements_Default),
SET_FIELD(MusicTrackOffsetLength, OpenRCT2::RideAudio::RideMusicGetTrackOffsetLength_Circus),
}; };
// clang-format on // clang-format on