Henry Triff / Mbed 2 deprecated ELEC2645_Project_el18ht

Dependencies:   mbed

Committer:
HenryWTriff
Date:
Sat Feb 22 23:13:25 2020 +0000
Revision:
7:2ce6e90f6d47
Parent:
6:5f76dd718dc3
Child:
8:4503c92acaf6
Menus Added (inc. Settings),  Different classes of cars

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