Dependencies:   mbed

Committer:
HenryWTriff
Date:
Wed Feb 19 21:40:21 2020 +0000
Revision:
6:5f76dd718dc3
Parent:
5:2d9f3c36bcb9
Child:
7:2ce6e90f6d47
Ghost Racing added, Gyro steering and boost plates

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
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
HenryWTriff 2:d08b6a1eaf2b 13 //LIBRARIES
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 16 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 17 #include "FXOS8700CQ.h"
HenryWTriff 2:d08b6a1eaf2b 18 #include "Graphics.h"
HenryWTriff 3:ceed6d026b8b 19 #include "Controls.h"
HenryWTriff 6:5f76dd718dc3 20 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 21 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 22 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 23 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 24 #include <string>
eencae 0:b7f1f47bb26a 25
HenryWTriff 2:d08b6a1eaf2b 26 //OBJECTS
HenryWTriff 2:d08b6a1eaf2b 27 Gamepad Device;
HenryWTriff 2:d08b6a1eaf2b 28 N5110 LCD;
HenryWTriff 6:5f76dd718dc3 29 FXOS8700CQ Gyro(I2C_SDA,I2C_SCL);
HenryWTriff 2:d08b6a1eaf2b 30 Graphics Graphics;
HenryWTriff 3:ceed6d026b8b 31 Controls Controls;
HenryWTriff 5:2d9f3c36bcb9 32 Mechanics Mechanics;
HenryWTriff 6:5f76dd718dc3 33 Menu Menu;
HenryWTriff 6:5f76dd718dc3 34 LEDs LEDs;
HenryWTriff 6:5f76dd718dc3 35 Ghost Ghost;
HenryWTriff 3:ceed6d026b8b 36
HenryWTriff 3:ceed6d026b8b 37 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 38 #define STRUCTS
HenryWTriff 3:ceed6d026b8b 39
HenryWTriff 3:ceed6d026b8b 40 //STRUCTS
HenryWTriff 3:ceed6d026b8b 41 struct Point_2D {
HenryWTriff 3:ceed6d026b8b 42 float x;
HenryWTriff 3:ceed6d026b8b 43 float y;
HenryWTriff 3:ceed6d026b8b 44 };
HenryWTriff 3:ceed6d026b8b 45 struct Line_2D {
HenryWTriff 3:ceed6d026b8b 46 Point_2D from;
HenryWTriff 3:ceed6d026b8b 47 Point_2D to;
HenryWTriff 3:ceed6d026b8b 48 };
HenryWTriff 3:ceed6d026b8b 49
HenryWTriff 5:2d9f3c36bcb9 50 struct Square_2D {
HenryWTriff 5:2d9f3c36bcb9 51 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 52 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 53 };
HenryWTriff 5:2d9f3c36bcb9 54 struct Triangle_2D {
HenryWTriff 5:2d9f3c36bcb9 55 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 56 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 57 int Type;
HenryWTriff 5:2d9f3c36bcb9 58 };
HenryWTriff 5:2d9f3c36bcb9 59
HenryWTriff 3:ceed6d026b8b 60 struct Map_Data {
HenryWTriff 3:ceed6d026b8b 61 int number_of_track_lines;
HenryWTriff 3:ceed6d026b8b 62 int number_of_dotted_lines;
HenryWTriff 3:ceed6d026b8b 63 int number_of_flags;
HenryWTriff 5:2d9f3c36bcb9 64 int number_of_walls;
HenryWTriff 5:2d9f3c36bcb9 65 int number_of_off_track_squares;
HenryWTriff 5:2d9f3c36bcb9 66 int number_of_off_track_triangles;
HenryWTriff 5:2d9f3c36bcb9 67 int number_of_out_of_bounds_squares;
HenryWTriff 5:2d9f3c36bcb9 68 int number_of_out_of_bounds_triangles;
HenryWTriff 5:2d9f3c36bcb9 69 int number_of_gates;
HenryWTriff 6:5f76dd718dc3 70 int number_of_boost_plates;
HenryWTriff 6:5f76dd718dc3 71 };
HenryWTriff 6:5f76dd718dc3 72
HenryWTriff 6:5f76dd718dc3 73 struct Time {
HenryWTriff 6:5f76dd718dc3 74 int mins;
HenryWTriff 6:5f76dd718dc3 75 int secs;
HenryWTriff 6:5f76dd718dc3 76 int milis;
HenryWTriff 6:5f76dd718dc3 77 };
HenryWTriff 6:5f76dd718dc3 78
HenryWTriff 6:5f76dd718dc3 79 struct Gyro_Data {
HenryWTriff 6:5f76dd718dc3 80 float ax;
HenryWTriff 6:5f76dd718dc3 81 float ay;
HenryWTriff 6:5f76dd718dc3 82 float az;
HenryWTriff 6:5f76dd718dc3 83 float mx;
HenryWTriff 6:5f76dd718dc3 84 float my;
HenryWTriff 6:5f76dd718dc3 85 float mz;
HenryWTriff 3:ceed6d026b8b 86 };
HenryWTriff 3:ceed6d026b8b 87
HenryWTriff 3:ceed6d026b8b 88 #endif
eencae 0:b7f1f47bb26a 89
HenryWTriff 2:d08b6a1eaf2b 90 //MAP - 1
HenryWTriff 6:5f76dd718dc3 91 Map_Data Map_1 = {36,1,2,20,14,19,9,5,12,0};
HenryWTriff 3:ceed6d026b8b 92
HenryWTriff 2:d08b6a1eaf2b 93 //Lines
HenryWTriff 3:ceed6d026b8b 94 const Line_2D Map_1_Track_Lines[36] = {
HenryWTriff 2:d08b6a1eaf2b 95 //Inside Line
HenryWTriff 3:ceed6d026b8b 96 {{-20,0},{-20,80}},
HenryWTriff 3:ceed6d026b8b 97 {{-20,80},{-40,100}},
HenryWTriff 3:ceed6d026b8b 98 {{-40,100},{-80,100}},
HenryWTriff 3:ceed6d026b8b 99 {{-80,100},{-100,80}},
HenryWTriff 3:ceed6d026b8b 100 {{-100,80},{-100,40}},
HenryWTriff 3:ceed6d026b8b 101 {{-100,40},{-140,0}},
HenryWTriff 3:ceed6d026b8b 102 {{-140,0},{-220,0}},
HenryWTriff 3:ceed6d026b8b 103 {{-220,0},{-260,40}},
HenryWTriff 3:ceed6d026b8b 104 {{-260,40},{-260,80}},
HenryWTriff 3:ceed6d026b8b 105 {{-260,80},{-280,100}},
HenryWTriff 3:ceed6d026b8b 106 {{-280,100},{-320,100}},
HenryWTriff 3:ceed6d026b8b 107 {{-320,100},{-360,60}},
HenryWTriff 3:ceed6d026b8b 108 {{-360,60},{-360,-100}},
HenryWTriff 3:ceed6d026b8b 109 {{-360,-100},{-300,-160}},
HenryWTriff 3:ceed6d026b8b 110 {{-300,-160},{-220,-80}},
HenryWTriff 3:ceed6d026b8b 111 {{-220,-80},{-100,-80}},
HenryWTriff 3:ceed6d026b8b 112 {{-100,-80},{-20,0}},
HenryWTriff 3:ceed6d026b8b 113 //Outside Line
HenryWTriff 3:ceed6d026b8b 114 {{20,-20},{20,100}},
HenryWTriff 3:ceed6d026b8b 115 {{20,100},{-20,140}},
HenryWTriff 3:ceed6d026b8b 116 {{-20,140},{-100,140}},
HenryWTriff 3:ceed6d026b8b 117 {{-100,140},{-140,100}},
HenryWTriff 3:ceed6d026b8b 118 {{-140,100},{-140,60}},
HenryWTriff 3:ceed6d026b8b 119 {{-140,60},{-160,40}},
HenryWTriff 3:ceed6d026b8b 120 {{-160,40},{-200,40}},
HenryWTriff 3:ceed6d026b8b 121 {{-200,40},{-220,60}},
HenryWTriff 3:ceed6d026b8b 122 {{-220,60},{-220,100}},
HenryWTriff 3:ceed6d026b8b 123 {{-220,100},{-260,140}},
HenryWTriff 3:ceed6d026b8b 124 {{-260,140},{-340,140}},
HenryWTriff 3:ceed6d026b8b 125 {{-340,140},{-400,80}},
HenryWTriff 3:ceed6d026b8b 126 {{-400,80},{-400,-120}},
HenryWTriff 3:ceed6d026b8b 127 {{-400,-120},{-320,-200}},
HenryWTriff 3:ceed6d026b8b 128 {{-320,-200},{-280,-200}},
HenryWTriff 3:ceed6d026b8b 129 {{-280,-200},{-200,-120}},
HenryWTriff 3:ceed6d026b8b 130 {{-200,-120},{-80,-120}},
HenryWTriff 3:ceed6d026b8b 131 {{-80,-120},{20,-20}},
HenryWTriff 3:ceed6d026b8b 132 };
HenryWTriff 3:ceed6d026b8b 133
HenryWTriff 5:2d9f3c36bcb9 134 //Dotted Lines
HenryWTriff 3:ceed6d026b8b 135 const Line_2D Map_1_Track_Dotted_Lines[1] = {
HenryWTriff 3:ceed6d026b8b 136 {{-20,0},{20,0}},
HenryWTriff 3:ceed6d026b8b 137 };
HenryWTriff 3:ceed6d026b8b 138
HenryWTriff 5:2d9f3c36bcb9 139 //Flags
HenryWTriff 3:ceed6d026b8b 140 Point_2D Map_1_Flags[2] = {
HenryWTriff 3:ceed6d026b8b 141 {-20,0},
HenryWTriff 3:ceed6d026b8b 142 {24,0}
HenryWTriff 2:d08b6a1eaf2b 143 };
HenryWTriff 2:d08b6a1eaf2b 144
HenryWTriff 5:2d9f3c36bcb9 145 //Walls
HenryWTriff 6:5f76dd718dc3 146 Line_2D Map_1_Walls[20] = {
HenryWTriff 5:2d9f3c36bcb9 147 //Inside
HenryWTriff 5:2d9f3c36bcb9 148 {{-40,80},{-40,0}},
HenryWTriff 5:2d9f3c36bcb9 149 {{-40,0},{-100,-60}},
HenryWTriff 5:2d9f3c36bcb9 150 {{-100,-60},{-240,-60}},
HenryWTriff 5:2d9f3c36bcb9 151 {{-240,-60},{-300,-120}},
HenryWTriff 5:2d9f3c36bcb9 152 {{-300,-120},{-340,-60}},
HenryWTriff 5:2d9f3c36bcb9 153 {{-340,-60},{-340,60}},
HenryWTriff 5:2d9f3c36bcb9 154 {{-340,60},{-280,60}},
HenryWTriff 5:2d9f3c36bcb9 155 {{-280,60},{-280,-20}},
HenryWTriff 5:2d9f3c36bcb9 156 {{-280,-20},{-100,-20}},
HenryWTriff 5:2d9f3c36bcb9 157 {{-100,-20},{-80,0}},
HenryWTriff 5:2d9f3c36bcb9 158 {{-80,0},{-80,80}},
HenryWTriff 5:2d9f3c36bcb9 159 {{-80,80},{-40,80}},
HenryWTriff 5:2d9f3c36bcb9 160 //Outside
HenryWTriff 5:2d9f3c36bcb9 161 {{40,160},{40,-220}},
HenryWTriff 5:2d9f3c36bcb9 162 {{40,-220},{-420,-220}},
HenryWTriff 5:2d9f3c36bcb9 163 {{-420,-220},{-420,160}},
HenryWTriff 6:5f76dd718dc3 164 {{-420,160},{-200,160}},
HenryWTriff 6:5f76dd718dc3 165 {{-200,160},{-200,60}},
HenryWTriff 6:5f76dd718dc3 166 {{-200,60},{-160,60}},
HenryWTriff 6:5f76dd718dc3 167 {{-160,60},{-160,160}},
HenryWTriff 6:5f76dd718dc3 168 {{-160,160},{40,160}},
HenryWTriff 5:2d9f3c36bcb9 169 };
HenryWTriff 5:2d9f3c36bcb9 170
HenryWTriff 5:2d9f3c36bcb9 171 //Off track? objects
HenryWTriff 5:2d9f3c36bcb9 172 Square_2D Map_1_Off_Track_Square[14] = {
HenryWTriff 5:2d9f3c36bcb9 173 //Inside
HenryWTriff 5:2d9f3c36bcb9 174 {{-100,80},{-20,0}},
HenryWTriff 5:2d9f3c36bcb9 175 {{-80,100},{-40,80}},
HenryWTriff 5:2d9f3c36bcb9 176 {{-260,0},{-100,-80}},
HenryWTriff 5:2d9f3c36bcb9 177 {{-360,60},{-260,-100}},
HenryWTriff 5:2d9f3c36bcb9 178 {{-320,100},{-280,60}},
HenryWTriff 5:2d9f3c36bcb9 179 {{-280,80},{-260,60}},
HenryWTriff 5:2d9f3c36bcb9 180 {{-300,-100},{-260,-120}},
HenryWTriff 5:2d9f3c36bcb9 181 {{-200,60},{-60,40}},
HenryWTriff 5:2d9f3c36bcb9 182 {{-220,140},{-140,60}},
HenryWTriff 5:2d9f3c36bcb9 183 {{-200,-120},{20,-200}},
HenryWTriff 5:2d9f3c36bcb9 184 {{-400,200},{20,140}},
HenryWTriff 5:2d9f3c36bcb9 185 {{-500,200},{-400,-300}},
HenryWTriff 5:2d9f3c36bcb9 186 {{20,200},{100,-300}},
HenryWTriff 5:2d9f3c36bcb9 187 {{-400,-200},{20,-300}}
HenryWTriff 5:2d9f3c36bcb9 188 };
HenryWTriff 5:2d9f3c36bcb9 189
HenryWTriff 5:2d9f3c36bcb9 190 //Off track? objects
HenryWTriff 5:2d9f3c36bcb9 191 Triangle_2D Map_1_Off_Track_Triangle[19] = {
HenryWTriff 5:2d9f3c36bcb9 192 {{-40,100},{-20,80},1},
HenryWTriff 5:2d9f3c36bcb9 193 {{-100,100},{-80,80},4},
HenryWTriff 5:2d9f3c36bcb9 194 {{-140,40},{-100,0},4},
HenryWTriff 5:2d9f3c36bcb9 195 {{-100,0},{-20,-80},2}, //
HenryWTriff 5:2d9f3c36bcb9 196 {{-260,40},{-220,0},1},
HenryWTriff 5:2d9f3c36bcb9 197 {{-260,-80},{-220,-120},2},
HenryWTriff 5:2d9f3c36bcb9 198 {{-200,-120},{-260,-160},2},
HenryWTriff 5:2d9f3c36bcb9 199 {{-280,100},{-260,80},1},
HenryWTriff 5:2d9f3c36bcb9 200 {{-360,100},{-320,60},4},
HenryWTriff 5:2d9f3c36bcb9 201 {{-360,-100},{-300,-160},3},
HenryWTriff 5:2d9f3c36bcb9 202 //Outside
HenryWTriff 5:2d9f3c36bcb9 203 {{-20,140},{20,100},3},
HenryWTriff 5:2d9f3c36bcb9 204 {{-80,-20},{20,-120},4},
HenryWTriff 5:2d9f3c36bcb9 205 {{-140,140},{-100,100},2},
HenryWTriff 5:2d9f3c36bcb9 206 {{-160,60},{-140,40},2}, //
HenryWTriff 5:2d9f3c36bcb9 207 {{-220,60},{-200,40},3},
HenryWTriff 5:2d9f3c36bcb9 208 {{-280,-120},{-200,-200},4},
HenryWTriff 5:2d9f3c36bcb9 209 {{-260,140},{-240,100},3},
HenryWTriff 5:2d9f3c36bcb9 210 {{-400,140},{-340,80},2}, //
HenryWTriff 5:2d9f3c36bcb9 211 {{-400,-120},{-320,-200},1}
HenryWTriff 5:2d9f3c36bcb9 212 };
HenryWTriff 5:2d9f3c36bcb9 213
HenryWTriff 6:5f76dd718dc3 214 Square_2D Map_1_Out_Of_Bounds_Square[9] = {
HenryWTriff 5:2d9f3c36bcb9 215 //Inside
HenryWTriff 5:2d9f3c36bcb9 216 {{-80,80},{-40,0}},
HenryWTriff 5:2d9f3c36bcb9 217 {{-340,60},{-280,-60}},
HenryWTriff 5:2d9f3c36bcb9 218 {{-280,-20},{-100,-60}},
HenryWTriff 5:2d9f3c36bcb9 219 {{-80,0},{-60,-20}},
HenryWTriff 5:2d9f3c36bcb9 220 //Outside
HenryWTriff 5:2d9f3c36bcb9 221 {{40,160},{60,-220}},
HenryWTriff 5:2d9f3c36bcb9 222 {{-420,-220},{40,-240}},
HenryWTriff 5:2d9f3c36bcb9 223 {{-440,160},{-420,-220}},
HenryWTriff 6:5f76dd718dc3 224 {{-420,180},{40,160}},
HenryWTriff 6:5f76dd718dc3 225 {{-200,160},{-160,60}}
HenryWTriff 5:2d9f3c36bcb9 226 };
HenryWTriff 5:2d9f3c36bcb9 227
HenryWTriff 5:2d9f3c36bcb9 228 Triangle_2D Map_1_Out_Of_Bounds_Triangle[5] = {
HenryWTriff 5:2d9f3c36bcb9 229 //Inside
HenryWTriff 5:2d9f3c36bcb9 230 {{-60,0},{-40,-20},2},
HenryWTriff 5:2d9f3c36bcb9 231 {{-100,0},{-80,-20},4},
HenryWTriff 5:2d9f3c36bcb9 232 {{-100,-20},{-60,-60},2},
HenryWTriff 5:2d9f3c36bcb9 233 {{-300,-60},{-240,-120},2},
HenryWTriff 5:2d9f3c36bcb9 234 {{-340,-60},{-300,-120},3}
HenryWTriff 5:2d9f3c36bcb9 235 };
HenryWTriff 5:2d9f3c36bcb9 236
HenryWTriff 5:2d9f3c36bcb9 237 Square_2D Map_1_Gates[12] = {
HenryWTriff 5:2d9f3c36bcb9 238 {{-40,0},{40,-10}},
HenryWTriff 5:2d9f3c36bcb9 239 {{-40,80},{40,70}},
HenryWTriff 5:2d9f3c36bcb9 240 {{-80,160},{-70,80}},
HenryWTriff 5:2d9f3c36bcb9 241 {{-160,70},{-80,60}},
HenryWTriff 5:2d9f3c36bcb9 242 {{-200,60},{-190,-20}},
HenryWTriff 5:2d9f3c36bcb9 243 {{-310,160},{-300,60}},
HenryWTriff 5:2d9f3c36bcb9 244 {{-420,10},{-340,0}},
HenryWTriff 5:2d9f3c36bcb9 245 {{-420,-90},{-300, -100}},
HenryWTriff 5:2d9f3c36bcb9 246 {{-300,-100},{-290,-220}},
HenryWTriff 5:2d9f3c36bcb9 247 {{-200,-60},{-190,-220}},
HenryWTriff 5:2d9f3c36bcb9 248 {{-110,-60},{-100,-220}},
HenryWTriff 5:2d9f3c36bcb9 249 {{-100,-40},{40,-60}}
HenryWTriff 5:2d9f3c36bcb9 250 };
HenryWTriff 5:2d9f3c36bcb9 251
HenryWTriff 6:5f76dd718dc3 252 Triangle_2D Map_1_Boost_Plates[0] = {
HenryWTriff 6:5f76dd718dc3 253 };
HenryWTriff 6:5f76dd718dc3 254
HenryWTriff 2:d08b6a1eaf2b 255 //GLOBAL VARIABLES
HenryWTriff 2:d08b6a1eaf2b 256
HenryWTriff 2:d08b6a1eaf2b 257 //Transform
HenryWTriff 2:d08b6a1eaf2b 258 int angle = 0;
HenryWTriff 2:d08b6a1eaf2b 259 Point_2D translation = {0,0};
HenryWTriff 2:d08b6a1eaf2b 260 float squish = 0.15;
HenryWTriff 2:d08b6a1eaf2b 261
HenryWTriff 3:ceed6d026b8b 262 //Vehicle parameters
HenryWTriff 3:ceed6d026b8b 263 float speed = 0;
HenryWTriff 3:ceed6d026b8b 264 float max_speed = 4;
HenryWTriff 4:9f41fc1c2ad1 265 int handling = 2;
HenryWTriff 3:ceed6d026b8b 266
HenryWTriff 5:2d9f3c36bcb9 267 //Mechanics
HenryWTriff 5:2d9f3c36bcb9 268 bool off_track = false;
HenryWTriff 5:2d9f3c36bcb9 269 bool out_of_bounds = false;
HenryWTriff 5:2d9f3c36bcb9 270 int lap_gate = 0;
HenryWTriff 5:2d9f3c36bcb9 271 int laps = 1;
HenryWTriff 6:5f76dd718dc3 272 int number_of_laps = 3;
HenryWTriff 5:2d9f3c36bcb9 273 bool direction = true;
HenryWTriff 6:5f76dd718dc3 274 int race_time = 0;
HenryWTriff 6:5f76dd718dc3 275 bool ghost_available = false;
HenryWTriff 5:2d9f3c36bcb9 276
HenryWTriff 2:d08b6a1eaf2b 277 //Game parameters
HenryWTriff 4:9f41fc1c2ad1 278 int game_fps = 50;
HenryWTriff 6:5f76dd718dc3 279 bool back_light = true;
HenryWTriff 6:5f76dd718dc3 280 bool leds = true;
HenryWTriff 6:5f76dd718dc3 281 bool rumble = true;
HenryWTriff 6:5f76dd718dc3 282 bool gyro_enabled = false;
eencae 0:b7f1f47bb26a 283
eencae 0:b7f1f47bb26a 284 int main()
eencae 0:b7f1f47bb26a 285 {
HenryWTriff 2:d08b6a1eaf2b 286 LCD.init();
HenryWTriff 2:d08b6a1eaf2b 287 Device.init();
HenryWTriff 6:5f76dd718dc3 288 Gyro.init();
HenryWTriff 6:5f76dd718dc3 289 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 6:5f76dd718dc3 290
HenryWTriff 6:5f76dd718dc3 291 //MENU
HenryWTriff 6:5f76dd718dc3 292
HenryWTriff 6:5f76dd718dc3 293 /*int main_option_selected;
HenryWTriff 6:5f76dd718dc3 294 int settings_option_selected;
HenryWTriff 6:5f76dd718dc3 295
HenryWTriff 6:5f76dd718dc3 296 while(main_option_selected != 1) {
HenryWTriff 6:5f76dd718dc3 297 main_option_selected = Menu.Main_Menu(LCD, Device);
HenryWTriff 6:5f76dd718dc3 298
HenryWTriff 6:5f76dd718dc3 299 if(main_option_selected == 2) {
HenryWTriff 6:5f76dd718dc3 300 while(settings_option_selected != 0) {
HenryWTriff 6:5f76dd718dc3 301 //settings_option_selected = Menu.Settings_Menu(LCD, Device);
HenryWTriff 6:5f76dd718dc3 302 if(settings_option_selected == 1) {
HenryWTriff 6:5f76dd718dc3 303
HenryWTriff 6:5f76dd718dc3 304 }
HenryWTriff 6:5f76dd718dc3 305 if(settings_option_selected == 2) {
HenryWTriff 6:5f76dd718dc3 306
HenryWTriff 6:5f76dd718dc3 307 }
HenryWTriff 6:5f76dd718dc3 308 if(settings_option_selected == 3) {
HenryWTriff 6:5f76dd718dc3 309
HenryWTriff 6:5f76dd718dc3 310 }
HenryWTriff 6:5f76dd718dc3 311
HenryWTriff 6:5f76dd718dc3 312 }
HenryWTriff 6:5f76dd718dc3 313 }
HenryWTriff 6:5f76dd718dc3 314 if(main_option_selected == 3) {
HenryWTriff 6:5f76dd718dc3 315 Menu.Credits_Menu(LCD, Device);
HenryWTriff 6:5f76dd718dc3 316 }
HenryWTriff 6:5f76dd718dc3 317
HenryWTriff 6:5f76dd718dc3 318 }*/
HenryWTriff 6:5f76dd718dc3 319
HenryWTriff 2:d08b6a1eaf2b 320 while(1) {
HenryWTriff 5:2d9f3c36bcb9 321
HenryWTriff 6:5f76dd718dc3 322 //COUNTDOWN
HenryWTriff 6:5f76dd718dc3 323
HenryWTriff 6:5f76dd718dc3 324 LCD.clear();
HenryWTriff 6:5f76dd718dc3 325 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 326 translation,
HenryWTriff 6:5f76dd718dc3 327 angle,
HenryWTriff 6:5f76dd718dc3 328 squish,
HenryWTriff 6:5f76dd718dc3 329 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 6:5f76dd718dc3 330 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 6:5f76dd718dc3 331 (Line_2D *)Map_1_Walls,
HenryWTriff 6:5f76dd718dc3 332 (Point_2D *)Map_1_Flags,
HenryWTriff 6:5f76dd718dc3 333 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 6:5f76dd718dc3 334 Map_1,
HenryWTriff 6:5f76dd718dc3 335 Ghost.Play(ghost_available, race_time),
HenryWTriff 6:5f76dd718dc3 336 LCD
HenryWTriff 6:5f76dd718dc3 337 );
HenryWTriff 6:5f76dd718dc3 338 Graphics.Start_Sequence(3, LCD);
HenryWTriff 6:5f76dd718dc3 339 LCD.refresh();
HenryWTriff 6:5f76dd718dc3 340 wait(1);
HenryWTriff 5:2d9f3c36bcb9 341
HenryWTriff 6:5f76dd718dc3 342 LCD.clear();
HenryWTriff 6:5f76dd718dc3 343 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 344 translation,
HenryWTriff 6:5f76dd718dc3 345 angle,
HenryWTriff 6:5f76dd718dc3 346 squish,
HenryWTriff 6:5f76dd718dc3 347 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 6:5f76dd718dc3 348 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 6:5f76dd718dc3 349 (Line_2D *)Map_1_Walls,
HenryWTriff 6:5f76dd718dc3 350 (Point_2D *)Map_1_Flags,
HenryWTriff 6:5f76dd718dc3 351 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 6:5f76dd718dc3 352 Map_1,
HenryWTriff 6:5f76dd718dc3 353 Ghost.Play(ghost_available, race_time),
HenryWTriff 6:5f76dd718dc3 354 LCD
HenryWTriff 6:5f76dd718dc3 355 );
HenryWTriff 6:5f76dd718dc3 356 Graphics.Start_Sequence(2, LCD);
HenryWTriff 6:5f76dd718dc3 357 LEDs.Start_Sequence(back_light, 2, Device);
HenryWTriff 6:5f76dd718dc3 358 LCD.refresh();
HenryWTriff 6:5f76dd718dc3 359 wait(1);
HenryWTriff 5:2d9f3c36bcb9 360
HenryWTriff 5:2d9f3c36bcb9 361 LCD.clear();
HenryWTriff 5:2d9f3c36bcb9 362 Graphics.Draw_Map(
HenryWTriff 5:2d9f3c36bcb9 363 translation,
HenryWTriff 5:2d9f3c36bcb9 364 angle,
HenryWTriff 5:2d9f3c36bcb9 365 squish,
HenryWTriff 5:2d9f3c36bcb9 366 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 5:2d9f3c36bcb9 367 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 5:2d9f3c36bcb9 368 (Line_2D *)Map_1_Walls,
HenryWTriff 5:2d9f3c36bcb9 369 (Point_2D *)Map_1_Flags,
HenryWTriff 6:5f76dd718dc3 370 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 5:2d9f3c36bcb9 371 Map_1,
HenryWTriff 6:5f76dd718dc3 372 Ghost.Play(ghost_available, race_time),
HenryWTriff 6:5f76dd718dc3 373 LCD
HenryWTriff 6:5f76dd718dc3 374 );
HenryWTriff 6:5f76dd718dc3 375 Graphics.Start_Sequence(1, LCD);
HenryWTriff 6:5f76dd718dc3 376 LEDs.Start_Sequence(back_light, 1, Device);
HenryWTriff 6:5f76dd718dc3 377 LCD.refresh();
HenryWTriff 6:5f76dd718dc3 378 wait(1);
HenryWTriff 6:5f76dd718dc3 379 LCD.clear();
HenryWTriff 6:5f76dd718dc3 380 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 381 translation,
HenryWTriff 6:5f76dd718dc3 382 angle,
HenryWTriff 6:5f76dd718dc3 383 squish,
HenryWTriff 6:5f76dd718dc3 384 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 6:5f76dd718dc3 385 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 6:5f76dd718dc3 386 (Line_2D *)Map_1_Walls,
HenryWTriff 6:5f76dd718dc3 387 (Point_2D *)Map_1_Flags,
HenryWTriff 6:5f76dd718dc3 388 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 6:5f76dd718dc3 389 Map_1,
HenryWTriff 6:5f76dd718dc3 390 Ghost.Play(ghost_available, race_time),
HenryWTriff 5:2d9f3c36bcb9 391 LCD
HenryWTriff 5:2d9f3c36bcb9 392 );
HenryWTriff 6:5f76dd718dc3 393 Graphics.Start_Sequence(0, LCD);
HenryWTriff 6:5f76dd718dc3 394 LEDs.Start_Sequence(back_light, 0, Device);
HenryWTriff 5:2d9f3c36bcb9 395 LCD.refresh();
HenryWTriff 6:5f76dd718dc3 396 wait(1);
HenryWTriff 6:5f76dd718dc3 397 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 398
HenryWTriff 6:5f76dd718dc3 399 while(laps <= number_of_laps) {
HenryWTriff 6:5f76dd718dc3 400 //MECHANICS
HenryWTriff 6:5f76dd718dc3 401 off_track = Mechanics.Is_Offtrack(translation, Map_1_Off_Track_Square, Map_1_Off_Track_Triangle, Map_1);
HenryWTriff 6:5f76dd718dc3 402 out_of_bounds = Mechanics.Is_Out_Of_Bounds(translation, Map_1_Out_Of_Bounds_Square, Map_1_Out_Of_Bounds_Triangle, Map_1);
HenryWTriff 6:5f76dd718dc3 403 laps = Mechanics.Get_Laps(laps, Map_1_Gates, Map_1.number_of_gates, translation, lap_gate);
HenryWTriff 6:5f76dd718dc3 404 lap_gate = Mechanics.Get_Gate(Map_1_Gates, Map_1.number_of_gates, translation, lap_gate);
HenryWTriff 6:5f76dd718dc3 405
HenryWTriff 6:5f76dd718dc3 406 //CONTROLS
HenryWTriff 6:5f76dd718dc3 407 angle = Controls.Get_Angle(angle, handling, gyro_enabled, Gyro, Device);
HenryWTriff 6:5f76dd718dc3 408 translation = Controls.Get_Translation(translation, angle, speed, out_of_bounds, Device);
HenryWTriff 6:5f76dd718dc3 409 speed = Controls.Get_Speed(speed, max_speed, off_track, out_of_bounds, Device);
HenryWTriff 6:5f76dd718dc3 410 speed = Mechanics.Get_Boost_Speed(Map_1_Boost_Plates, Map_1.number_of_boost_plates, translation, speed);
HenryWTriff 6:5f76dd718dc3 411
HenryWTriff 6:5f76dd718dc3 412 //LEDS
HenryWTriff 6:5f76dd718dc3 413 LEDs.Speed(leds, speed, max_speed, Device);
HenryWTriff 6:5f76dd718dc3 414
HenryWTriff 6:5f76dd718dc3 415 //GHOST
HenryWTriff 6:5f76dd718dc3 416 Ghost.Record(translation, race_time);
HenryWTriff 6:5f76dd718dc3 417
HenryWTriff 6:5f76dd718dc3 418 //GRAPHICS
HenryWTriff 6:5f76dd718dc3 419 LCD.clear();
HenryWTriff 6:5f76dd718dc3 420 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 6:5f76dd718dc3 421 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 422 translation,
HenryWTriff 6:5f76dd718dc3 423 angle,
HenryWTriff 6:5f76dd718dc3 424 squish,
HenryWTriff 6:5f76dd718dc3 425 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 6:5f76dd718dc3 426 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 6:5f76dd718dc3 427 (Line_2D *)Map_1_Walls,
HenryWTriff 6:5f76dd718dc3 428 (Point_2D *)Map_1_Flags,
HenryWTriff 6:5f76dd718dc3 429 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 6:5f76dd718dc3 430 Map_1,
HenryWTriff 6:5f76dd718dc3 431 Ghost.Play(ghost_available, race_time),
HenryWTriff 6:5f76dd718dc3 432 LCD
HenryWTriff 6:5f76dd718dc3 433 );
HenryWTriff 6:5f76dd718dc3 434 Graphics.Draw_Laps(laps, LCD);
HenryWTriff 6:5f76dd718dc3 435 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 6:5f76dd718dc3 436 LCD.refresh();
HenryWTriff 6:5f76dd718dc3 437 wait((1 / float(game_fps)));
HenryWTriff 6:5f76dd718dc3 438 race_time++;
HenryWTriff 6:5f76dd718dc3 439
HenryWTriff 6:5f76dd718dc3 440 }
HenryWTriff 6:5f76dd718dc3 441 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 442 LCD.clear();
HenryWTriff 6:5f76dd718dc3 443 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 444 translation,
HenryWTriff 6:5f76dd718dc3 445 angle,
HenryWTriff 6:5f76dd718dc3 446 squish,
HenryWTriff 6:5f76dd718dc3 447 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 6:5f76dd718dc3 448 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 6:5f76dd718dc3 449 (Line_2D *)Map_1_Walls,
HenryWTriff 6:5f76dd718dc3 450 (Point_2D *)Map_1_Flags,
HenryWTriff 6:5f76dd718dc3 451 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 6:5f76dd718dc3 452 Map_1,
HenryWTriff 6:5f76dd718dc3 453 Ghost.Play(ghost_available, race_time),
HenryWTriff 6:5f76dd718dc3 454 LCD
HenryWTriff 6:5f76dd718dc3 455 );
HenryWTriff 6:5f76dd718dc3 456 Graphics.Finish(LCD);
HenryWTriff 6:5f76dd718dc3 457 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 6:5f76dd718dc3 458 LCD.refresh();
HenryWTriff 6:5f76dd718dc3 459 ghost_available = true;
HenryWTriff 6:5f76dd718dc3 460 Ghost.Copy(race_time);
HenryWTriff 6:5f76dd718dc3 461
HenryWTriff 6:5f76dd718dc3 462 //RESET
HenryWTriff 6:5f76dd718dc3 463 angle = 0;
HenryWTriff 6:5f76dd718dc3 464 Point_2D test = {0,0};
HenryWTriff 6:5f76dd718dc3 465 translation = test;
HenryWTriff 6:5f76dd718dc3 466 squish = 0.15;
HenryWTriff 6:5f76dd718dc3 467 speed = 0;
HenryWTriff 6:5f76dd718dc3 468 max_speed = 4;
HenryWTriff 6:5f76dd718dc3 469 handling = 2;
HenryWTriff 6:5f76dd718dc3 470 off_track = false;
HenryWTriff 6:5f76dd718dc3 471 out_of_bounds = false;
HenryWTriff 6:5f76dd718dc3 472 lap_gate = 0;
HenryWTriff 6:5f76dd718dc3 473 laps = 1;
HenryWTriff 6:5f76dd718dc3 474 direction = true;
HenryWTriff 6:5f76dd718dc3 475 race_time = 0;
HenryWTriff 6:5f76dd718dc3 476
HenryWTriff 6:5f76dd718dc3 477 wait(3);
HenryWTriff 2:d08b6a1eaf2b 478 }
eencae 0:b7f1f47bb26a 479 }
eencae 0:b7f1f47bb26a 480