Game

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 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
HenryWTriff 1:8c335af04679 7 Name: Henry Triff
HenryWTriff 1:8c335af04679 8 Username: el18ht
HenryWTriff 1:8c335af04679 9 Student ID Number: 201224295
HenryWTriff 1:8c335af04679 10 Date: 10/02/2020
HenryWTriff 11:7b12992156de 11
HenryWTriff 26:f1d3b7e31091 12 DIAGNOSTICS AND TEST FUNCTIONS
HenryWTriff 26:f1d3b7e31091 13 > I created a separate program that allows me to test functions of this code and to test and view the maps that i have
HenryWTriff 26:f1d3b7e31091 14 created. The code is 'quick and dirty' but works well. the controls are a little confusing. Stick moves the view of the track
HenryWTriff 26:f1d3b7e31091 15 around and X and A zoom in and out. Pots are used to show/hide different aspects of the map.
HenryWTriff 26:f1d3b7e31091 16 > It can be found here: https://os.mbed.com//users/HenryWTriff/code/ELEC2645_Project_el18ht_Map_Viewer/
eencae 0:b7f1f47bb26a 17 */
eencae 0:b7f1f47bb26a 18
HenryWTriff 25:31761087a83f 19 //DEBUG DEFINITIONS
HenryWTriff 25:31761087a83f 20 //#define DEBUG
HenryWTriff 25:31761087a83f 21
HenryWTriff 2:d08b6a1eaf2b 22 //LIBRARIES
eencae 0:b7f1f47bb26a 23 #include "mbed.h"
eencae 0:b7f1f47bb26a 24 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 25 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 26 #include "FXOS8700CQ.h"
HenryWTriff 10:29126a41b1da 27 #include "SDFileSystem.h"
HenryWTriff 2:d08b6a1eaf2b 28 #include "Graphics.h"
HenryWTriff 6:5f76dd718dc3 29 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 30 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 31 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 32 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 33 #include <string>
eencae 0:b7f1f47bb26a 34
HenryWTriff 3:ceed6d026b8b 35 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 36 #define STRUCTS
HenryWTriff 3:ceed6d026b8b 37
HenryWTriff 3:ceed6d026b8b 38 //STRUCTS
HenryWTriff 3:ceed6d026b8b 39 struct Point_2D {
HenryWTriff 25:31761087a83f 40 float x;
HenryWTriff 3:ceed6d026b8b 41 float y;
HenryWTriff 3:ceed6d026b8b 42 };
HenryWTriff 23:920faed43d55 43
HenryWTriff 3:ceed6d026b8b 44 struct Line_2D {
HenryWTriff 3:ceed6d026b8b 45 Point_2D from;
HenryWTriff 3:ceed6d026b8b 46 Point_2D to;
HenryWTriff 3:ceed6d026b8b 47 };
HenryWTriff 3:ceed6d026b8b 48
HenryWTriff 5:2d9f3c36bcb9 49 struct Square_2D {
HenryWTriff 5:2d9f3c36bcb9 50 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 51 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 52 };
HenryWTriff 5:2d9f3c36bcb9 53 struct Triangle_2D {
HenryWTriff 5:2d9f3c36bcb9 54 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 55 Point_2D BR;
HenryWTriff 11:7b12992156de 56 int Type; //The direction of the hypoentuse on the right angled triangle ( 1 = Top right, 2 = Bottom right, 3 = Bottom left, 4 = Top Left )
HenryWTriff 5:2d9f3c36bcb9 57 };
HenryWTriff 5:2d9f3c36bcb9 58
HenryWTriff 26:f1d3b7e31091 59 struct Sprite_2D {
HenryWTriff 26:f1d3b7e31091 60 float x;
HenryWTriff 26:f1d3b7e31091 61 float y;
HenryWTriff 26:f1d3b7e31091 62 int type;
HenryWTriff 26:f1d3b7e31091 63 };
HenryWTriff 26:f1d3b7e31091 64
HenryWTriff 3:ceed6d026b8b 65 struct Map_Data {
HenryWTriff 11:7b12992156de 66 //Information about the number of elements in each array
HenryWTriff 3:ceed6d026b8b 67 int number_of_track_lines;
HenryWTriff 3:ceed6d026b8b 68 int number_of_dotted_lines;
HenryWTriff 26:f1d3b7e31091 69 int number_of_sprites;
HenryWTriff 5:2d9f3c36bcb9 70 int number_of_walls;
HenryWTriff 5:2d9f3c36bcb9 71 int number_of_off_track_squares;
HenryWTriff 5:2d9f3c36bcb9 72 int number_of_off_track_triangles;
HenryWTriff 5:2d9f3c36bcb9 73 int number_of_out_of_bounds_squares;
HenryWTriff 5:2d9f3c36bcb9 74 int number_of_out_of_bounds_triangles;
HenryWTriff 5:2d9f3c36bcb9 75 int number_of_gates;
HenryWTriff 6:5f76dd718dc3 76 int number_of_boost_plates;
HenryWTriff 6:5f76dd718dc3 77 };
HenryWTriff 6:5f76dd718dc3 78
HenryWTriff 6:5f76dd718dc3 79 struct Time {
HenryWTriff 6:5f76dd718dc3 80 int mins;
HenryWTriff 6:5f76dd718dc3 81 int secs;
HenryWTriff 6:5f76dd718dc3 82 int milis;
HenryWTriff 6:5f76dd718dc3 83 };
HenryWTriff 6:5f76dd718dc3 84
HenryWTriff 6:5f76dd718dc3 85 struct Gyro_Data {
HenryWTriff 6:5f76dd718dc3 86 float ax;
HenryWTriff 6:5f76dd718dc3 87 float ay;
HenryWTriff 6:5f76dd718dc3 88 float az;
HenryWTriff 6:5f76dd718dc3 89 float mx;
HenryWTriff 6:5f76dd718dc3 90 float my;
HenryWTriff 6:5f76dd718dc3 91 float mz;
HenryWTriff 3:ceed6d026b8b 92 };
HenryWTriff 3:ceed6d026b8b 93
HenryWTriff 3:ceed6d026b8b 94 #endif
eencae 0:b7f1f47bb26a 95
HenryWTriff 2:d08b6a1eaf2b 96 //GLOBAL VARIABLES
HenryWTriff 10:29126a41b1da 97 #ifndef ENUMS
HenryWTriff 10:29126a41b1da 98 #define ENUMS
HenryWTriff 11:7b12992156de 99 enum track {Small, Medium, Large}; //Track Names
HenryWTriff 11:7b12992156de 100 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid}; //Car Names (Stupid is now the alien space ship)
HenryWTriff 26:f1d3b7e31091 101 enum sprites {Flag, Helicopter, People_Standing_1, People_Standing_2, People_Cheering};
HenryWTriff 10:29126a41b1da 102 #endif
HenryWTriff 7:2ce6e90f6d47 103
HenryWTriff 26:f1d3b7e31091 104 //OBJECTS
HenryWTriff 26:f1d3b7e31091 105 Gamepad Device; //Controller
HenryWTriff 26:f1d3b7e31091 106 N5110 LCD; //LCD
HenryWTriff 26:f1d3b7e31091 107 FXOS8700CQ Gyro(I2C_SDA,I2C_SCL); //Gyroscope
HenryWTriff 26:f1d3b7e31091 108 SDFileSystem SD(PTE3, PTE1, PTE2, PTE4, "sd"); //SD card (For recording ghost data)
HenryWTriff 26:f1d3b7e31091 109 Graphics Graphics; //Graphics Class
HenryWTriff 26:f1d3b7e31091 110 Mechanics Mechanics; //Mechanics Class
HenryWTriff 26:f1d3b7e31091 111 Menu Menu; //Menu Class
HenryWTriff 26:f1d3b7e31091 112 LEDs LEDs; //LEDs Class
HenryWTriff 26:f1d3b7e31091 113 Ghost Ghost; //Ghost Class (For racing against a previos version of you)
HenryWTriff 26:f1d3b7e31091 114
HenryWTriff 26:f1d3b7e31091 115 #include "Maps.h"
HenryWTriff 26:f1d3b7e31091 116
HenryWTriff 2:d08b6a1eaf2b 117 //Transform
HenryWTriff 11:7b12992156de 118 int angle = 0; //The angle of roation of the track
HenryWTriff 26:f1d3b7e31091 119 Point_2D translation = {0,0}; //The translation of the track
HenryWTriff 26:f1d3b7e31091 120 float horizon_factor = 0.02; //The translation of the track
HenryWTriff 11:7b12992156de 121 float squish = 0.15; //The amount of squish of the track
HenryWTriff 2:d08b6a1eaf2b 122
HenryWTriff 3:ceed6d026b8b 123 //Vehicle parameters
HenryWTriff 11:7b12992156de 124 float speed; //Current speed (Rate of change of translation [see above] )
HenryWTriff 11:7b12992156de 125 float max_speed; //Max speed the car can go
HenryWTriff 11:7b12992156de 126 int handling; //The maximum rate of change of angle of the track per frame
HenryWTriff 11:7b12992156de 127 float off_track_speed; //Maximum off track speed
HenryWTriff 7:2ce6e90f6d47 128 float acceleration;
HenryWTriff 7:2ce6e90f6d47 129 float deceleration;
HenryWTriff 11:7b12992156de 130 int car_model = Basic;
HenryWTriff 3:ceed6d026b8b 131
HenryWTriff 5:2d9f3c36bcb9 132 //Mechanics
HenryWTriff 11:7b12992156de 133 int lap_gate = 0; //The initial lap gate
HenryWTriff 11:7b12992156de 134 int laps = 1; //The current lap number
HenryWTriff 11:7b12992156de 135 int number_of_laps = 3; //The number of laps
HenryWTriff 11:7b12992156de 136 int race_time = 0; //The number of frames elapsed so far since the start of the race
HenryWTriff 9:7b1093d3f03a 137 bool ghost_enable = false;
HenryWTriff 5:2d9f3c36bcb9 138
HenryWTriff 11:7b12992156de 139 //Game Settings
HenryWTriff 26:f1d3b7e31091 140 int game_fps = 60; //Frame rate
HenryWTriff 11:7b12992156de 141 bool leds = true; //Turning the LEDs on / off (Useful for people with epilepsy as they flash quickly)
HenryWTriff 11:7b12992156de 142 bool gyro_enabled = false; //Gyro steering option
eencae 0:b7f1f47bb26a 143
eencae 0:b7f1f47bb26a 144 int main()
eencae 0:b7f1f47bb26a 145 {
HenryWTriff 25:31761087a83f 146 #ifdef DEBUG
HenryWTriff 25:31761087a83f 147 printf("INITIALISATION\n");
HenryWTriff 25:31761087a83f 148 #endif
HenryWTriff 25:31761087a83f 149
HenryWTriff 25:31761087a83f 150 LCD.init(); //Initialising the LCD
HenryWTriff 11:7b12992156de 151 Device.init(); //Initialising the Gamepad
HenryWTriff 11:7b12992156de 152 Gyro.init(); //Initialising the gyro
HenryWTriff 11:7b12992156de 153 Graphics.Change_Contrast(LCD,Device); //Adust Contrast to the amount on the pot
HenryWTriff 6:5f76dd718dc3 154
HenryWTriff 25:31761087a83f 155 #ifdef DEBUG
HenryWTriff 25:31761087a83f 156 printf("LOGO\n");
HenryWTriff 25:31761087a83f 157 #endif
HenryWTriff 25:31761087a83f 158
HenryWTriff 10:29126a41b1da 159 //START LOGO
HenryWTriff 10:29126a41b1da 160 Graphics.Draw_Logo(LCD);
HenryWTriff 10:29126a41b1da 161
HenryWTriff 6:5f76dd718dc3 162 //MENU
HenryWTriff 25:31761087a83f 163 #ifdef DEBUG
HenryWTriff 25:31761087a83f 164 printf("MENU\n");
HenryWTriff 25:31761087a83f 165 #endif
HenryWTriff 7:2ce6e90f6d47 166 do {
HenryWTriff 11:7b12992156de 167 while(Menu.Main_Menu(LCD, Device) == true) {
HenryWTriff 25:31761087a83f 168 Ghost.SD_init(SD,LCD); //Format SD Card
HenryWTriff 7:2ce6e90f6d47 169 }
HenryWTriff 11:7b12992156de 170 } while(Menu.Game_Setup(LCD, Device) == false);
HenryWTriff 7:2ce6e90f6d47 171
HenryWTriff 11:7b12992156de 172 //RETRIEVING STATIC VARIABLES FROM MENU CLASS
HenryWTriff 11:7b12992156de 173 car_model = Menu.Get_Car();
HenryWTriff 11:7b12992156de 174 number_of_laps = Menu.Get_Laps();
HenryWTriff 11:7b12992156de 175 ghost_enable = Menu.Get_Mode();
HenryWTriff 11:7b12992156de 176 leds = Menu.Get_Setting_LED();
HenryWTriff 11:7b12992156de 177 gyro_enabled = Menu.Get_Setting_Gyro();
HenryWTriff 7:2ce6e90f6d47 178
HenryWTriff 7:2ce6e90f6d47 179 //CAR PARAMETERS SETUP
HenryWTriff 7:2ce6e90f6d47 180 max_speed = Mechanics.Get_Max_Speed(car_model);
HenryWTriff 7:2ce6e90f6d47 181 acceleration = Mechanics.Get_Acceleration(car_model);
HenryWTriff 7:2ce6e90f6d47 182 deceleration = Mechanics.Get_Deceleration(car_model);
HenryWTriff 7:2ce6e90f6d47 183 off_track_speed = Mechanics.Get_Off_Road_Speed(car_model);
HenryWTriff 7:2ce6e90f6d47 184 handling = Mechanics.Get_Handling(car_model);
HenryWTriff 25:31761087a83f 185
HenryWTriff 25:31761087a83f 186 #ifdef DEBUG
HenryWTriff 25:31761087a83f 187 printf("GAME RUN\n");
HenryWTriff 25:31761087a83f 188 printf("MAP: %i LAPS: %i CAR: %i\n",Menu.Get_Map(),number_of_laps, car_model);
HenryWTriff 25:31761087a83f 189 #endif
HenryWTriff 25:31761087a83f 190
HenryWTriff 11:7b12992156de 191 if(Menu.Get_Map() == Small) {
HenryWTriff 8:4503c92acaf6 192
HenryWTriff 11:7b12992156de 193 while(1) { //Main Game While loop
HenryWTriff 11:7b12992156de 194 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 25:31761087a83f 195 #ifdef DEBUG
HenryWTriff 25:31761087a83f 196 printf("READING GHOST DATA\n");
HenryWTriff 25:31761087a83f 197 #endif
HenryWTriff 11:7b12992156de 198 Ghost.SD_Read(Small, car_model, SD); //Copy the ghost data from the SD card over to the flash memory (Make take a second)
HenryWTriff 10:29126a41b1da 199 }
HenryWTriff 8:4503c92acaf6 200
HenryWTriff 25:31761087a83f 201 #ifdef DEBUG
HenryWTriff 25:31761087a83f 202 printf("COUNTDOWN\n");
HenryWTriff 25:31761087a83f 203 #endif
HenryWTriff 8:4503c92acaf6 204 //COUNTDOWN
HenryWTriff 11:7b12992156de 205 for(int count = 3; count >= 0; count--) { //Loop for the countdown
HenryWTriff 11:7b12992156de 206 //Draw the map and the count down numbers
HenryWTriff 25:31761087a83f 207 LCD.clear();
HenryWTriff 8:4503c92acaf6 208 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 209 translation,
HenryWTriff 8:4503c92acaf6 210 angle,
HenryWTriff 8:4503c92acaf6 211 squish,
HenryWTriff 25:31761087a83f 212 horizon_factor,
HenryWTriff 8:4503c92acaf6 213 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 8:4503c92acaf6 214 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 215 (Line_2D *)Map_1_Walls,
HenryWTriff 26:f1d3b7e31091 216 (Sprite_2D *)Map_1_Sprites,
HenryWTriff 8:4503c92acaf6 217 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 8:4503c92acaf6 218 Map_1,
HenryWTriff 8:4503c92acaf6 219 car_model,
HenryWTriff 9:7b1093d3f03a 220 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 221 LCD
HenryWTriff 8:4503c92acaf6 222 );
HenryWTriff 8:4503c92acaf6 223 Graphics.Start_Sequence(count, LCD);
HenryWTriff 8:4503c92acaf6 224 LCD.refresh();
HenryWTriff 11:7b12992156de 225 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 8:4503c92acaf6 226 wait(1);
HenryWTriff 8:4503c92acaf6 227 }
HenryWTriff 8:4503c92acaf6 228 LEDs.Clear(Device);
HenryWTriff 8:4503c92acaf6 229
HenryWTriff 25:31761087a83f 230 #ifdef DEBUG
HenryWTriff 25:31761087a83f 231 printf("RACE START\n");
HenryWTriff 25:31761087a83f 232 #endif
HenryWTriff 10:29126a41b1da 233
HenryWTriff 11:7b12992156de 234 while(laps <= number_of_laps) { //Loop until the number of laps have been completed
HenryWTriff 8:4503c92acaf6 235 //MECHANICS
HenryWTriff 11:7b12992156de 236 laps = Mechanics.Get_Laps(laps, Map_1_Gates, Map_1.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 237 lap_gate = Mechanics.Get_Gate(Map_1_Gates, Map_1.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 238 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 239 translation = Mechanics.Get_Translation(translation, angle, speed, Map_1_Out_Of_Bounds_Square, Map_1_Out_Of_Bounds_Triangle, Map_1, Device); //Get the translation
HenryWTriff 8:4503c92acaf6 240 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 241 speed,
HenryWTriff 8:4503c92acaf6 242 max_speed,
HenryWTriff 8:4503c92acaf6 243 acceleration,
HenryWTriff 8:4503c92acaf6 244 deceleration,
HenryWTriff 8:4503c92acaf6 245 off_track_speed,
HenryWTriff 8:4503c92acaf6 246 translation,
HenryWTriff 8:4503c92acaf6 247 Map_1_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 248 Map_1_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 249 Map_1_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 250 Map_1_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 251 Map_1_Boost_Plates,
HenryWTriff 8:4503c92acaf6 252 Map_1,
HenryWTriff 8:4503c92acaf6 253 Device
HenryWTriff 11:7b12992156de 254 ); //Get the speed of the player
HenryWTriff 25:31761087a83f 255
HenryWTriff 8:4503c92acaf6 256 //LEDS
HenryWTriff 11:7b12992156de 257 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 8:4503c92acaf6 258
HenryWTriff 8:4503c92acaf6 259 //GHOST
HenryWTriff 11:7b12992156de 260 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 261 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 262 }
HenryWTriff 8:4503c92acaf6 263
HenryWTriff 8:4503c92acaf6 264 //GRAPHICS
HenryWTriff 11:7b12992156de 265 LCD.clear(); //Clear the screen buffer
HenryWTriff 11:7b12992156de 266 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 267 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 268 translation,
HenryWTriff 10:29126a41b1da 269 angle,
HenryWTriff 10:29126a41b1da 270 squish,
HenryWTriff 25:31761087a83f 271 horizon_factor,
HenryWTriff 10:29126a41b1da 272 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 10:29126a41b1da 273 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 274 (Line_2D *)Map_1_Walls,
HenryWTriff 26:f1d3b7e31091 275 (Sprite_2D *)Map_1_Sprites,
HenryWTriff 10:29126a41b1da 276 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 10:29126a41b1da 277 Map_1,
HenryWTriff 10:29126a41b1da 278 car_model,
HenryWTriff 10:29126a41b1da 279 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 280 LCD
HenryWTriff 11:7b12992156de 281 ); //Draw the graphics
HenryWTriff 11:7b12992156de 282 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 283 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 284 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 285 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 286 race_time++; //Increase the race time
HenryWTriff 8:4503c92acaf6 287
HenryWTriff 8:4503c92acaf6 288 }
HenryWTriff 11:7b12992156de 289 //RACE OVER
HenryWTriff 11:7b12992156de 290 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 7:2ce6e90f6d47 291 LCD.clear();
HenryWTriff 7:2ce6e90f6d47 292 Graphics.Draw_Map(
HenryWTriff 7:2ce6e90f6d47 293 translation,
HenryWTriff 7:2ce6e90f6d47 294 angle,
HenryWTriff 7:2ce6e90f6d47 295 squish,
HenryWTriff 25:31761087a83f 296 horizon_factor,
HenryWTriff 7:2ce6e90f6d47 297 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 7:2ce6e90f6d47 298 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 7:2ce6e90f6d47 299 (Line_2D *)Map_1_Walls,
HenryWTriff 26:f1d3b7e31091 300 (Sprite_2D *)Map_1_Sprites,
HenryWTriff 7:2ce6e90f6d47 301 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 7:2ce6e90f6d47 302 Map_1,
HenryWTriff 7:2ce6e90f6d47 303 car_model,
HenryWTriff 9:7b1093d3f03a 304 Ghost.Play(false, race_time),
HenryWTriff 7:2ce6e90f6d47 305 LCD
HenryWTriff 11:7b12992156de 306 ); //Draw the graphics
HenryWTriff 11:7b12992156de 307 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 308 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 309 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 310 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 25:31761087a83f 311 #ifdef DEBUG
HenryWTriff 25:31761087a83f 312 printf("GHOST COPY\n");
HenryWTriff 25:31761087a83f 313 #endif
HenryWTriff 11:7b12992156de 314 Ghost.Copy(race_time, Small, car_model, SD); //Copy over the ghost data to the SD card (if race time is quicker)
HenryWTriff 10:29126a41b1da 315 }
HenryWTriff 8:4503c92acaf6 316
HenryWTriff 11:7b12992156de 317 //RESET ALL VARIABLES
HenryWTriff 8:4503c92acaf6 318 angle = 0;
HenryWTriff 8:4503c92acaf6 319 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 320 translation = test;
HenryWTriff 8:4503c92acaf6 321 squish = 0.15;
HenryWTriff 8:4503c92acaf6 322 speed = 0;
HenryWTriff 8:4503c92acaf6 323 max_speed = 4;
HenryWTriff 8:4503c92acaf6 324 handling = 2;
HenryWTriff 8:4503c92acaf6 325 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 326 laps = 1;
HenryWTriff 8:4503c92acaf6 327 race_time = 0;
HenryWTriff 8:4503c92acaf6 328
HenryWTriff 8:4503c92acaf6 329 wait(3);
HenryWTriff 25:31761087a83f 330
HenryWTriff 25:31761087a83f 331 #ifdef DEBUG
HenryWTriff 25:31761087a83f 332 printf("LOOP\n");
HenryWTriff 25:31761087a83f 333 #endif
HenryWTriff 25:31761087a83f 334
HenryWTriff 7:2ce6e90f6d47 335 }
HenryWTriff 11:7b12992156de 336 } else if(Menu.Get_Map() == Medium) {
HenryWTriff 8:4503c92acaf6 337 while(1) {
HenryWTriff 8:4503c92acaf6 338
HenryWTriff 11:7b12992156de 339 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 25:31761087a83f 340 #ifdef DEBUG
HenryWTriff 25:31761087a83f 341 printf("READING GHOST DATA\n");
HenryWTriff 25:31761087a83f 342 #endif
HenryWTriff 11:7b12992156de 343 Ghost.SD_Read(Medium, car_model, SD);//Copy the ghost data from the SD card over to the flash memory (Make take a second)
HenryWTriff 10:29126a41b1da 344 }
HenryWTriff 25:31761087a83f 345
HenryWTriff 25:31761087a83f 346 #ifdef DEBUG
HenryWTriff 25:31761087a83f 347 printf("COUNTDOWN\n");
HenryWTriff 25:31761087a83f 348 #endif
HenryWTriff 25:31761087a83f 349
HenryWTriff 8:4503c92acaf6 350 //COUNTDOWN
HenryWTriff 8:4503c92acaf6 351 for(int count = 3; count >= 0; count--) {
HenryWTriff 11:7b12992156de 352 //Draw the map and the count down numbers
HenryWTriff 8:4503c92acaf6 353 LCD.clear();
HenryWTriff 8:4503c92acaf6 354 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 355 translation,
HenryWTriff 8:4503c92acaf6 356 angle,
HenryWTriff 8:4503c92acaf6 357 squish,
HenryWTriff 25:31761087a83f 358 horizon_factor,
HenryWTriff 8:4503c92acaf6 359 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 360 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 361 (Line_2D *)Map_2_Walls,
HenryWTriff 26:f1d3b7e31091 362 (Sprite_2D *)Map_2_Sprites,
HenryWTriff 8:4503c92acaf6 363 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 364 Map_2,
HenryWTriff 8:4503c92acaf6 365 car_model,
HenryWTriff 9:7b1093d3f03a 366 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 367 LCD
HenryWTriff 8:4503c92acaf6 368 );
HenryWTriff 8:4503c92acaf6 369 Graphics.Start_Sequence(count, LCD);
HenryWTriff 11:7b12992156de 370 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 8:4503c92acaf6 371 LCD.refresh();
HenryWTriff 8:4503c92acaf6 372 wait(1);
HenryWTriff 8:4503c92acaf6 373 }
HenryWTriff 8:4503c92acaf6 374 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 375
HenryWTriff 25:31761087a83f 376 #ifdef DEBUG
HenryWTriff 25:31761087a83f 377 printf("RACE START\n");
HenryWTriff 25:31761087a83f 378 #endif
HenryWTriff 25:31761087a83f 379
HenryWTriff 8:4503c92acaf6 380 while(laps <= number_of_laps) {
HenryWTriff 8:4503c92acaf6 381 //MECHANICS
HenryWTriff 11:7b12992156de 382 laps = Mechanics.Get_Laps(laps, Map_2_Gates, Map_2.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 383 lap_gate = Mechanics.Get_Gate(Map_2_Gates, Map_2.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 384 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 385 translation = Mechanics.Get_Translation(translation, angle, speed, Map_2_Out_Of_Bounds_Square, Map_2_Out_Of_Bounds_Triangle, Map_2, Device); //Get the translation
HenryWTriff 8:4503c92acaf6 386 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 387 speed,
HenryWTriff 8:4503c92acaf6 388 max_speed,
HenryWTriff 8:4503c92acaf6 389 acceleration,
HenryWTriff 8:4503c92acaf6 390 deceleration,
HenryWTriff 8:4503c92acaf6 391 off_track_speed,
HenryWTriff 8:4503c92acaf6 392 translation,
HenryWTriff 8:4503c92acaf6 393 Map_2_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 394 Map_2_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 395 Map_2_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 396 Map_2_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 397 Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 398 Map_2,
HenryWTriff 8:4503c92acaf6 399 Device
HenryWTriff 11:7b12992156de 400 ); //Get the speed of the player
HenryWTriff 8:4503c92acaf6 401 //LEDS
HenryWTriff 11:7b12992156de 402 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 8:4503c92acaf6 403
HenryWTriff 8:4503c92acaf6 404 //GHOST
HenryWTriff 11:7b12992156de 405 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 406 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 407 }
HenryWTriff 6:5f76dd718dc3 408
HenryWTriff 8:4503c92acaf6 409 //GRAPHICS
HenryWTriff 11:7b12992156de 410 LCD.clear(); //Clear the screen buffer
HenryWTriff 11:7b12992156de 411 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 412 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 413 translation,
HenryWTriff 10:29126a41b1da 414 angle,
HenryWTriff 10:29126a41b1da 415 squish,
HenryWTriff 25:31761087a83f 416 horizon_factor,
HenryWTriff 10:29126a41b1da 417 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 10:29126a41b1da 418 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 419 (Line_2D *)Map_2_Walls,
HenryWTriff 26:f1d3b7e31091 420 (Sprite_2D *)Map_2_Sprites,
HenryWTriff 10:29126a41b1da 421 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 10:29126a41b1da 422 Map_2,
HenryWTriff 10:29126a41b1da 423 car_model,
HenryWTriff 10:29126a41b1da 424 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 425 LCD
HenryWTriff 11:7b12992156de 426 ); //Draw the graphics
HenryWTriff 11:7b12992156de 427 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 428 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 429 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 430 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 431 race_time++; //Increase the race time
HenryWTriff 6:5f76dd718dc3 432
HenryWTriff 8:4503c92acaf6 433 }
HenryWTriff 8:4503c92acaf6 434
HenryWTriff 6:5f76dd718dc3 435
HenryWTriff 11:7b12992156de 436 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 6:5f76dd718dc3 437 LCD.clear();
HenryWTriff 6:5f76dd718dc3 438 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 439 translation,
HenryWTriff 6:5f76dd718dc3 440 angle,
HenryWTriff 6:5f76dd718dc3 441 squish,
HenryWTriff 25:31761087a83f 442 horizon_factor,
HenryWTriff 8:4503c92acaf6 443 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 444 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 445 (Line_2D *)Map_2_Walls,
HenryWTriff 26:f1d3b7e31091 446 (Sprite_2D *)Map_2_Sprites,
HenryWTriff 8:4503c92acaf6 447 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 448 Map_2,
HenryWTriff 7:2ce6e90f6d47 449 car_model,
HenryWTriff 9:7b1093d3f03a 450 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 451 LCD
HenryWTriff 11:7b12992156de 452 ); //Draw the graphics
HenryWTriff 11:7b12992156de 453 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 454 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 455 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 456 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 25:31761087a83f 457 #ifdef DEBUG
HenryWTriff 25:31761087a83f 458 printf("RACE START\n");
HenryWTriff 25:31761087a83f 459 #endif
HenryWTriff 11:7b12992156de 460 Ghost.Copy(race_time, Medium, car_model, SD); //Copy over the ghost data to the SD card (if race time is quicker)
HenryWTriff 10:29126a41b1da 461 }
HenryWTriff 9:7b1093d3f03a 462
HenryWTriff 11:7b12992156de 463 //RESET ALL VARIABLES
HenryWTriff 9:7b1093d3f03a 464 angle = 0;
HenryWTriff 9:7b1093d3f03a 465 Point_2D test = {0,0};
HenryWTriff 9:7b1093d3f03a 466 translation = test;
HenryWTriff 9:7b1093d3f03a 467 squish = 0.15;
HenryWTriff 9:7b1093d3f03a 468 speed = 0;
HenryWTriff 9:7b1093d3f03a 469 max_speed = 4;
HenryWTriff 9:7b1093d3f03a 470 handling = 2;
HenryWTriff 9:7b1093d3f03a 471 lap_gate = 0;
HenryWTriff 9:7b1093d3f03a 472 laps = 1;
HenryWTriff 9:7b1093d3f03a 473 race_time = 0;
HenryWTriff 9:7b1093d3f03a 474
HenryWTriff 9:7b1093d3f03a 475 wait(3);
HenryWTriff 25:31761087a83f 476
HenryWTriff 25:31761087a83f 477 #ifdef DEBUG
HenryWTriff 25:31761087a83f 478 printf("LOOP\n");
HenryWTriff 25:31761087a83f 479 #endif
HenryWTriff 25:31761087a83f 480
HenryWTriff 9:7b1093d3f03a 481 }
HenryWTriff 11:7b12992156de 482 } else if(Menu.Get_Map() == Large) {
HenryWTriff 9:7b1093d3f03a 483 while(1) {
HenryWTriff 9:7b1093d3f03a 484
HenryWTriff 11:7b12992156de 485 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 25:31761087a83f 486 #ifdef DEBUG
HenryWTriff 25:31761087a83f 487 printf("READING GHOST DATA\n");
HenryWTriff 25:31761087a83f 488 #endif
HenryWTriff 11:7b12992156de 489 Ghost.SD_Read(Large, car_model, SD); //Copy the ghost data from the SD card over to the flash memory (Make take a second)
HenryWTriff 10:29126a41b1da 490 }
HenryWTriff 10:29126a41b1da 491
HenryWTriff 25:31761087a83f 492 #ifdef DEBUG
HenryWTriff 25:31761087a83f 493 printf("COUNTDOWN\n");
HenryWTriff 25:31761087a83f 494 #endif
HenryWTriff 25:31761087a83f 495
HenryWTriff 9:7b1093d3f03a 496 //COUNTDOWN
HenryWTriff 11:7b12992156de 497 for(int count = 3; count >= 0; count--) { //Loop for the countdown
HenryWTriff 25:31761087a83f 498 //Draw the map and the count down numbers
HenryWTriff 9:7b1093d3f03a 499 LCD.clear();
HenryWTriff 9:7b1093d3f03a 500 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 501 translation,
HenryWTriff 9:7b1093d3f03a 502 angle,
HenryWTriff 9:7b1093d3f03a 503 squish,
HenryWTriff 25:31761087a83f 504 horizon_factor,
HenryWTriff 9:7b1093d3f03a 505 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 506 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 507 (Line_2D *)Map_3_Walls,
HenryWTriff 26:f1d3b7e31091 508 (Sprite_2D *)Map_2_Sprites,
HenryWTriff 9:7b1093d3f03a 509 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 510 Map_3,
HenryWTriff 9:7b1093d3f03a 511 car_model,
HenryWTriff 9:7b1093d3f03a 512 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 513 LCD
HenryWTriff 9:7b1093d3f03a 514 );
HenryWTriff 9:7b1093d3f03a 515 Graphics.Start_Sequence(count, LCD);
HenryWTriff 9:7b1093d3f03a 516 LCD.refresh();
HenryWTriff 11:7b12992156de 517 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 9:7b1093d3f03a 518 wait(1);
HenryWTriff 9:7b1093d3f03a 519 }
HenryWTriff 9:7b1093d3f03a 520 LEDs.Clear(Device);
HenryWTriff 9:7b1093d3f03a 521
HenryWTriff 25:31761087a83f 522 #ifdef DEBUG
HenryWTriff 25:31761087a83f 523 printf("RACE START\n");
HenryWTriff 25:31761087a83f 524 #endif
HenryWTriff 10:29126a41b1da 525
HenryWTriff 11:7b12992156de 526 while(laps <= number_of_laps) { //Loop until the number of laps have been completed
HenryWTriff 9:7b1093d3f03a 527 //MECHANICS
HenryWTriff 11:7b12992156de 528 laps = Mechanics.Get_Laps(laps, Map_3_Gates, Map_3.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 529 lap_gate = Mechanics.Get_Gate(Map_3_Gates, Map_3.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 530 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 531 translation = Mechanics.Get_Translation(translation, angle, speed, Map_3_Out_Of_Bounds_Square, Map_3_Out_Of_Bounds_Triangle, Map_3, Device);//Get the translation
HenryWTriff 9:7b1093d3f03a 532 speed = Mechanics.Get_Speed(
HenryWTriff 9:7b1093d3f03a 533 speed,
HenryWTriff 9:7b1093d3f03a 534 max_speed,
HenryWTriff 9:7b1093d3f03a 535 acceleration,
HenryWTriff 9:7b1093d3f03a 536 deceleration,
HenryWTriff 9:7b1093d3f03a 537 off_track_speed,
HenryWTriff 9:7b1093d3f03a 538 translation,
HenryWTriff 9:7b1093d3f03a 539 Map_3_Off_Track_Square,
HenryWTriff 9:7b1093d3f03a 540 Map_3_Off_Track_Triangle,
HenryWTriff 9:7b1093d3f03a 541 Map_3_Out_Of_Bounds_Square,
HenryWTriff 9:7b1093d3f03a 542 Map_3_Out_Of_Bounds_Triangle,
HenryWTriff 9:7b1093d3f03a 543 Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 544 Map_3,
HenryWTriff 9:7b1093d3f03a 545 Device
HenryWTriff 11:7b12992156de 546 );//Get the speed of the player
HenryWTriff 9:7b1093d3f03a 547
HenryWTriff 9:7b1093d3f03a 548 //LEDS
HenryWTriff 11:7b12992156de 549 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 9:7b1093d3f03a 550
HenryWTriff 9:7b1093d3f03a 551 //GHOST
HenryWTriff 11:7b12992156de 552 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 553 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 554 }
HenryWTriff 9:7b1093d3f03a 555
HenryWTriff 9:7b1093d3f03a 556 //GRAPHICS
HenryWTriff 11:7b12992156de 557 LCD.clear(); //Clear the screen
HenryWTriff 11:7b12992156de 558 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 559 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 560 translation,
HenryWTriff 10:29126a41b1da 561 angle,
HenryWTriff 10:29126a41b1da 562 squish,
HenryWTriff 25:31761087a83f 563 horizon_factor,
HenryWTriff 10:29126a41b1da 564 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 10:29126a41b1da 565 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 566 (Line_2D *)Map_3_Walls,
HenryWTriff 26:f1d3b7e31091 567 (Sprite_2D *)Map_3_Sprites,
HenryWTriff 10:29126a41b1da 568 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 10:29126a41b1da 569 Map_3,
HenryWTriff 10:29126a41b1da 570 car_model,
HenryWTriff 10:29126a41b1da 571 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 572 LCD
HenryWTriff 11:7b12992156de 573 ); //Draw the graphics
HenryWTriff 11:7b12992156de 574 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 575 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 576 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 577 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 578 race_time++; //Increase the race time
HenryWTriff 9:7b1093d3f03a 579 }
HenryWTriff 25:31761087a83f 580
HenryWTriff 11:7b12992156de 581 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 9:7b1093d3f03a 582 LCD.clear();
HenryWTriff 9:7b1093d3f03a 583 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 584 translation,
HenryWTriff 9:7b1093d3f03a 585 angle,
HenryWTriff 9:7b1093d3f03a 586 squish,
HenryWTriff 25:31761087a83f 587 horizon_factor,
HenryWTriff 9:7b1093d3f03a 588 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 589 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 590 (Line_2D *)Map_3_Walls,
HenryWTriff 26:f1d3b7e31091 591 (Sprite_2D *)Map_3_Sprites,
HenryWTriff 9:7b1093d3f03a 592 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 593 Map_3,
HenryWTriff 9:7b1093d3f03a 594 car_model,
HenryWTriff 9:7b1093d3f03a 595 Ghost.Play(false, race_time),
HenryWTriff 6:5f76dd718dc3 596 LCD
HenryWTriff 11:7b12992156de 597 ); //Draw the graphics
HenryWTriff 11:7b12992156de 598 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 599 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 600 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 601 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 25:31761087a83f 602 #ifdef DEBUG
HenryWTriff 25:31761087a83f 603 printf("RACE START\n");
HenryWTriff 25:31761087a83f 604 #endif
HenryWTriff 11:7b12992156de 605 Ghost.Copy(race_time, Large, car_model, SD); //Copy over the ghost data to the SD card (if race time is quicker)
HenryWTriff 10:29126a41b1da 606 }
HenryWTriff 7:2ce6e90f6d47 607
HenryWTriff 11:7b12992156de 608 //RESET ALL VARIABLES
HenryWTriff 8:4503c92acaf6 609 angle = 0;
HenryWTriff 8:4503c92acaf6 610 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 611 translation = test;
HenryWTriff 8:4503c92acaf6 612 squish = 0.15;
HenryWTriff 8:4503c92acaf6 613 speed = 0;
HenryWTriff 8:4503c92acaf6 614 max_speed = 4;
HenryWTriff 8:4503c92acaf6 615 handling = 2;
HenryWTriff 8:4503c92acaf6 616 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 617 laps = 1;
HenryWTriff 8:4503c92acaf6 618 race_time = 0;
HenryWTriff 25:31761087a83f 619 wait(3);
HenryWTriff 6:5f76dd718dc3 620
HenryWTriff 25:31761087a83f 621 #ifdef DEBUG
HenryWTriff 25:31761087a83f 622 printf("LOOP\n");
HenryWTriff 25:31761087a83f 623 #endif
HenryWTriff 25:31761087a83f 624
HenryWTriff 8:4503c92acaf6 625 }
HenryWTriff 2:d08b6a1eaf2b 626 }
eencae 0:b7f1f47bb26a 627 }
eencae 0:b7f1f47bb26a 628