Dependencies:   mbed

Committer:
HenryWTriff
Date:
Fri May 22 18:22:04 2020 +0000
Revision:
27:7e230a7891f8
Parent:
26:f1d3b7e31091
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HenryWTriff 2:d08b6a1eaf2b 1 #ifndef GRAPHICS_H
HenryWTriff 2:d08b6a1eaf2b 2 #define GRAPHICS_H
HenryWTriff 2:d08b6a1eaf2b 3
HenryWTriff 2:d08b6a1eaf2b 4 #include "mbed.h"
HenryWTriff 2:d08b6a1eaf2b 5 #include "Gamepad.h"
HenryWTriff 2:d08b6a1eaf2b 6 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 7 #include "FXOS8700CQ.h"
HenryWTriff 2:d08b6a1eaf2b 8 #include "Graphics.h"
HenryWTriff 5:2d9f3c36bcb9 9 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 10 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 11 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 12 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 13 #include <string>
HenryWTriff 3:ceed6d026b8b 14
HenryWTriff 3:ceed6d026b8b 15 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 16 #define STRUCTS
HenryWTriff 2:d08b6a1eaf2b 17
HenryWTriff 2:d08b6a1eaf2b 18 //STRUCTS
HenryWTriff 23:920faed43d55 19
HenryWTriff 23:920faed43d55 20 /** 2D point Struct */
HenryWTriff 2:d08b6a1eaf2b 21 struct Point_2D {
HenryWTriff 24:17dd5b23a646 22 float x; /**< X Coordinate */
HenryWTriff 24:17dd5b23a646 23 float y; /**< Y Coordinate */
HenryWTriff 2:d08b6a1eaf2b 24 };
HenryWTriff 23:920faed43d55 25 /** 2D line Struct */
HenryWTriff 2:d08b6a1eaf2b 26 struct Line_2D {
HenryWTriff 24:17dd5b23a646 27 Point_2D from; /**< Coordinates of 'from' point */
HenryWTriff 24:17dd5b23a646 28 Point_2D to; /**< Coordinates of 'to' point */
HenryWTriff 2:d08b6a1eaf2b 29 };
HenryWTriff 2:d08b6a1eaf2b 30
HenryWTriff 24:17dd5b23a646 31 /** 2D square Struct */
HenryWTriff 5:2d9f3c36bcb9 32 struct Square_2D {
HenryWTriff 24:17dd5b23a646 33 Point_2D TL; /**< Coordinates of Top Left point */
HenryWTriff 24:17dd5b23a646 34 Point_2D BR; /**< Coordinates of Bottom Right point */
HenryWTriff 5:2d9f3c36bcb9 35 };
HenryWTriff 24:17dd5b23a646 36
HenryWTriff 24:17dd5b23a646 37 /** 2D triangle Struct */
HenryWTriff 5:2d9f3c36bcb9 38 struct Triangle_2D {
HenryWTriff 24:17dd5b23a646 39 Point_2D TL; /**< Coordinates of Top Left point */
HenryWTriff 24:17dd5b23a646 40 Point_2D BR; /**< Coordinates of Bottom Right point */
HenryWTriff 24:17dd5b23a646 41 int Type; /**< The type of triangle (Direction of the hypotenuse */
HenryWTriff 5:2d9f3c36bcb9 42 };
HenryWTriff 5:2d9f3c36bcb9 43
HenryWTriff 26:f1d3b7e31091 44 struct Sprite_2D {
HenryWTriff 26:f1d3b7e31091 45 float x;
HenryWTriff 26:f1d3b7e31091 46 float y;
HenryWTriff 26:f1d3b7e31091 47 int type;
HenryWTriff 26:f1d3b7e31091 48 };
HenryWTriff 26:f1d3b7e31091 49
HenryWTriff 24:17dd5b23a646 50 /** 2D Map data Struct */
HenryWTriff 3:ceed6d026b8b 51 struct Map_Data {
HenryWTriff 24:17dd5b23a646 52 int number_of_track_lines; /**< Number of elements in the track lines array */
HenryWTriff 24:17dd5b23a646 53 int number_of_dotted_lines; /**< Number of elements in the dotted lines array */
HenryWTriff 26:f1d3b7e31091 54 int number_of_sprites; /**< Number of elements in the sprites array */
HenryWTriff 24:17dd5b23a646 55 int number_of_walls; /**< Number of elements in the walls array */
HenryWTriff 24:17dd5b23a646 56 int number_of_off_track_squares; /**< Number of elements in the off track squares array */
HenryWTriff 24:17dd5b23a646 57 int number_of_off_track_triangles; /**< Number of elements in the off track triangles array */
HenryWTriff 24:17dd5b23a646 58 int number_of_out_of_bounds_squares; /**< Number of elements in the out of bounds squares array */
HenryWTriff 24:17dd5b23a646 59 int number_of_out_of_bounds_triangles; /**< Number of elements in the out of bounds triangles array */
HenryWTriff 24:17dd5b23a646 60 int number_of_gates; /**< Number of elements in the gates array */
HenryWTriff 24:17dd5b23a646 61 int number_of_boost_plates; /**< Number of elements in the boost plates array */
HenryWTriff 6:5f76dd718dc3 62 };
HenryWTriff 6:5f76dd718dc3 63
HenryWTriff 24:17dd5b23a646 64 /** Time Struct */
HenryWTriff 6:5f76dd718dc3 65 struct Time {
HenryWTriff 24:17dd5b23a646 66 int mins; /**< Number of minutes */
HenryWTriff 24:17dd5b23a646 67 int secs; /**< Number of seconds */
HenryWTriff 24:17dd5b23a646 68 int milis; /**< Number of miliseconds */
HenryWTriff 6:5f76dd718dc3 69 };
HenryWTriff 6:5f76dd718dc3 70
HenryWTriff 24:17dd5b23a646 71 /** Gyro Data Struct */
HenryWTriff 6:5f76dd718dc3 72 struct Gyro_Data {
HenryWTriff 24:17dd5b23a646 73 float ax; /**< Accelerometer X */
HenryWTriff 24:17dd5b23a646 74 float ay; /**< Accelerometer Y */
HenryWTriff 24:17dd5b23a646 75 float az; /**< Accelerometer Z */
HenryWTriff 24:17dd5b23a646 76 float mx; /**< Magnetometer X */
HenryWTriff 24:17dd5b23a646 77 float my; /**< Magnetometer Y */
HenryWTriff 24:17dd5b23a646 78 float mz; /**< Magnetometer Z */
HenryWTriff 3:ceed6d026b8b 79 };
HenryWTriff 3:ceed6d026b8b 80
HenryWTriff 3:ceed6d026b8b 81 #endif
HenryWTriff 3:ceed6d026b8b 82
HenryWTriff 26:f1d3b7e31091 83 #ifndef ENUMS
HenryWTriff 26:f1d3b7e31091 84 #define ENUMS
HenryWTriff 26:f1d3b7e31091 85 enum track {Small, Medium, Large}; //Track Names
HenryWTriff 26:f1d3b7e31091 86 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid}; //Car Names (Stupid is now the alien space ship)
HenryWTriff 26:f1d3b7e31091 87 enum sprites {Flag, Helicopter, People_Standing_1, People_Standing_2, People_Cheering};
HenryWTriff 26:f1d3b7e31091 88 #endif
HenryWTriff 26:f1d3b7e31091 89
HenryWTriff 22:9065c457a45d 90 /** Graphics Class
HenryWTriff 22:9065c457a45d 91 * @brief Creates all game graphics.
HenryWTriff 22:9065c457a45d 92 * @author Henry W Triff
HenryWTriff 22:9065c457a45d 93 * @date Mar, 2020
HenryWTriff 22:9065c457a45d 94 */
HenryWTriff 22:9065c457a45d 95
HenryWTriff 2:d08b6a1eaf2b 96 class Graphics
HenryWTriff 2:d08b6a1eaf2b 97 {
HenryWTriff 5:2d9f3c36bcb9 98 public:
HenryWTriff 17:4c5f25d5c4d5 99
HenryWTriff 17:4c5f25d5c4d5 100 /** Constructor */
HenryWTriff 17:4c5f25d5c4d5 101 Graphics();
HenryWTriff 17:4c5f25d5c4d5 102
HenryWTriff 17:4c5f25d5c4d5 103 /** Destructor */
HenryWTriff 17:4c5f25d5c4d5 104 ~Graphics();
HenryWTriff 17:4c5f25d5c4d5 105
HenryWTriff 18:5fcb0514fb70 106 /** Changes the contrast of the LCD using the left potentiometer
HenryWTriff 18:5fcb0514fb70 107 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 108 * @param Device The object for the gamepad class (object)
HenryWTriff 18:5fcb0514fb70 109 */
HenryWTriff 2:d08b6a1eaf2b 110 void Change_Contrast(N5110 &LCD, Gamepad &Device);
HenryWTriff 18:5fcb0514fb70 111
HenryWTriff 18:5fcb0514fb70 112
HenryWTriff 18:5fcb0514fb70 113 /** Draws all graphics required for the game (excluding lap counter, time, start count down and finishing trophy)
HenryWTriff 18:5fcb0514fb70 114 * @param translation The translation of the map. See Mechanics class. (Point_2D)
HenryWTriff 18:5fcb0514fb70 115 * @param angle The rotation of the map. See Mechanics class. (int)
HenryWTriff 18:5fcb0514fb70 116 * @param squish The y-axis squish of the map to get the 3D effect. (float)
HenryWTriff 25:31761087a83f 117 * @param horizon_factor This is the squishing on x-axis points depending on their y-position to make it look more 3D
HenryWTriff 18:5fcb0514fb70 118 * @param *Track_Lines Pointer for the array for track lines. (Line_2D)
HenryWTriff 18:5fcb0514fb70 119 * @param *Track_Dotted_Lines Pointer for the array for dotted lines. (Line_2D)
HenryWTriff 18:5fcb0514fb70 120 * @param *Track_Walls Pointer for the array for walls. (Line_2D)
HenryWTriff 26:f1d3b7e31091 121 * @param *Track_Sprites Pointer for the array for sprite positions. (Sprite_2D)
HenryWTriff 18:5fcb0514fb70 122 * @param *Track_Boost_Plates Pointer for the array for boost plate positions. (Triangle_2D)
HenryWTriff 18:5fcb0514fb70 123 * @param map_info Struct containing the number of elements in each array above (Map_Data)
HenryWTriff 18:5fcb0514fb70 124 * @param car_type The car selected. (int)
HenryWTriff 18:5fcb0514fb70 125 * @param ghost_position The current position of the ghost. (Point_2D)
HenryWTriff 18:5fcb0514fb70 126 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 127 */
HenryWTriff 5:2d9f3c36bcb9 128 void Draw_Map(
HenryWTriff 5:2d9f3c36bcb9 129 Point_2D translation,
HenryWTriff 6:5f76dd718dc3 130 int angle,
HenryWTriff 6:5f76dd718dc3 131 float squish,
HenryWTriff 25:31761087a83f 132 float horizon_factor,
HenryWTriff 5:2d9f3c36bcb9 133 Line_2D *Track_Lines,
HenryWTriff 5:2d9f3c36bcb9 134 Line_2D *Track_Dotted_Lines,
HenryWTriff 5:2d9f3c36bcb9 135 Line_2D *Track_Walls,
HenryWTriff 26:f1d3b7e31091 136 Sprite_2D *Track_Sprites,
HenryWTriff 6:5f76dd718dc3 137 Triangle_2D *Track_Boost_Plates,
HenryWTriff 5:2d9f3c36bcb9 138 Map_Data map_info,
HenryWTriff 7:2ce6e90f6d47 139 int car_type,
HenryWTriff 6:5f76dd718dc3 140 Point_2D ghost_position,
HenryWTriff 5:2d9f3c36bcb9 141 N5110 &LCD
HenryWTriff 5:2d9f3c36bcb9 142 );
HenryWTriff 18:5fcb0514fb70 143
HenryWTriff 18:5fcb0514fb70 144 /** Draws the current lap count
HenryWTriff 18:5fcb0514fb70 145 * @param laps The current lap count (int)
HenryWTriff 18:5fcb0514fb70 146 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 147 */
HenryWTriff 5:2d9f3c36bcb9 148 void Draw_Laps(int laps, N5110 &LCD);
HenryWTriff 18:5fcb0514fb70 149
HenryWTriff 18:5fcb0514fb70 150 /** Draws the race time
HenryWTriff 18:5fcb0514fb70 151 * @param finised The current lap count (bool)
HenryWTriff 18:5fcb0514fb70 152 * @param time The time elapsed from the race so far (Time)
HenryWTriff 18:5fcb0514fb70 153 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 154 */
HenryWTriff 6:5f76dd718dc3 155 void Draw_Time(bool finished, Time time, N5110 &LCD);
HenryWTriff 18:5fcb0514fb70 156
HenryWTriff 18:5fcb0514fb70 157 /** Draws the count down numbers before the race
HenryWTriff 18:5fcb0514fb70 158 * @param state The current count down number (int)
HenryWTriff 18:5fcb0514fb70 159 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 160 */
HenryWTriff 6:5f76dd718dc3 161 void Start_Sequence(int state, N5110 &LCD);
HenryWTriff 18:5fcb0514fb70 162
HenryWTriff 18:5fcb0514fb70 163 /** Draws the finishing trophy
HenryWTriff 18:5fcb0514fb70 164 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 165 */
HenryWTriff 6:5f76dd718dc3 166 void Finish(N5110 &LCD);
HenryWTriff 18:5fcb0514fb70 167
HenryWTriff 18:5fcb0514fb70 168 /** Draws the game logo on startup
HenryWTriff 18:5fcb0514fb70 169 * @param LCD The object for the N5110 class (object)
HenryWTriff 18:5fcb0514fb70 170 */
HenryWTriff 10:29126a41b1da 171 void Draw_Logo(N5110 &LCD);
HenryWTriff 10:29126a41b1da 172
HenryWTriff 5:2d9f3c36bcb9 173
HenryWTriff 5:2d9f3c36bcb9 174 private:
HenryWTriff 2:d08b6a1eaf2b 175 //TRANSFORM
HenryWTriff 2:d08b6a1eaf2b 176 Point_2D Rotate_Point(Point_2D point, float angle);
HenryWTriff 2:d08b6a1eaf2b 177 Point_2D Translate_Point(Point_2D point, int translate_x, int translate_y);
HenryWTriff 2:d08b6a1eaf2b 178 Point_2D Squish_Point(Point_2D point, float squish);
HenryWTriff 25:31761087a83f 179 Point_2D Graphics::Horizon_Point(Point_2D point, float horizon_factor);
HenryWTriff 2:d08b6a1eaf2b 180 //MATH
HenryWTriff 2:d08b6a1eaf2b 181 int Round(float number);
HenryWTriff 2:d08b6a1eaf2b 182 float Gradient(Point_2D from, Point_2D to);
HenryWTriff 2:d08b6a1eaf2b 183 bool Gradient_Check_Infinate(Point_2D from, Point_2D to);
HenryWTriff 2:d08b6a1eaf2b 184 //DRAW
HenryWTriff 2:d08b6a1eaf2b 185 void Graphics_Draw_Line(Point_2D from, Point_2D to, bool solid, N5110 &LCD);
HenryWTriff 5:2d9f3c36bcb9 186 void Graphics_Draw_Wall(Point_2D from, Point_2D to, int height, N5110 &LCD);
HenryWTriff 6:5f76dd718dc3 187 void Graphics_Draw_Boost_Plate(Triangle_2D boost_plate, Point_2D translation, int angle, float squish, N5110 &LCD);
HenryWTriff 10:29126a41b1da 188 void Graphics_Draw_Sprite(Point_2D point, int x_size, int y_size, int *sprite, N5110 &LCD);
HenryWTriff 2:d08b6a1eaf2b 189 };
HenryWTriff 2:d08b6a1eaf2b 190
HenryWTriff 2:d08b6a1eaf2b 191 #endif