1 /***************************************************************************** 2 * Copyright (c) 2014-2020 OpenRCT2 developers 3 * 4 * For a complete list of all authors, please refer to contributors.md 5 * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 6 * 7 * OpenRCT2 is licensed under the GNU General Public License version 3. 8 *****************************************************************************/ 9 10 #pragma once 11 12 #include "../common.h" 13 #include "../world/Location.hpp" 14 #include "RideTypes.h" 15 16 using ride_rating = fixed16_2dp; 17 using track_type_t = uint16_t; 18 19 // Convenience function for writing ride ratings. The result is a 16 bit signed 20 // integer. To create the ride rating 3.65 type RIDE_RATING(3,65) 21 #define RIDE_RATING(whole, fraction) FIXED_2DP(whole, fraction) 22 #define RIDE_RATING_UNDEFINED static_cast<ride_rating>(static_cast<uint16_t>(0xFFFF)) 23 24 #pragma pack(push, 1) 25 26 // Used for return values, for functions that modify all three. 27 struct RatingTuple 28 { 29 ride_rating Excitement; 30 ride_rating Intensity; 31 ride_rating Nausea; 32 }; 33 assert_struct_size(RatingTuple, 6); 34 35 #pragma pack(pop) 36 37 enum 38 { 39 RIDE_RATING_STATION_FLAG_NO_ENTRANCE = 1 << 0 40 }; 41 42 struct RideRatingUpdateState 43 { 44 CoordsXYZ Proximity; 45 CoordsXYZ ProximityStart; 46 ride_id_t CurrentRide; 47 uint8_t State; 48 track_type_t ProximityTrackType; 49 uint8_t ProximityBaseHeight; 50 uint16_t ProximityTotal; 51 uint16_t ProximityScores[26]; 52 uint16_t AmountOfBrakes; 53 uint16_t AmountOfReversers; 54 uint16_t StationFlags; 55 }; 56 57 extern RideRatingUpdateState gRideRatingUpdateState; 58 59 void ride_ratings_update_ride(const Ride& ride); 60 void ride_ratings_update_all(); 61 62 using ride_ratings_calculation = void (*)(Ride* ride, RideRatingUpdateState& state); 63 ride_ratings_calculation ride_ratings_get_calculate_func(uint8_t rideType); 64 65 void ride_ratings_calculate_spiral_roller_coaster(Ride* ride, RideRatingUpdateState& state); 66 void ride_ratings_calculate_stand_up_roller_coaster(Ride* ride, RideRatingUpdateState& state); 67 void ride_ratings_calculate_suspended_swinging_coaster(Ride* ride, RideRatingUpdateState& state); 68 void ride_ratings_calculate_inverted_roller_coaster(Ride* ride, RideRatingUpdateState& state); 69 void ride_ratings_calculate_junior_roller_coaster(Ride* ride, RideRatingUpdateState& state); 70 void ride_ratings_calculate_miniature_railway(Ride* ride, RideRatingUpdateState& state); 71 void ride_ratings_calculate_monorail(Ride* ride, RideRatingUpdateState& state); 72 void ride_ratings_calculate_mini_suspended_coaster(Ride* ride, RideRatingUpdateState& state); 73 void ride_ratings_calculate_boat_hire(Ride* ride, RideRatingUpdateState& state); 74 void ride_ratings_calculate_wooden_wild_mouse(Ride* ride, RideRatingUpdateState& state); 75 void ride_ratings_calculate_steeplechase(Ride* ride, RideRatingUpdateState& state); 76 void ride_ratings_calculate_car_ride(Ride* ride, RideRatingUpdateState& state); 77 void ride_ratings_calculate_launched_freefall(Ride* ride, RideRatingUpdateState& state); 78 void ride_ratings_calculate_bobsleigh_coaster(Ride* ride, RideRatingUpdateState& state); 79 void ride_ratings_calculate_observation_tower(Ride* ride, RideRatingUpdateState& state); 80 void ride_ratings_calculate_looping_roller_coaster(Ride* ride, RideRatingUpdateState& state); 81 void ride_ratings_calculate_dinghy_slide(Ride* ride, RideRatingUpdateState& state); 82 void ride_ratings_calculate_mine_train_coaster(Ride* ride, RideRatingUpdateState& state); 83 void ride_ratings_calculate_chairlift(Ride* ride, RideRatingUpdateState& state); 84 void ride_ratings_calculate_corkscrew_roller_coaster(Ride* ride, RideRatingUpdateState& state); 85 void ride_ratings_calculate_maze(Ride* ride, RideRatingUpdateState& state); 86 void ride_ratings_calculate_spiral_slide(Ride* ride, RideRatingUpdateState& state); 87 void ride_ratings_calculate_go_karts(Ride* ride, RideRatingUpdateState& state); 88 void ride_ratings_calculate_log_flume(Ride* ride, RideRatingUpdateState& state); 89 void ride_ratings_calculate_river_rapids(Ride* ride, RideRatingUpdateState& state); 90 void ride_ratings_calculate_dodgems(Ride* ride, RideRatingUpdateState& state); 91 void ride_ratings_calculate_swinging_ship(Ride* ride, RideRatingUpdateState& state); 92 void ride_ratings_calculate_inverter_ship(Ride* ride, RideRatingUpdateState& state); 93 void ride_ratings_calculate_food_stall(Ride* ride, RideRatingUpdateState& state); 94 void ride_ratings_calculate_shop(Ride* ride, RideRatingUpdateState& state); 95 void ride_ratings_calculate_merry_go_round(Ride* ride, RideRatingUpdateState& state); 96 void ride_ratings_calculate_information_kiosk(Ride* ride, RideRatingUpdateState& state); 97 void ride_ratings_calculate_toilets(Ride* ride, RideRatingUpdateState& state); 98 void ride_ratings_calculate_ferris_wheel(Ride* ride, RideRatingUpdateState& state); 99 void ride_ratings_calculate_motion_simulator(Ride* ride, RideRatingUpdateState& state); 100 void ride_ratings_calculate_3d_cinema(Ride* ride, RideRatingUpdateState& state); 101 void ride_ratings_calculate_top_spin(Ride* ride, RideRatingUpdateState& state); 102 void ride_ratings_calculate_space_rings(Ride* ride, RideRatingUpdateState& state); 103 void ride_ratings_calculate_reverse_freefall_coaster(Ride* ride, RideRatingUpdateState& state); 104 void ride_ratings_calculate_lift(Ride* ride, RideRatingUpdateState& state); 105 void ride_ratings_calculate_vertical_drop_roller_coaster(Ride* ride, RideRatingUpdateState& state); 106 void ride_ratings_calculate_cash_machine(Ride* ride, RideRatingUpdateState& state); 107 void ride_ratings_calculate_twist(Ride* ride, RideRatingUpdateState& state); 108 void ride_ratings_calculate_haunted_house(Ride* ride, RideRatingUpdateState& state); 109 void ride_ratings_calculate_first_aid(Ride* ride, RideRatingUpdateState& state); 110 void ride_ratings_calculate_circus(Ride* ride, RideRatingUpdateState& state); 111 void ride_ratings_calculate_ghost_train(Ride* ride, RideRatingUpdateState& state); 112 void ride_ratings_calculate_twister_roller_coaster(Ride* ride, RideRatingUpdateState& state); 113 void ride_ratings_calculate_wooden_roller_coaster(Ride* ride, RideRatingUpdateState& state); 114 void ride_ratings_calculate_side_friction_roller_coaster(Ride* ride, RideRatingUpdateState& state); 115 void ride_ratings_calculate_wild_mouse(Ride* ride, RideRatingUpdateState& state); 116 void ride_ratings_calculate_multi_dimension_roller_coaster(Ride* ride, RideRatingUpdateState& state); 117 void ride_ratings_calculate_flying_roller_coaster(Ride* ride, RideRatingUpdateState& state); 118 void ride_ratings_calculate_virginia_reel(Ride* ride, RideRatingUpdateState& state); 119 void ride_ratings_calculate_splash_boats(Ride* ride, RideRatingUpdateState& state); 120 void ride_ratings_calculate_mini_helicopters(Ride* ride, RideRatingUpdateState& state); 121 void ride_ratings_calculate_lay_down_roller_coaster(Ride* ride, RideRatingUpdateState& state); 122 void ride_ratings_calculate_suspended_monorail(Ride* ride, RideRatingUpdateState& state); 123 void ride_ratings_calculate_reverser_roller_coaster(Ride* ride, RideRatingUpdateState& state); 124 void ride_ratings_calculate_heartline_twister_coaster(Ride* ride, RideRatingUpdateState& state); 125 void ride_ratings_calculate_mini_golf(Ride* ride, RideRatingUpdateState& state); 126 void ride_ratings_calculate_giga_coaster(Ride* ride, RideRatingUpdateState& state); 127 void ride_ratings_calculate_roto_drop(Ride* ride, RideRatingUpdateState& state); 128 void ride_ratings_calculate_flying_saucers(Ride* ride, RideRatingUpdateState& state); 129 void ride_ratings_calculate_crooked_house(Ride* ride, RideRatingUpdateState& state); 130 void ride_ratings_calculate_monorail_cycles(Ride* ride, RideRatingUpdateState& state); 131 void ride_ratings_calculate_compact_inverted_coaster(Ride* ride, RideRatingUpdateState& state); 132 void ride_ratings_calculate_water_coaster(Ride* ride, RideRatingUpdateState& state); 133 void ride_ratings_calculate_air_powered_vertical_coaster(Ride* ride, RideRatingUpdateState& state); 134 void ride_ratings_calculate_inverted_hairpin_coaster(Ride* ride, RideRatingUpdateState& state); 135 void ride_ratings_calculate_magic_carpet(Ride* ride, RideRatingUpdateState& state); 136 void ride_ratings_calculate_submarine_ride(Ride* ride, RideRatingUpdateState& state); 137 void ride_ratings_calculate_river_rafts(Ride* ride, RideRatingUpdateState& state); 138 void ride_ratings_calculate_enterprise(Ride* ride, RideRatingUpdateState& state); 139 void ride_ratings_calculate_inverted_impulse_coaster(Ride* ride, RideRatingUpdateState& state); 140 void ride_ratings_calculate_mini_roller_coaster(Ride* ride, RideRatingUpdateState& state); 141 void ride_ratings_calculate_mine_ride(Ride* ride, RideRatingUpdateState& state); 142 void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride, RideRatingUpdateState& state); 143 void ride_ratings_calculate_hybrid_coaster(Ride* ride, RideRatingUpdateState& state); 144 void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride, RideRatingUpdateState& state); 145 void ride_ratings_calculate_drink_stall(Ride* ride, RideRatingUpdateState& state); 146