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 musicObj = static_cast<MusicObject*>(objManager.GetLoadedObject(ObjectType::Music, ride.music));
if (musicObj != nullptr)
@ -304,6 +304,12 @@ namespace OpenRCT2::RideAudio
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)
{
auto [trackOffset, trackLength] = RideMusicGetTrackOffsetLength(ride);

View File

@ -12,6 +12,7 @@
#include "../Identifiers.h"
#include <cstdint>
#include <utility>
struct CoordsXYZ;
struct Ride;
@ -40,4 +41,7 @@ namespace OpenRCT2::RideAudio
void DefaultStartRideMusicChannel(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

View File

@ -161,6 +161,7 @@ using PeepUpdateRideLeaveEntranceFunc = void (*)(Guest*, Ride*, CoordsXYZD&);
using StartRideMusicFunction = void (*)(const OpenRCT2::RideAudio::ViewportRideMusicInstance&);
using LightFXAddLightsMagicVehicleFunction = void (*)(const Vehicle* vehicle);
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
{
@ -230,6 +231,8 @@ struct RideTypeDescriptor
RideUpdateMeasurementsSpecialElementsFunc UpdateMeasurementsSpecialElements = RideUpdateMeasurementsSpecialElements_Default;
MusicTrackOffsetLengthFunc MusicTrackOffsetLength = OpenRCT2::RideAudio::RideMusicGetTrackOffsetLength_Default;
bool HasFlag(uint64_t flag) const;
void GetAvailableTrackPieces(RideTrackGroup& res) 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(DesignCreateMode, TrackDesignCreateMode::Default),
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