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