Refactor ride rating to allow multiple updates (#14963)

* Refactor rating calculation to pass the state allowing multiple updates

* Rename RideRatingUpdateData to RideRatingUpdateState
This commit is contained in:
ζeh Matt 2021-06-30 21:57:27 +03:00 committed by GitHub
parent b2387d06b6
commit 6863da569f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 463 additions and 458 deletions

View File

@ -779,7 +779,7 @@ void S6Exporter::ExportRide(rct2_ride* dst, const Ride* src)
void S6Exporter::ExportRideRatingsCalcData()
{
const auto& src = gRideRatingsCalcData;
const auto& src = gRideRatingUpdateState;
auto& dst = _s6.ride_ratings_calc_data;
dst.proximity_x = src.Proximity.x;
dst.proximity_y = src.Proximity.y;

View File

@ -807,7 +807,7 @@ public:
void ImportRideRatingsCalcData()
{
const auto& src = _s6.ride_ratings_calc_data;
auto& dst = gRideRatingsCalcData;
auto& dst = gRideRatingUpdateState;
dst = {};
dst.Proximity = { src.proximity_x, src.proximity_y, src.proximity_z };
dst.ProximityStart = { src.proximity_start_x, src.proximity_start_y, src.proximity_start_z };

View File

@ -32,7 +32,8 @@
enum class ResearchCategory : uint8_t;
using ride_ratings_calculation = void (*)(Ride* ride);
using ride_ratings_calculation = void (*)(Ride* ride, RideRatingUpdateState& state);
struct RideComponentName
{
rct_string_id singular;

File diff suppressed because it is too large Load Diff

View File

@ -39,7 +39,7 @@ enum
RIDE_RATING_STATION_FLAG_NO_ENTRANCE = 1 << 0
};
struct RideRatingCalculationData
struct RideRatingUpdateState
{
CoordsXYZ Proximity;
CoordsXYZ ProximityStart;
@ -54,92 +54,92 @@ struct RideRatingCalculationData
uint16_t StationFlags;
};
extern RideRatingCalculationData gRideRatingsCalcData;
extern RideRatingUpdateState gRideRatingUpdateState;
void ride_ratings_update_ride(const Ride& ride);
void ride_ratings_update_all();
using ride_ratings_calculation = void (*)(Ride* ride);
using ride_ratings_calculation = void (*)(Ride* ride, RideRatingUpdateState& state);
ride_ratings_calculation ride_ratings_get_calculate_func(uint8_t rideType);
void ride_ratings_calculate_spiral_roller_coaster(Ride* ride);
void ride_ratings_calculate_stand_up_roller_coaster(Ride* ride);
void ride_ratings_calculate_suspended_swinging_coaster(Ride* ride);
void ride_ratings_calculate_inverted_roller_coaster(Ride* ride);
void ride_ratings_calculate_junior_roller_coaster(Ride* ride);
void ride_ratings_calculate_miniature_railway(Ride* ride);
void ride_ratings_calculate_monorail(Ride* ride);
void ride_ratings_calculate_mini_suspended_coaster(Ride* ride);
void ride_ratings_calculate_boat_hire(Ride* ride);
void ride_ratings_calculate_wooden_wild_mouse(Ride* ride);
void ride_ratings_calculate_steeplechase(Ride* ride);
void ride_ratings_calculate_car_ride(Ride* ride);
void ride_ratings_calculate_launched_freefall(Ride* ride);
void ride_ratings_calculate_bobsleigh_coaster(Ride* ride);
void ride_ratings_calculate_observation_tower(Ride* ride);
void ride_ratings_calculate_looping_roller_coaster(Ride* ride);
void ride_ratings_calculate_dinghy_slide(Ride* ride);
void ride_ratings_calculate_mine_train_coaster(Ride* ride);
void ride_ratings_calculate_chairlift(Ride* ride);
void ride_ratings_calculate_corkscrew_roller_coaster(Ride* ride);
void ride_ratings_calculate_maze(Ride* ride);
void ride_ratings_calculate_spiral_slide(Ride* ride);
void ride_ratings_calculate_go_karts(Ride* ride);
void ride_ratings_calculate_log_flume(Ride* ride);
void ride_ratings_calculate_river_rapids(Ride* ride);
void ride_ratings_calculate_dodgems(Ride* ride);
void ride_ratings_calculate_swinging_ship(Ride* ride);
void ride_ratings_calculate_inverter_ship(Ride* ride);
void ride_ratings_calculate_food_stall(Ride* ride);
void ride_ratings_calculate_shop(Ride* ride);
void ride_ratings_calculate_merry_go_round(Ride* ride);
void ride_ratings_calculate_information_kiosk(Ride* ride);
void ride_ratings_calculate_toilets(Ride* ride);
void ride_ratings_calculate_ferris_wheel(Ride* ride);
void ride_ratings_calculate_motion_simulator(Ride* ride);
void ride_ratings_calculate_3d_cinema(Ride* ride);
void ride_ratings_calculate_top_spin(Ride* ride);
void ride_ratings_calculate_space_rings(Ride* ride);
void ride_ratings_calculate_reverse_freefall_coaster(Ride* ride);
void ride_ratings_calculate_lift(Ride* ride);
void ride_ratings_calculate_vertical_drop_roller_coaster(Ride* ride);
void ride_ratings_calculate_cash_machine(Ride* ride);
void ride_ratings_calculate_twist(Ride* ride);
void ride_ratings_calculate_haunted_house(Ride* ride);
void ride_ratings_calculate_first_aid(Ride* ride);
void ride_ratings_calculate_circus(Ride* ride);
void ride_ratings_calculate_ghost_train(Ride* ride);
void ride_ratings_calculate_twister_roller_coaster(Ride* ride);
void ride_ratings_calculate_wooden_roller_coaster(Ride* ride);
void ride_ratings_calculate_side_friction_roller_coaster(Ride* ride);
void ride_ratings_calculate_wild_mouse(Ride* ride);
void ride_ratings_calculate_multi_dimension_roller_coaster(Ride* ride);
void ride_ratings_calculate_flying_roller_coaster(Ride* ride);
void ride_ratings_calculate_virginia_reel(Ride* ride);
void ride_ratings_calculate_splash_boats(Ride* ride);
void ride_ratings_calculate_mini_helicopters(Ride* ride);
void ride_ratings_calculate_lay_down_roller_coaster(Ride* ride);
void ride_ratings_calculate_suspended_monorail(Ride* ride);
void ride_ratings_calculate_reverser_roller_coaster(Ride* ride);
void ride_ratings_calculate_heartline_twister_coaster(Ride* ride);
void ride_ratings_calculate_mini_golf(Ride* ride);
void ride_ratings_calculate_giga_coaster(Ride* ride);
void ride_ratings_calculate_roto_drop(Ride* ride);
void ride_ratings_calculate_flying_saucers(Ride* ride);
void ride_ratings_calculate_crooked_house(Ride* ride);
void ride_ratings_calculate_monorail_cycles(Ride* ride);
void ride_ratings_calculate_compact_inverted_coaster(Ride* ride);
void ride_ratings_calculate_water_coaster(Ride* ride);
void ride_ratings_calculate_air_powered_vertical_coaster(Ride* ride);
void ride_ratings_calculate_inverted_hairpin_coaster(Ride* ride);
void ride_ratings_calculate_magic_carpet(Ride* ride);
void ride_ratings_calculate_submarine_ride(Ride* ride);
void ride_ratings_calculate_river_rafts(Ride* ride);
void ride_ratings_calculate_enterprise(Ride* ride);
void ride_ratings_calculate_inverted_impulse_coaster(Ride* ride);
void ride_ratings_calculate_mini_roller_coaster(Ride* ride);
void ride_ratings_calculate_mine_ride(Ride* ride);
void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride);
void ride_ratings_calculate_hybrid_coaster(Ride* ride);
void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride);
void ride_ratings_calculate_drink_stall(Ride* ride);
void ride_ratings_calculate_spiral_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_stand_up_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_suspended_swinging_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_inverted_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_junior_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_miniature_railway(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_monorail(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_mini_suspended_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_boat_hire(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_wooden_wild_mouse(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_steeplechase(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_car_ride(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_launched_freefall(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_bobsleigh_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_observation_tower(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_looping_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_dinghy_slide(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_mine_train_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_chairlift(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_corkscrew_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_maze(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_spiral_slide(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_go_karts(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_log_flume(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_river_rapids(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_dodgems(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_swinging_ship(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_inverter_ship(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_food_stall(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_shop(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_merry_go_round(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_information_kiosk(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_toilets(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_ferris_wheel(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_motion_simulator(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_3d_cinema(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_top_spin(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_space_rings(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_reverse_freefall_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_lift(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_vertical_drop_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_cash_machine(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_twist(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_haunted_house(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_first_aid(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_circus(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_ghost_train(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_twister_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_wooden_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_side_friction_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_wild_mouse(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_multi_dimension_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_flying_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_virginia_reel(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_splash_boats(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_mini_helicopters(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_lay_down_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_suspended_monorail(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_reverser_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_heartline_twister_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_mini_golf(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_giga_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_roto_drop(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_flying_saucers(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_crooked_house(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_monorail_cycles(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_compact_inverted_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_water_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_air_powered_vertical_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_inverted_hairpin_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_magic_carpet(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_submarine_ride(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_river_rafts(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_enterprise(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_inverted_impulse_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_mini_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_mine_ride(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_hybrid_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride, RideRatingUpdateState& state);
void ride_ratings_calculate_drink_stall(Ride* ride, RideRatingUpdateState& state);