mirror of https://github.com/OpenRCT2/OpenRCT2.git
Add MusicTrackOffsetLength field to RTD (#17684)
This commit is contained in:
parent
2202f8d060
commit
a21d9183e6
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue