Henry Triff
/
ELEC2645_Project_el18ht
Graphics/Graphics.h@27:7e230a7891f8, 2020-05-22 (annotated)
- 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?
User | Revision | Line number | New 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 |