1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-04 13:42:55 +01:00

Add UpdateRotating field to RTD

This commit is contained in:
frutiemax
2022-08-31 04:10:39 -04:00
committed by GitHub
parent 3799d2fc3d
commit 306cc65258
33 changed files with 60 additions and 9 deletions

View File

@@ -167,6 +167,7 @@ using RideUpdateMeasurementsSpecialElementsFunc = void (*)(Ride* ride, const tra
using MusicTrackOffsetLengthFunc = std::pair<size_t, size_t> (*)(const Ride& ride);
using SpecialElementRatingAdjustmentFunc = void (*)(const Ride* ride, int32_t& excitement, int32_t& intensity, int32_t& nausea);
using UpdateRotatingFunction = void (*)(Vehicle& vehicle);
enum class RideConstructionWindowContext : uint8_t
{
Default,
@@ -221,6 +222,8 @@ struct RideTypeDescriptor
// json name lookup
std::string_view Name;
UpdateRotatingFunction UpdateRotating = UpdateRotatingDefault;
LightFXAddLightsMagicVehicleFunction LightFXAddLightsMagicVehicle = nullptr;
StartRideMusicFunction StartRideMusic = OpenRCT2::RideAudio::DefaultStartRideMusicChannel;
@@ -436,6 +439,7 @@ constexpr const RideTypeDescriptor DummyRTD =
SET_FIELD(ColourPreview, { static_cast<uint32_t>(SPR_NONE), static_cast<uint32_t>(SPR_NONE) }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "invalid"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -4830,6 +4830,24 @@ void Vehicle::UpdateSimulatorOperating()
var_C0 = 0;
}
void UpdateRotatingDefault(Vehicle& vehicle)
{
vehicle.sub_state = 1;
vehicle.UpdateRotating();
}
void UpdateRotatingEnterprise(Vehicle& vehicle)
{
if (vehicle.sub_state == 2)
{
vehicle.SetState(Vehicle::Status::Arriving);
vehicle.var_C0 = 0;
return;
}
UpdateRotatingDefault(vehicle);
}
/**
*
* rct2: 0x006D92FF
@@ -4910,15 +4928,8 @@ void Vehicle::UpdateRotating()
}
}
if (curRide->type == RIDE_TYPE_ENTERPRISE && sub_state == 2)
{
SetState(Vehicle::Status::Arriving);
var_C0 = 0;
return;
}
sub_state = 1;
UpdateRotating();
const auto& rtd = GetRideTypeDescriptor(curRide->type);
rtd.UpdateRotating(*this);
}
/**

View File

@@ -272,6 +272,9 @@ struct Vehicle : EntityBase
void Serialise(DataSerialiser& stream);
void Paint(paint_session& session, int32_t imageDirection) const;
friend void UpdateRotatingDefault(Vehicle& vehicle);
friend void UpdateRotatingEnterprise(Vehicle& vehicle);
private:
bool SoundCanPlay() const;
uint16_t GetSoundPriority() const;
@@ -373,6 +376,9 @@ private:
};
static_assert(sizeof(Vehicle) <= 512);
void UpdateRotatingDefault(Vehicle& vehicle);
void UpdateRotatingEnterprise(Vehicle& vehicle);
struct train_ref
{
Vehicle* head;

View File

@@ -53,6 +53,7 @@ constexpr const RideTypeDescriptor MineTrainCoasterRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_MINE_TRAIN_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_MINE_TRAIN_COASTER_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "mine_train_rc"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_MineTrainCoaster),
};
// clang-format on

View File

@@ -54,6 +54,7 @@ constexpr const RideTypeDescriptor WaterCoasterRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_WATER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_WATER_COASTER_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "water_coaster"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -58,6 +58,7 @@ constexpr const RideTypeDescriptor CarRideRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_CAR_RIDE_TRACK, SPR_RIDE_DESIGN_PREVIEW_CAR_RIDE_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "car_ride"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -50,6 +50,7 @@ constexpr const RideTypeDescriptor CircusRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "circus"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::CircusStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -55,6 +55,7 @@ constexpr const RideTypeDescriptor DodgemsRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_DODGEMS_TRACK, SPR_RIDE_DESIGN_PREVIEW_DODGEMS_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "dodgems"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -59,6 +59,7 @@ constexpr const RideTypeDescriptor GhostTrainRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_GHOST_TRAIN_TRACK, SPR_RIDE_DESIGN_PREVIEW_GHOST_TRAIN_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "ghost_train"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_MineTrainCoaster),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -52,6 +52,7 @@ constexpr const RideTypeDescriptor MazeRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "maze"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Maze),

View File

@@ -52,6 +52,7 @@ constexpr const RideTypeDescriptor MiniGolfRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_MINI_GOLF_TRACK, SPR_RIDE_DESIGN_PREVIEW_MINI_GOLF_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "mini_golf"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -59,6 +59,7 @@ constexpr const RideTypeDescriptor MiniHelicoptersRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_MINI_HELICOPTERS_TRACK, SPR_RIDE_DESIGN_PREVIEW_MINI_HELICOPTERS_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "mini_helicopters"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -55,6 +55,7 @@ constexpr const RideTypeDescriptor MonorailCyclesRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_MONORAIL_CYCLES_TRACK, SPR_RIDE_DESIGN_PREVIEW_MONORAIL_CYCLES_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "monorail_cycles"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -57,6 +57,7 @@ constexpr const RideTypeDescriptor MonsterTrucksRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_CAR_RIDE_TRACK, SPR_RIDE_DESIGN_PREVIEW_CAR_RIDE_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "monster_trucks"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -54,6 +54,7 @@ constexpr const RideTypeDescriptor ObservationTowerRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_OBSERVATION_TOWER_TRACK, SPR_RIDE_DESIGN_PREVIEW_OBSERVATION_TOWER_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "observation_tower"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_ObservationTower),
};
// clang-format on

View File

@@ -53,6 +53,7 @@ constexpr const RideTypeDescriptor SpiralSlideRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_SPIRAL_SLIDE_TRACK, 0 }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "spiral_slide"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -47,6 +47,7 @@ constexpr const RideTypeDescriptor CashMachineRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::CashMachine),
SET_FIELD(Name, "cash_machine"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -48,6 +48,7 @@ constexpr const RideTypeDescriptor DrinkStallRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Drink),
SET_FIELD(Name, "drink_stall"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -48,6 +48,7 @@ constexpr const RideTypeDescriptor FirstAidRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::FirstAid),
SET_FIELD(Name, "first_aid"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -48,6 +48,7 @@ constexpr const RideTypeDescriptor FoodStallRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Food),
SET_FIELD(Name, "food_stall"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -48,6 +48,7 @@ constexpr const RideTypeDescriptor InformationKioskRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::InfoKiosk),
SET_FIELD(Name, "information_kiosk"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -48,6 +48,7 @@ constexpr const RideTypeDescriptor ShopRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Shop),
SET_FIELD(Name, "shop"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -48,6 +48,7 @@ constexpr const RideTypeDescriptor ToiletsRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Toilets),
SET_FIELD(Name, "toilets"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -50,6 +50,7 @@ constexpr const RideTypeDescriptor EnterpriseRTD =
SET_FIELD(ColourPreview, { 0, 0 }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "enterprise"),
SET_FIELD(UpdateRotating, UpdateRotatingEnterprise),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -55,6 +55,7 @@ constexpr const RideTypeDescriptor GoKartsRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_GO_KARTS_TRACK, SPR_RIDE_DESIGN_PREVIEW_GO_KARTS_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "go_karts"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -56,6 +56,7 @@ constexpr const RideTypeDescriptor ChairliftRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_CHAIRLIFT_TRACK, SPR_RIDE_DESIGN_PREVIEW_CHAIRLIFT_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "chairlift"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_ChairLift),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -56,6 +56,7 @@ constexpr const RideTypeDescriptor MiniatureRailwayRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_MINIATURE_RAILWAY_TRACK, SPR_RIDE_DESIGN_PREVIEW_MINIATURE_RAILWAY_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "miniature_railway"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_MiniatureRailway),
};
// clang-format on

View File

@@ -59,6 +59,7 @@ constexpr const RideTypeDescriptor MonorailRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_MONORAIL_TRACK, SPR_RIDE_DESIGN_PREVIEW_MONORAIL_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "monorail"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_Monorail),
};
// clang-format on

View File

@@ -55,6 +55,7 @@ constexpr const RideTypeDescriptor BoatHireRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_BOAT_HIRE_TRACK, SPR_RIDE_DESIGN_PREVIEW_BOAT_HIRE_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "boat_hire"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -55,6 +55,7 @@ constexpr const RideTypeDescriptor LogFlumeRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_LOG_FLUME_TRACK, SPR_RIDE_DESIGN_PREVIEW_LOG_FLUME_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "log_flume"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -55,6 +55,7 @@ constexpr const RideTypeDescriptor RiverRapidsRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_RIVER_RAPIDS_TRACK, SPR_RIDE_DESIGN_PREVIEW_RIVER_RAPIDS_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "river_rapids"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, nullptr),
SET_FIELD(StartRideMusic, OpenRCT2::RideAudio::DefaultStartRideMusicChannel),
SET_FIELD(DesignCreateMode, TrackDesignCreateMode::Default),

View File

@@ -56,6 +56,7 @@ constexpr const RideTypeDescriptor SplashBoatsRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_SPLASH_BOATS_TRACK, SPR_RIDE_DESIGN_PREVIEW_SPLASH_BOATS_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "splash_boats"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on

View File

@@ -54,6 +54,7 @@ constexpr const RideTypeDescriptor SubmarineRideRTD =
SET_FIELD(ColourPreview, { SPR_RIDE_DESIGN_PREVIEW_SUBMARINE_RIDE_TRACK, SPR_RIDE_DESIGN_PREVIEW_SUBMARINE_RIDE_SUPPORTS }),
SET_FIELD(ColourKey, RideColourKey::Ride),
SET_FIELD(Name, "submarine_ride"),
SET_FIELD(UpdateRotating, UpdateRotatingDefault),
SET_FIELD(LightFXAddLightsMagicVehicle, LightFxAddLightsMagicVehicle_BoatHire),
};
// clang-format on