mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-23 06:44:38 +01:00
Move RideRatingUpdateState into namespace
This commit is contained in:
@@ -643,7 +643,7 @@ namespace OpenRCT2
|
||||
auto& rideRatings = gameState.rideRatingUpdateStates;
|
||||
if (os.GetHeader().TargetVersion >= 21)
|
||||
{
|
||||
cs.ReadWriteArray(rideRatings, [this, &cs](RideRatingUpdateState& calcData) {
|
||||
cs.ReadWriteArray(rideRatings, [this, &cs](OpenRCT2::RideRating::UpdateState& calcData) {
|
||||
ReadWriteRideRatingCalculationData(cs, calcData);
|
||||
return true;
|
||||
});
|
||||
@@ -671,7 +671,7 @@ namespace OpenRCT2
|
||||
}
|
||||
}
|
||||
|
||||
void ReadWriteRideRatingCalculationData(OrcaStream::ChunkStream& cs, RideRatingUpdateState& calcData)
|
||||
void ReadWriteRideRatingCalculationData(OrcaStream::ChunkStream& cs, OpenRCT2::RideRating::UpdateState& calcData)
|
||||
{
|
||||
cs.ReadWrite(calcData.AmountOfBrakes);
|
||||
cs.ReadWrite(calcData.Proximity);
|
||||
|
||||
@@ -93,21 +93,21 @@ struct ShelteredEights
|
||||
// would be currently 80, this is the worst case of sub-steps and may break out earlier.
|
||||
static constexpr size_t MaxRideRatingUpdateSubSteps = 20;
|
||||
|
||||
static void ride_ratings_update_state(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_0(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_1(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_2(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_3(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_4(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_5(RideRatingUpdateState& state);
|
||||
static void ride_ratings_begin_proximity_loop(RideRatingUpdateState& state);
|
||||
static void RideRatingsCalculate(RideRatingUpdateState& state, Ride& ride);
|
||||
static void ride_ratings_update_state(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_update_state_0(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_update_state_1(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_update_state_2(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_update_state_3(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_update_state_4(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_update_state_5(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void ride_ratings_begin_proximity_loop(OpenRCT2::RideRating::UpdateState& state);
|
||||
static void RideRatingsCalculate(OpenRCT2::RideRating::UpdateState& state, Ride& ride);
|
||||
static void RideRatingsCalculateValue(Ride& ride);
|
||||
static void ride_ratings_score_close_proximity(RideRatingUpdateState& state, TileElement* inputTileElement);
|
||||
static void ride_ratings_score_close_proximity(OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement);
|
||||
static void RideRatingsAdd(OpenRCT2::RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea);
|
||||
|
||||
static ShelteredEights GetNumOfShelteredEighths(const Ride& ride);
|
||||
static money64 RideComputeUpkeep(RideRatingUpdateState& state, const Ride& ride);
|
||||
static money64 RideComputeUpkeep(OpenRCT2::RideRating::UpdateState& state, const Ride& ride);
|
||||
static void SetUnreliabilityFactor(Ride& ride);
|
||||
|
||||
static void RideRatingsApplyAdjustments(const Ride& ride, OpenRCT2::RideRating::Tuple& ratings);
|
||||
@@ -142,15 +142,15 @@ static void RideRatingsApplyBonusMotionSimulatorMode(
|
||||
static void RideRatingsApplyBonus3DCinemaMode(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusTopSpinMode(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusReversals(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier);
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusHoles(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusNumTrains(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusDownwardLaunch(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier);
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusProximity(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier);
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
||||
static void RideRatingsApplyBonusScenery(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyRequirementLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyRequirementDropHeight(
|
||||
@@ -168,7 +168,7 @@ static void RideRatingsApplyRequirementInversions(
|
||||
static void RideRatingsApplyRequirementUnsheltered(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, uint8_t shelteredEighths, RatingsModifier modifier);
|
||||
static void RideRatingsApplyRequirementReversals(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier);
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
||||
static void RideRatingsApplyRequirementHoles(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
static void RideRatingsApplyRequirementStations(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||
@@ -178,7 +178,7 @@ static void RideRatingsApplyPenaltyLateralGs(OpenRCT2::RideRating::Tuple& rating
|
||||
|
||||
void OpenRCT2::RideRating::ResetUpdateStates()
|
||||
{
|
||||
RideRatingUpdateState nullState{};
|
||||
OpenRCT2::RideRating::UpdateState nullState{};
|
||||
nullState.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
||||
|
||||
auto& updateStates = getGameState().rideRatingUpdateStates;
|
||||
@@ -193,7 +193,7 @@ void OpenRCT2::RideRating::ResetUpdateStates()
|
||||
*/
|
||||
void OpenRCT2::RideRating::UpdateRide(const Ride& ride)
|
||||
{
|
||||
RideRatingUpdateState state;
|
||||
OpenRCT2::RideRating::UpdateState state;
|
||||
if (ride.status != RideStatus::closed)
|
||||
{
|
||||
state.CurrentRide = ride.id;
|
||||
@@ -229,7 +229,7 @@ void OpenRCT2::RideRating::UpdateAll()
|
||||
}
|
||||
}
|
||||
|
||||
static void ride_ratings_update_state(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
switch (state.State)
|
||||
{
|
||||
@@ -323,7 +323,7 @@ static RideId GetNextRideToUpdate(RideId currentRide)
|
||||
*
|
||||
* rct2: 0x006B5A5C
|
||||
*/
|
||||
static void ride_ratings_update_state_0(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state_0(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
// It is possible that the current ride being calculated has
|
||||
// been removed or due to import invalid. For both, reset
|
||||
@@ -347,7 +347,7 @@ static void ride_ratings_update_state_0(RideRatingUpdateState& state)
|
||||
*
|
||||
* rct2: 0x006B5A94
|
||||
*/
|
||||
static void ride_ratings_update_state_1(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state_1(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
state.ProximityTotal = 0;
|
||||
for (int32_t i = 0; i < PROXIMITY_COUNT; i++)
|
||||
@@ -365,7 +365,7 @@ static void ride_ratings_update_state_1(RideRatingUpdateState& state)
|
||||
*
|
||||
* rct2: 0x006B5C66
|
||||
*/
|
||||
static void ride_ratings_update_state_2(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state_2(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
const RideId rideIndex = state.CurrentRide;
|
||||
auto ride = GetRide(rideIndex);
|
||||
@@ -442,7 +442,7 @@ static void ride_ratings_update_state_2(RideRatingUpdateState& state)
|
||||
*
|
||||
* rct2: 0x006B5E4D
|
||||
*/
|
||||
static void ride_ratings_update_state_3(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state_3(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
auto ride = GetRide(state.CurrentRide);
|
||||
if (ride == nullptr || ride->status == RideStatus::closed)
|
||||
@@ -461,7 +461,7 @@ static void ride_ratings_update_state_3(RideRatingUpdateState& state)
|
||||
*
|
||||
* rct2: 0x006B5BAB
|
||||
*/
|
||||
static void ride_ratings_update_state_4(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state_4(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
state.State = RIDE_RATINGS_STATE_5;
|
||||
ride_ratings_begin_proximity_loop(state);
|
||||
@@ -471,7 +471,7 @@ static void ride_ratings_update_state_4(RideRatingUpdateState& state)
|
||||
*
|
||||
* rct2: 0x006B5D72
|
||||
*/
|
||||
static void ride_ratings_update_state_5(RideRatingUpdateState& state)
|
||||
static void ride_ratings_update_state_5(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
auto ride = GetRide(state.CurrentRide);
|
||||
if (ride == nullptr || ride->status == RideStatus::closed)
|
||||
@@ -536,7 +536,7 @@ static void ride_ratings_update_state_5(RideRatingUpdateState& state)
|
||||
*
|
||||
* rct2: 0x006B5BB2
|
||||
*/
|
||||
static void ride_ratings_begin_proximity_loop(RideRatingUpdateState& state)
|
||||
static void ride_ratings_begin_proximity_loop(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
auto ride = GetRide(state.CurrentRide);
|
||||
if (ride == nullptr || ride->status == RideStatus::closed)
|
||||
@@ -573,7 +573,7 @@ static void ride_ratings_begin_proximity_loop(RideRatingUpdateState& state)
|
||||
state.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
||||
}
|
||||
|
||||
static void proximity_score_increment(RideRatingUpdateState& state, int32_t type)
|
||||
static void proximity_score_increment(OpenRCT2::RideRating::UpdateState& state, int32_t type)
|
||||
{
|
||||
state.ProximityScores[type]++;
|
||||
}
|
||||
@@ -583,7 +583,7 @@ static void proximity_score_increment(RideRatingUpdateState& state, int32_t type
|
||||
* rct2: 0x006B6207
|
||||
*/
|
||||
static void ride_ratings_score_close_proximity_in_direction(
|
||||
RideRatingUpdateState& state, TileElement* inputTileElement, int32_t direction)
|
||||
OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement, int32_t direction)
|
||||
{
|
||||
auto scorePos = CoordsXY{ CoordsXY{ state.Proximity } + CoordsDirectionDelta[direction] };
|
||||
if (!MapIsLocationValid(scorePos))
|
||||
@@ -643,7 +643,8 @@ static void ride_ratings_score_close_proximity_in_direction(
|
||||
} while (!(tileElement++)->IsLastForTile());
|
||||
}
|
||||
|
||||
static void ride_ratings_score_close_proximity_loops_helper(RideRatingUpdateState& state, const CoordsXYE& coordsElement)
|
||||
static void ride_ratings_score_close_proximity_loops_helper(
|
||||
OpenRCT2::RideRating::UpdateState& state, const CoordsXYE& coordsElement)
|
||||
{
|
||||
TileElement* tileElement = MapGetFirstElementAt(coordsElement);
|
||||
if (tileElement == nullptr)
|
||||
@@ -688,7 +689,7 @@ static void ride_ratings_score_close_proximity_loops_helper(RideRatingUpdateStat
|
||||
*
|
||||
* rct2: 0x006B62DA
|
||||
*/
|
||||
static void ride_ratings_score_close_proximity_loops(RideRatingUpdateState& state, TileElement* inputTileElement)
|
||||
static void ride_ratings_score_close_proximity_loops(OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement)
|
||||
{
|
||||
auto trackType = inputTileElement->AsTrack()->GetTrackType();
|
||||
if (trackType == TrackElemType::LeftVerticalLoop || trackType == TrackElemType::RightVerticalLoop)
|
||||
@@ -705,7 +706,7 @@ static void ride_ratings_score_close_proximity_loops(RideRatingUpdateState& stat
|
||||
*
|
||||
* rct2: 0x006B5F9D
|
||||
*/
|
||||
static void ride_ratings_score_close_proximity(RideRatingUpdateState& state, TileElement* inputTileElement)
|
||||
static void ride_ratings_score_close_proximity(OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement)
|
||||
{
|
||||
if (state.StationFlags & RIDE_RATING_STATION_FLAG_NO_ENTRANCE)
|
||||
{
|
||||
@@ -891,7 +892,7 @@ static void ride_ratings_score_close_proximity(RideRatingUpdateState& state, Til
|
||||
}
|
||||
}
|
||||
|
||||
static void RideRatingsCalculate(RideRatingUpdateState& state, Ride& ride)
|
||||
static void RideRatingsCalculate(OpenRCT2::RideRating::UpdateState& state, Ride& ride)
|
||||
{
|
||||
const auto& rrd = ride.getRideTypeDescriptor().RatingsData;
|
||||
|
||||
@@ -1218,7 +1219,7 @@ static void RideRatingsCalculateValue(Ride& ride)
|
||||
* inputs
|
||||
* - edi: ride ptr
|
||||
*/
|
||||
static money64 RideComputeUpkeep(RideRatingUpdateState& state, const Ride& ride)
|
||||
static money64 RideComputeUpkeep(OpenRCT2::RideRating::UpdateState& state, const Ride& ride)
|
||||
{
|
||||
// data stored at 0x0057E3A8, incrementing 18 bytes at a time
|
||||
auto upkeep = ride.getRideTypeDescriptor().UpkeepCosts.BaseCost;
|
||||
@@ -1413,7 +1414,7 @@ static uint32_t get_proximity_score_helper_3(uint16_t x, uint16_t resultIfNotZer
|
||||
*
|
||||
* rct2: 0x0065E277
|
||||
*/
|
||||
static uint32_t ride_ratings_get_proximity_score(RideRatingUpdateState& state)
|
||||
static uint32_t ride_ratings_get_proximity_score(OpenRCT2::RideRating::UpdateState& state)
|
||||
{
|
||||
const uint16_t* scores = state.ProximityScores;
|
||||
|
||||
@@ -2057,7 +2058,7 @@ static void RideRatingsApplyBonusTopSpinMode(OpenRCT2::RideRating::Tuple& rating
|
||||
}
|
||||
|
||||
static void RideRatingsApplyBonusReversals(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier)
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
||||
{
|
||||
int32_t numReversers = std::min<uint16_t>(state.AmountOfReversers, modifier.threshold);
|
||||
RideRatingsAdd(
|
||||
@@ -2098,7 +2099,7 @@ static void RideRatingsApplyBonusOperationOptionFreefall(
|
||||
}
|
||||
|
||||
static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier)
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
||||
{
|
||||
int32_t excitement = (ToHumanReadableRideLength(ride.getTotalLength()) * 32768) >> 16;
|
||||
RideRatingsAdd(ratings, excitement, 0, 0);
|
||||
@@ -2123,7 +2124,7 @@ static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
||||
}
|
||||
|
||||
static void RideRatingsApplyBonusProximity(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier)
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
||||
{
|
||||
RideRatingsAdd(ratings, (ride_ratings_get_proximity_score(state) * modifier.excitement) >> 16, 0, 0);
|
||||
}
|
||||
@@ -2221,7 +2222,7 @@ static void RideRatingsApplyRequirementUnsheltered(
|
||||
}
|
||||
|
||||
static void RideRatingsApplyRequirementReversals(
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RideRatingUpdateState& state, RatingsModifier modifier)
|
||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
||||
{
|
||||
if (state.AmountOfReversers < modifier.threshold)
|
||||
{
|
||||
|
||||
@@ -31,21 +31,6 @@ constexpr ride_rating MakeRideRating(int16_t whole, uint8_t fraction)
|
||||
}
|
||||
constexpr ride_rating kRideRatingUndefined = 0xFFFFu;
|
||||
|
||||
struct RideRatingUpdateState
|
||||
{
|
||||
CoordsXYZ Proximity;
|
||||
CoordsXYZ ProximityStart;
|
||||
RideId CurrentRide;
|
||||
uint8_t State;
|
||||
OpenRCT2::TrackElemType ProximityTrackType;
|
||||
uint8_t ProximityBaseHeight;
|
||||
uint16_t ProximityTotal;
|
||||
uint16_t ProximityScores[26];
|
||||
uint16_t AmountOfBrakes;
|
||||
uint16_t AmountOfReversers;
|
||||
uint16_t StationFlags;
|
||||
};
|
||||
|
||||
namespace OpenRCT2::RideRating
|
||||
{
|
||||
#pragma pack(push, 1)
|
||||
@@ -66,8 +51,23 @@ namespace OpenRCT2::RideRating
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
struct UpdateState
|
||||
{
|
||||
CoordsXYZ Proximity;
|
||||
CoordsXYZ ProximityStart;
|
||||
RideId CurrentRide;
|
||||
uint8_t State;
|
||||
OpenRCT2::TrackElemType ProximityTrackType;
|
||||
uint8_t ProximityBaseHeight;
|
||||
uint16_t ProximityTotal;
|
||||
uint16_t ProximityScores[26];
|
||||
uint16_t AmountOfBrakes;
|
||||
uint16_t AmountOfReversers;
|
||||
uint16_t StationFlags;
|
||||
};
|
||||
|
||||
static constexpr size_t kMaxUpdateStates = 4;
|
||||
using UpdateStates = std::array<RideRatingUpdateState, kMaxUpdateStates>;
|
||||
using UpdateStates = std::array<UpdateState, kMaxUpdateStates>;
|
||||
|
||||
void ResetUpdateStates();
|
||||
void UpdateRide(const Ride& ride);
|
||||
|
||||
Reference in New Issue
Block a user