mirror of https://github.com/OpenRCT2/OpenRCT2.git
Refactor import/export to support multiple ride rating update states
This commit is contained in:
parent
6170bb05e2
commit
72a76a0ea5
|
@ -536,7 +536,25 @@ namespace OpenRCT2
|
|||
cs.ReadWrite(gGrassSceneryTileLoopPosition);
|
||||
cs.ReadWrite(gWidePathTileLoopPosition);
|
||||
|
||||
ReadWriteRideRatingCalculationData(cs, gRideRatingUpdateState);
|
||||
auto& rideRatings = RideRatingGetUpdateStates();
|
||||
if (os.GetHeader().TargetVersion >= 21)
|
||||
{
|
||||
cs.ReadWriteArray(rideRatings, [this, &cs](RideRatingUpdateState& calcData) {
|
||||
ReadWriteRideRatingCalculationData(cs, calcData);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only single state was stored prior to version 20.
|
||||
if (os.GetMode() == OrcaStream::Mode::READING)
|
||||
{
|
||||
// Since we read only one state ensure the rest is reset.
|
||||
RideRatingResetUpdateStates();
|
||||
}
|
||||
auto& rideRatingUpdateState = rideRatings[0];
|
||||
ReadWriteRideRatingCalculationData(cs, rideRatingUpdateState);
|
||||
}
|
||||
|
||||
if (os.GetHeader().TargetVersion >= 14)
|
||||
{
|
||||
|
|
|
@ -1097,7 +1097,10 @@ namespace RCT2
|
|||
void ImportRideRatingsCalcData()
|
||||
{
|
||||
const auto& src = _s6.RideRatingsCalcData;
|
||||
auto& dst = gRideRatingUpdateState;
|
||||
// S6 has only one state, ensure we reset all states before reading the first one.
|
||||
RideRatingResetUpdateStates();
|
||||
auto& rideRatingStates = RideRatingGetUpdateStates();
|
||||
auto& dst = rideRatingStates[0];
|
||||
dst = {};
|
||||
dst.Proximity = { src.ProximityX, src.ProximityY, src.ProximityZ };
|
||||
dst.ProximityStart = { src.ProximityStartX, src.ProximityStartY, src.ProximityStartZ };
|
||||
|
|
|
@ -77,7 +77,7 @@ struct ShelteredEights
|
|||
uint8_t TotalShelteredEighths;
|
||||
};
|
||||
|
||||
RideRatingUpdateState gRideRatingUpdateState;
|
||||
static RideRatingUpdateStates gRideRatingUpdateStates;
|
||||
|
||||
static void ride_ratings_update_state(RideRatingUpdateState& state);
|
||||
static void ride_ratings_update_state_0(RideRatingUpdateState& state);
|
||||
|
@ -93,6 +93,25 @@ static void ride_ratings_score_close_proximity(RideRatingUpdateState& state, Til
|
|||
|
||||
static void ride_ratings_add(RatingTuple* rating, int32_t excitement, int32_t intensity, int32_t nausea);
|
||||
|
||||
RideRatingUpdateStates& RideRatingGetUpdateStates()
|
||||
{
|
||||
return gRideRatingUpdateStates;
|
||||
}
|
||||
|
||||
void RideRatingResetUpdateStates()
|
||||
{
|
||||
RideRatingUpdateState nullState{};
|
||||
nullState.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
||||
|
||||
std::fill(gRideRatingUpdateStates.begin(), gRideRatingUpdateStates.end(), nullState);
|
||||
}
|
||||
|
||||
RideRatingUpdateState& RideRatingGetUpdateState(size_t index)
|
||||
{
|
||||
Guard::IndexInRange(index, gRideRatingUpdateStates);
|
||||
return gRideRatingUpdateStates[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a small hack function to keep calling the ride rating processor until
|
||||
* the given ride's ratings have been calculated. Whatever is currently being
|
||||
|
@ -126,7 +145,7 @@ void RideRatingsUpdateAll()
|
|||
|
||||
// NOTE: With the new save format more than one ride can be updated at once, but this has not yet been implemented.
|
||||
// The SV6 format could store only a single state.
|
||||
ride_ratings_update_state(gRideRatingUpdateState);
|
||||
ride_ratings_update_state(gRideRatingUpdateStates[0]);
|
||||
}
|
||||
|
||||
static void ride_ratings_update_state(RideRatingUpdateState& state)
|
||||
|
|
|
@ -54,7 +54,12 @@ struct RideRatingUpdateState
|
|||
uint16_t StationFlags;
|
||||
};
|
||||
|
||||
extern RideRatingUpdateState gRideRatingUpdateState;
|
||||
static constexpr size_t RideRatingMaxUpdateStates = 4;
|
||||
|
||||
using RideRatingUpdateStates = std::array<RideRatingUpdateState, RideRatingMaxUpdateStates>;
|
||||
|
||||
RideRatingUpdateStates& RideRatingGetUpdateStates();
|
||||
void RideRatingResetUpdateStates();
|
||||
|
||||
void RideRatingsUpdateRide(const Ride& ride);
|
||||
void RideRatingsUpdateAll();
|
||||
|
|
Loading…
Reference in New Issue