Henry Triff / Mbed 2 deprecated ELEC2645_Project_el18ht

Dependencies:   mbed

Committer:
HenryWTriff
Date:
Fri May 22 16:27:56 2020 +0000
Revision:
26:f1d3b7e31091
Parent:
25:31761087a83f
Added Spectators and helicopters to the maps!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HenryWTriff 25:31761087a83f 1 //#define DEBUG_SPEED
HenryWTriff 25:31761087a83f 2 //#define DEBUG_POSITION
HenryWTriff 25:31761087a83f 3 //#define DEBUG_ANGLE
HenryWTriff 25:31761087a83f 4 //#define DEBUG_GATE
HenryWTriff 25:31761087a83f 5 //#define DEBUG_OFF_TRACK
HenryWTriff 25:31761087a83f 6 //#define DEBUG_OUT_OF_BOUNDS
HenryWTriff 25:31761087a83f 7
HenryWTriff 5:2d9f3c36bcb9 8 #ifndef MECHANICS_H
HenryWTriff 5:2d9f3c36bcb9 9 #define MECHANICS_H
HenryWTriff 5:2d9f3c36bcb9 10
HenryWTriff 5:2d9f3c36bcb9 11 #include "mbed.h"
HenryWTriff 5:2d9f3c36bcb9 12 #include "Gamepad.h"
HenryWTriff 5:2d9f3c36bcb9 13 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 14 #include "FXOS8700CQ.h"
HenryWTriff 5:2d9f3c36bcb9 15 #include "Graphics.h"
HenryWTriff 6:5f76dd718dc3 16 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 17 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 18 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 19 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 20 #include <string>
HenryWTriff 5:2d9f3c36bcb9 21
HenryWTriff 5:2d9f3c36bcb9 22 #ifndef STRUCTS
HenryWTriff 5:2d9f3c36bcb9 23 #define STRUCTS
HenryWTriff 5:2d9f3c36bcb9 24
HenryWTriff 5:2d9f3c36bcb9 25 //STRUCTS
HenryWTriff 5:2d9f3c36bcb9 26 struct Point_2D {
HenryWTriff 5:2d9f3c36bcb9 27 float x;
HenryWTriff 5:2d9f3c36bcb9 28 float y;
HenryWTriff 5:2d9f3c36bcb9 29 };
HenryWTriff 5:2d9f3c36bcb9 30 struct Line_2D {
HenryWTriff 5:2d9f3c36bcb9 31 Point_2D from;
HenryWTriff 5:2d9f3c36bcb9 32 Point_2D to;
HenryWTriff 5:2d9f3c36bcb9 33 };
HenryWTriff 5:2d9f3c36bcb9 34
HenryWTriff 5:2d9f3c36bcb9 35 struct Square_2D {
HenryWTriff 5:2d9f3c36bcb9 36 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 37 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 38 };
HenryWTriff 5:2d9f3c36bcb9 39 struct Triangle_2D {
HenryWTriff 5:2d9f3c36bcb9 40 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 41 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 42 int Type;
HenryWTriff 5:2d9f3c36bcb9 43 };
HenryWTriff 5:2d9f3c36bcb9 44
HenryWTriff 26:f1d3b7e31091 45 struct Sprite_2D {
HenryWTriff 26:f1d3b7e31091 46 float x;
HenryWTriff 26:f1d3b7e31091 47 float y;
HenryWTriff 26:f1d3b7e31091 48 int type;
HenryWTriff 26:f1d3b7e31091 49 };
HenryWTriff 26:f1d3b7e31091 50
HenryWTriff 5:2d9f3c36bcb9 51 struct Map_Data {
HenryWTriff 5:2d9f3c36bcb9 52 int number_of_track_lines;
HenryWTriff 5:2d9f3c36bcb9 53 int number_of_dotted_lines;
HenryWTriff 26:f1d3b7e31091 54 int number_of_sprites;
HenryWTriff 5:2d9f3c36bcb9 55 int number_of_walls;
HenryWTriff 5:2d9f3c36bcb9 56 int number_of_off_track_squares;
HenryWTriff 5:2d9f3c36bcb9 57 int number_of_off_track_triangles;
HenryWTriff 5:2d9f3c36bcb9 58 int number_of_out_of_bounds_squares;
HenryWTriff 5:2d9f3c36bcb9 59 int number_of_out_of_bounds_triangles;
HenryWTriff 5:2d9f3c36bcb9 60 int number_of_gates;
HenryWTriff 6:5f76dd718dc3 61 int number_of_boost_plates;
HenryWTriff 6:5f76dd718dc3 62 };
HenryWTriff 6:5f76dd718dc3 63
HenryWTriff 6:5f76dd718dc3 64 struct Time {
HenryWTriff 6:5f76dd718dc3 65 int mins;
HenryWTriff 6:5f76dd718dc3 66 int secs;
HenryWTriff 6:5f76dd718dc3 67 int milis;
HenryWTriff 6:5f76dd718dc3 68 };
HenryWTriff 6:5f76dd718dc3 69
HenryWTriff 6:5f76dd718dc3 70 struct Gyro_Data {
HenryWTriff 6:5f76dd718dc3 71 float ax;
HenryWTriff 6:5f76dd718dc3 72 float ay;
HenryWTriff 6:5f76dd718dc3 73 float az;
HenryWTriff 6:5f76dd718dc3 74 float mx;
HenryWTriff 6:5f76dd718dc3 75 float my;
HenryWTriff 6:5f76dd718dc3 76 float mz;
HenryWTriff 5:2d9f3c36bcb9 77 };
HenryWTriff 5:2d9f3c36bcb9 78
HenryWTriff 11:7b12992156de 79 #endif
HenryWTriff 7:2ce6e90f6d47 80
HenryWTriff 11:7b12992156de 81 #ifndef ENUMS
HenryWTriff 11:7b12992156de 82 #define ENUMS
HenryWTriff 26:f1d3b7e31091 83 enum track {Small, Medium, Large}; //Track Names
HenryWTriff 26:f1d3b7e31091 84 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid}; //Car Names (Stupid is now the alien space ship)
HenryWTriff 26:f1d3b7e31091 85 enum sprites {Flag, Helicopter, People_Standing_1, People_Standing_2, People_Cheering};
HenryWTriff 5:2d9f3c36bcb9 86 #endif
HenryWTriff 5:2d9f3c36bcb9 87
HenryWTriff 22:9065c457a45d 88 /** Mechanics Class
HenryWTriff 22:9065c457a45d 89 * @brief Operates the game.
HenryWTriff 22:9065c457a45d 90 * @author Henry W Triff
HenryWTriff 22:9065c457a45d 91 * @date Mar, 2020
HenryWTriff 22:9065c457a45d 92 */
HenryWTriff 22:9065c457a45d 93
HenryWTriff 5:2d9f3c36bcb9 94 class Mechanics
HenryWTriff 5:2d9f3c36bcb9 95 {
HenryWTriff 6:5f76dd718dc3 96 public:
HenryWTriff 20:f8d7b04471b8 97
HenryWTriff 20:f8d7b04471b8 98 /** Constructor */
HenryWTriff 20:f8d7b04471b8 99 Mechanics();
HenryWTriff 20:f8d7b04471b8 100
HenryWTriff 20:f8d7b04471b8 101 /** Destructor */
HenryWTriff 20:f8d7b04471b8 102 ~Mechanics();
HenryWTriff 20:f8d7b04471b8 103
HenryWTriff 19:0245df53e919 104 /** Checks the current position of the player to see if they are in the next gate, returns either the current gate or increases the gate
HenryWTriff 19:0245df53e919 105 * @param gates[] The array containing all the gates (Square_2D)
HenryWTriff 19:0245df53e919 106 * @param number_of_gates Number of gates in the array (int)
HenryWTriff 19:0245df53e919 107 * @param position This is the current position of the player (Point_2D)
HenryWTriff 19:0245df53e919 108 * @param current_gate The current gate that has been driven over (int)
HenryWTriff 19:0245df53e919 109 * @return Current gate number (int)
HenryWTriff 19:0245df53e919 110 */
HenryWTriff 9:7b1093d3f03a 111 int Get_Gate(const Square_2D gates[], int number_of_gates, Point_2D position, int current_gate);
HenryWTriff 19:0245df53e919 112
HenryWTriff 19:0245df53e919 113 /** Checks the current position of the player to see if they are about to complete a lap
HenryWTriff 19:0245df53e919 114 * @param laps The current number of laps (int)
HenryWTriff 19:0245df53e919 115 * @param gates[] The array containing all the gates (Square_2D)
HenryWTriff 19:0245df53e919 116 * @param number_of_gates Number of gates in the array (int)
HenryWTriff 19:0245df53e919 117 * @param position This is the current position of the player (Point_2D)
HenryWTriff 19:0245df53e919 118 * @param current_gate The current gate that has been driven over (int)
HenryWTriff 19:0245df53e919 119 * @return The new current number of laps (int)
HenryWTriff 19:0245df53e919 120 */
HenryWTriff 9:7b1093d3f03a 121 int Get_Laps(int laps, const Square_2D gates[], int number_of_gates, Point_2D position, int current_gate);
HenryWTriff 7:2ce6e90f6d47 122
HenryWTriff 19:0245df53e919 123 /** Converts between the number of elapsed frames to time in min,sec,mili
HenryWTriff 19:0245df53e919 124 * @param game_fps The fps of the game (int)
HenryWTriff 19:0245df53e919 125 * @param number_of_frames The number of frames elapsed so far during the current race (int)
HenryWTriff 19:0245df53e919 126 * @return The time in minutes, seconds, miliseconds format (Time)
HenryWTriff 19:0245df53e919 127 */
HenryWTriff 6:5f76dd718dc3 128 Time Convert_To_Time(int game_fps, int number_of_frames);
HenryWTriff 19:0245df53e919 129
HenryWTriff 19:0245df53e919 130 /** Returns the current angle of rotation of the map using the previos rotation
HenryWTriff 19:0245df53e919 131 * @param angle The currrent angle of roatation of the map (int)
HenryWTriff 19:0245df53e919 132 * @param handling The maximum number of degrees of rotation for that given cars handling (int)
HenryWTriff 19:0245df53e919 133 * @param gyro_enabled Has gyroscope steering been enabled in settings (bool)
HenryWTriff 19:0245df53e919 134 * @param Gyro The gyroscope class object (object)
HenryWTriff 19:0245df53e919 135 * @param Device The gamepad class object (Device)
HenryWTriff 19:0245df53e919 136 * @return The new current angle of map rotation (int)
HenryWTriff 19:0245df53e919 137 */
HenryWTriff 7:2ce6e90f6d47 138 int Get_Angle(int angle, int handling, bool gyro_enabled, FXOS8700CQ &Gyro, Gamepad &Device);
HenryWTriff 7:2ce6e90f6d47 139
HenryWTriff 19:0245df53e919 140 /** Returns the current map translation usung the previos translation
HenryWTriff 19:0245df53e919 141 * @param in The currrent map translation(Point_2D)
HenryWTriff 19:0245df53e919 142 * @param angle The current angle of roataion of the map [Drection of travel] (float)
HenryWTriff 19:0245df53e919 143 * @param speed The current of the player (float)
HenryWTriff 19:0245df53e919 144 * @param *out_of_bounds_square The pointer for the array of square out of bounds areas(Square_2D)
HenryWTriff 19:0245df53e919 145 * @param *out_of_bounds_triangle The pointer for the array of triange out of bounds areas(Triangle_2D)
HenryWTriff 19:0245df53e919 146 * @param map_info The number of elements in each array above (Map_Data)
HenryWTriff 19:0245df53e919 147 * @param Device The gamepad class object (Device)
HenryWTriff 19:0245df53e919 148 * @return The new current translation (Point_2D)
HenryWTriff 19:0245df53e919 149 */
HenryWTriff 19:0245df53e919 150 Point_2D Get_Translation(
HenryWTriff 19:0245df53e919 151 Point_2D in,
HenryWTriff 19:0245df53e919 152 float angle,
HenryWTriff 19:0245df53e919 153 float speed,
HenryWTriff 19:0245df53e919 154 const Square_2D *out_of_bounds_square,
HenryWTriff 19:0245df53e919 155 const Triangle_2D *out_of_bounds_triangle,
HenryWTriff 19:0245df53e919 156 const Map_Data map_info,
HenryWTriff 19:0245df53e919 157 Gamepad &Device
HenryWTriff 19:0245df53e919 158 );
HenryWTriff 19:0245df53e919 159
HenryWTriff 19:0245df53e919 160 /** Returns the current speed using the previos speed
HenryWTriff 19:0245df53e919 161 * @param speed The currrent speed(float)
HenryWTriff 19:0245df53e919 162 * @param max_speed The maximum speed of the chosen car (float)
HenryWTriff 19:0245df53e919 163 * @param acceleration The acceleration of the chosen car (float)
HenryWTriff 19:0245df53e919 164 * @param deceleration The deceleration of the chosen car (float)
HenryWTriff 19:0245df53e919 165 * @param off_track_speed The maximum speed when off track of the chosen car (float)
HenryWTriff 19:0245df53e919 166 * @param position The current position of the car (Point_2D)
HenryWTriff 19:0245df53e919 167 * @param *offtrack_square The pointer for the array of square of off track areas(Square_2D)
HenryWTriff 19:0245df53e919 168 * @param *offtrack_triangle The pointer for the array of triange of off track areas(Triangle_2D)
HenryWTriff 19:0245df53e919 169 * @param *out_of_bounds_square The pointer for the array of square out of bounds areas(Square_2D)
HenryWTriff 19:0245df53e919 170 * @param *out_of_bounds_triangle The pointer for the array of triange out of bounds areas(Triangle_2D)
HenryWTriff 19:0245df53e919 171 * @param *plates The pointer for the boost plates array (Triangle_2D)
HenryWTriff 19:0245df53e919 172 * @param map_info The number of elements in each array above (Map_Data)
HenryWTriff 19:0245df53e919 173 * @param Device The gamepad class object (Device)
HenryWTriff 19:0245df53e919 174 * @return The new current speed (float)
HenryWTriff 19:0245df53e919 175 */
HenryWTriff 7:2ce6e90f6d47 176 float Get_Speed(
HenryWTriff 7:2ce6e90f6d47 177 float speed,
HenryWTriff 7:2ce6e90f6d47 178 float max_speed,
HenryWTriff 7:2ce6e90f6d47 179 float acceleration,
HenryWTriff 7:2ce6e90f6d47 180 float deceleration,
HenryWTriff 7:2ce6e90f6d47 181 float off_track_speed,
HenryWTriff 7:2ce6e90f6d47 182 Point_2D position,
HenryWTriff 9:7b1093d3f03a 183 const Square_2D *offtrack_square,
HenryWTriff 9:7b1093d3f03a 184 const Triangle_2D *offtrack_triangle,
HenryWTriff 9:7b1093d3f03a 185 const Square_2D *out_of_bounds_square,
HenryWTriff 9:7b1093d3f03a 186 const Triangle_2D *out_of_bounds_triangle,
HenryWTriff 9:7b1093d3f03a 187 const Triangle_2D *plates,
HenryWTriff 9:7b1093d3f03a 188 const Map_Data map_info,
HenryWTriff 7:2ce6e90f6d47 189 Gamepad &Device
HenryWTriff 7:2ce6e90f6d47 190 );
HenryWTriff 7:2ce6e90f6d47 191
HenryWTriff 19:0245df53e919 192 /** Returns the max speed for the chosen vehicle
HenryWTriff 19:0245df53e919 193 * @param car_model The chosen car model (int)
HenryWTriff 19:0245df53e919 194 * @return The maximum speed (float)
HenryWTriff 19:0245df53e919 195 */
HenryWTriff 7:2ce6e90f6d47 196 float Get_Max_Speed(int car_model);
HenryWTriff 19:0245df53e919 197
HenryWTriff 19:0245df53e919 198 /** Returns the acceleration for the chosen vehicle
HenryWTriff 19:0245df53e919 199 * @param car_model The chosen car model (int)
HenryWTriff 19:0245df53e919 200 * @return The acceleration (float)
HenryWTriff 19:0245df53e919 201 */
HenryWTriff 7:2ce6e90f6d47 202 float Get_Acceleration(int car_model);
HenryWTriff 19:0245df53e919 203
HenryWTriff 19:0245df53e919 204 /** Returns the decleration for the chosen vehicle
HenryWTriff 19:0245df53e919 205 * @param car_model The chosen car model (int)
HenryWTriff 19:0245df53e919 206 * @return The deceleration (float)
HenryWTriff 19:0245df53e919 207 */
HenryWTriff 7:2ce6e90f6d47 208 float Get_Deceleration(int car_model);
HenryWTriff 19:0245df53e919 209
HenryWTriff 19:0245df53e919 210 /** Returns the max speed when off road for the chosen vehicle
HenryWTriff 19:0245df53e919 211 * @param car_model The chosen car model (int)
HenryWTriff 19:0245df53e919 212 * @return The maximum speed when off road (float)
HenryWTriff 19:0245df53e919 213 */
HenryWTriff 7:2ce6e90f6d47 214 float Get_Off_Road_Speed(int car_model);
HenryWTriff 19:0245df53e919 215
HenryWTriff 19:0245df53e919 216 /** Returns the handling of the chosen vehicle
HenryWTriff 19:0245df53e919 217 * @param car_model The chosen car model (int)
HenryWTriff 19:0245df53e919 218 * @return The handling (float)
HenryWTriff 19:0245df53e919 219 */
HenryWTriff 7:2ce6e90f6d47 220 int Get_Handling(int car_model);
HenryWTriff 7:2ce6e90f6d47 221
HenryWTriff 6:5f76dd718dc3 222 private:
HenryWTriff 7:2ce6e90f6d47 223 //SPEED
HenryWTriff 9:7b1093d3f03a 224 bool Is_Offtrack(Point_2D position, const Square_2D offtrack_square[], const Triangle_2D offtrack_triangle[], const Map_Data map_info);
HenryWTriff 9:7b1093d3f03a 225 bool Is_Out_Of_Bounds(Point_2D position, const Square_2D offtrack_square[], const Triangle_2D offtrack_triangle[], const Map_Data map_info);
HenryWTriff 9:7b1093d3f03a 226 bool Is_Offtrack_Square(const Square_2D offtrack[], int size, Point_2D position);
HenryWTriff 9:7b1093d3f03a 227 bool Is_Offtrack_Triangle(const Triangle_2D offtrack[], int size, Point_2D position);
HenryWTriff 9:7b1093d3f03a 228 bool Is_Out_Of_Bounds_Square(const Square_2D out_of_bounds[], int size, Point_2D position);
HenryWTriff 9:7b1093d3f03a 229 bool Is_Out_Of_Bounds_Triangle(const Triangle_2D out_of_bounds[], int size, Point_2D position);
HenryWTriff 9:7b1093d3f03a 230 float Get_Boost_Speed(const Triangle_2D plates[], int number_of_plates, Point_2D position, float speed);
HenryWTriff 7:2ce6e90f6d47 231
HenryWTriff 5:2d9f3c36bcb9 232 };
HenryWTriff 5:2d9f3c36bcb9 233
HenryWTriff 5:2d9f3c36bcb9 234 #endif