Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Graphics.h
00001 #ifndef GRAPHICS_H 00002 #define GRAPHICS_H 00003 00004 #include "mbed.h" 00005 #include "Gamepad.h" 00006 #include "N5110.h" 00007 #include "FXOS8700CQ.h" 00008 #include "Graphics.h" 00009 #include "Mechanics.h" 00010 #include "Menu.h" 00011 #include "LEDs.h" 00012 #include "Ghost.h" 00013 #include <string> 00014 00015 #ifndef STRUCTS 00016 #define STRUCTS 00017 00018 //STRUCTS 00019 00020 /** 2D point Struct */ 00021 struct Point_2D { 00022 float x; /**< X Coordinate */ 00023 float y; /**< Y Coordinate */ 00024 }; 00025 /** 2D line Struct */ 00026 struct Line_2D { 00027 Point_2D from; /**< Coordinates of 'from' point */ 00028 Point_2D to; /**< Coordinates of 'to' point */ 00029 }; 00030 00031 /** 2D square Struct */ 00032 struct Square_2D { 00033 Point_2D TL; /**< Coordinates of Top Left point */ 00034 Point_2D BR; /**< Coordinates of Bottom Right point */ 00035 }; 00036 00037 /** 2D triangle Struct */ 00038 struct Triangle_2D { 00039 Point_2D TL; /**< Coordinates of Top Left point */ 00040 Point_2D BR; /**< Coordinates of Bottom Right point */ 00041 int Type; /**< The type of triangle (Direction of the hypotenuse */ 00042 }; 00043 00044 struct Sprite_2D { 00045 float x; 00046 float y; 00047 int type; 00048 }; 00049 00050 /** 2D Map data Struct */ 00051 struct Map_Data { 00052 int number_of_track_lines; /**< Number of elements in the track lines array */ 00053 int number_of_dotted_lines; /**< Number of elements in the dotted lines array */ 00054 int number_of_sprites; /**< Number of elements in the sprites array */ 00055 int number_of_walls; /**< Number of elements in the walls array */ 00056 int number_of_off_track_squares; /**< Number of elements in the off track squares array */ 00057 int number_of_off_track_triangles; /**< Number of elements in the off track triangles array */ 00058 int number_of_out_of_bounds_squares; /**< Number of elements in the out of bounds squares array */ 00059 int number_of_out_of_bounds_triangles; /**< Number of elements in the out of bounds triangles array */ 00060 int number_of_gates; /**< Number of elements in the gates array */ 00061 int number_of_boost_plates; /**< Number of elements in the boost plates array */ 00062 }; 00063 00064 /** Time Struct */ 00065 struct Time { 00066 int mins; /**< Number of minutes */ 00067 int secs; /**< Number of seconds */ 00068 int milis; /**< Number of miliseconds */ 00069 }; 00070 00071 /** Gyro Data Struct */ 00072 struct Gyro_Data { 00073 float ax; /**< Accelerometer X */ 00074 float ay; /**< Accelerometer Y */ 00075 float az; /**< Accelerometer Z */ 00076 float mx; /**< Magnetometer X */ 00077 float my; /**< Magnetometer Y */ 00078 float mz; /**< Magnetometer Z */ 00079 }; 00080 00081 #endif 00082 00083 #ifndef ENUMS 00084 #define ENUMS 00085 enum track {Small, Medium, Large}; //Track Names 00086 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid}; //Car Names (Stupid is now the alien space ship) 00087 enum sprites {Flag, Helicopter, People_Standing_1, People_Standing_2, People_Cheering}; 00088 #endif 00089 00090 /** Graphics Class 00091 * @brief Creates all game graphics. 00092 * @author Henry W Triff 00093 * @date Mar, 2020 00094 */ 00095 00096 class Graphics 00097 { 00098 public: 00099 00100 /** Constructor */ 00101 Graphics(); 00102 00103 /** Destructor */ 00104 ~Graphics(); 00105 00106 /** Changes the contrast of the LCD using the left potentiometer 00107 * @param LCD The object for the N5110 class (object) 00108 * @param Device The object for the gamepad class (object) 00109 */ 00110 void Change_Contrast(N5110 &LCD, Gamepad &Device); 00111 00112 00113 /** Draws all graphics required for the game (excluding lap counter, time, start count down and finishing trophy) 00114 * @param translation The translation of the map. See Mechanics class. (Point_2D) 00115 * @param angle The rotation of the map. See Mechanics class. (int) 00116 * @param squish The y-axis squish of the map to get the 3D effect. (float) 00117 * @param horizon_factor This is the squishing on x-axis points depending on their y-position to make it look more 3D 00118 * @param *Track_Lines Pointer for the array for track lines. (Line_2D) 00119 * @param *Track_Dotted_Lines Pointer for the array for dotted lines. (Line_2D) 00120 * @param *Track_Walls Pointer for the array for walls. (Line_2D) 00121 * @param *Track_Sprites Pointer for the array for sprite positions. (Sprite_2D) 00122 * @param *Track_Boost_Plates Pointer for the array for boost plate positions. (Triangle_2D) 00123 * @param map_info Struct containing the number of elements in each array above (Map_Data) 00124 * @param car_type The car selected. (int) 00125 * @param ghost_position The current position of the ghost. (Point_2D) 00126 * @param LCD The object for the N5110 class (object) 00127 */ 00128 void Draw_Map( 00129 Point_2D translation, 00130 int angle, 00131 float squish, 00132 float horizon_factor, 00133 Line_2D *Track_Lines, 00134 Line_2D *Track_Dotted_Lines, 00135 Line_2D *Track_Walls, 00136 Sprite_2D *Track_Sprites, 00137 Triangle_2D *Track_Boost_Plates, 00138 Map_Data map_info, 00139 int car_type, 00140 Point_2D ghost_position, 00141 N5110 &LCD 00142 ); 00143 00144 /** Draws the current lap count 00145 * @param laps The current lap count (int) 00146 * @param LCD The object for the N5110 class (object) 00147 */ 00148 void Draw_Laps(int laps, N5110 &LCD); 00149 00150 /** Draws the race time 00151 * @param finised The current lap count (bool) 00152 * @param time The time elapsed from the race so far (Time) 00153 * @param LCD The object for the N5110 class (object) 00154 */ 00155 void Draw_Time(bool finished, Time time, N5110 &LCD); 00156 00157 /** Draws the count down numbers before the race 00158 * @param state The current count down number (int) 00159 * @param LCD The object for the N5110 class (object) 00160 */ 00161 void Start_Sequence(int state, N5110 &LCD); 00162 00163 /** Draws the finishing trophy 00164 * @param LCD The object for the N5110 class (object) 00165 */ 00166 void Finish(N5110 &LCD); 00167 00168 /** Draws the game logo on startup 00169 * @param LCD The object for the N5110 class (object) 00170 */ 00171 void Draw_Logo(N5110 &LCD); 00172 00173 00174 private: 00175 //TRANSFORM 00176 Point_2D Rotate_Point(Point_2D point, float angle); 00177 Point_2D Translate_Point(Point_2D point, int translate_x, int translate_y); 00178 Point_2D Squish_Point(Point_2D point, float squish); 00179 Point_2D Graphics::Horizon_Point(Point_2D point, float horizon_factor); 00180 //MATH 00181 int Round(float number); 00182 float Gradient(Point_2D from, Point_2D to); 00183 bool Gradient_Check_Infinate(Point_2D from, Point_2D to); 00184 //DRAW 00185 void Graphics_Draw_Line(Point_2D from, Point_2D to, bool solid, N5110 &LCD); 00186 void Graphics_Draw_Wall(Point_2D from, Point_2D to, int height, N5110 &LCD); 00187 void Graphics_Draw_Boost_Plate(Triangle_2D boost_plate, Point_2D translation, int angle, float squish, N5110 &LCD); 00188 void Graphics_Draw_Sprite(Point_2D point, int x_size, int y_size, int *sprite, N5110 &LCD); 00189 }; 00190 00191 #endif
Generated on Wed Jul 20 2022 17:42:24 by
1.7.2