Henry Triff / Mbed 2 deprecated ELEC2645_Project_el18ht

Dependencies:   mbed

Committer:
HenryWTriff
Date:
Mon Mar 02 18:11:04 2020 +0000
Revision:
8:4503c92acaf6
Parent:
7:2ce6e90f6d47
Child:
9:7b1093d3f03a
Majour Bug fix, Second map added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HenryWTriff 5:2d9f3c36bcb9 1 #include "Mechanics.h"
HenryWTriff 5:2d9f3c36bcb9 2
HenryWTriff 7:2ce6e90f6d47 3 //*********
HenryWTriff 7:2ce6e90f6d47 4 // SPEED
HenryWTriff 7:2ce6e90f6d47 5 //*********
HenryWTriff 7:2ce6e90f6d47 6
HenryWTriff 7:2ce6e90f6d47 7 float Mechanics::Get_Speed(float speed, float max_speed, float acceleration, float deceleration, float off_track_speed, Point_2D position, Square_2D *offtrack_square, Triangle_2D *offtrack_triangle, Square_2D *out_of_bounds_square, Triangle_2D *out_of_bounds_triangle, Triangle_2D *plates, Map_Data map_info, Gamepad &Device)
HenryWTriff 7:2ce6e90f6d47 8 {
HenryWTriff 7:2ce6e90f6d47 9 bool offtrack = Is_Offtrack(position, offtrack_square, offtrack_triangle, map_info);
HenryWTriff 7:2ce6e90f6d47 10 bool out_of_bounds = Is_Out_Of_Bounds(position, out_of_bounds_square, out_of_bounds_triangle, map_info);
HenryWTriff 7:2ce6e90f6d47 11
HenryWTriff 7:2ce6e90f6d47 12 if(Device.X_held() == true && Device.B_held() == false) {
HenryWTriff 7:2ce6e90f6d47 13 if(speed >= 0 && speed < max_speed) {
HenryWTriff 7:2ce6e90f6d47 14 speed += acceleration;
HenryWTriff 7:2ce6e90f6d47 15 } else if(speed < 0) {
HenryWTriff 7:2ce6e90f6d47 16 speed = 0;
HenryWTriff 7:2ce6e90f6d47 17 }
HenryWTriff 7:2ce6e90f6d47 18 } else if(Device.B_held() == true && Device.X_held() == false) {
HenryWTriff 7:2ce6e90f6d47 19 if(speed >= deceleration) {
HenryWTriff 7:2ce6e90f6d47 20 speed -= deceleration;
HenryWTriff 7:2ce6e90f6d47 21 } else if(speed <= 0) {
HenryWTriff 7:2ce6e90f6d47 22 speed = -1;
HenryWTriff 7:2ce6e90f6d47 23 }
HenryWTriff 7:2ce6e90f6d47 24 } else if(Device.B_held() == false && Device.X_held() == false) {
HenryWTriff 7:2ce6e90f6d47 25 if(speed > 0) {
HenryWTriff 7:2ce6e90f6d47 26 speed -= 0.05;
HenryWTriff 7:2ce6e90f6d47 27 } else {
HenryWTriff 7:2ce6e90f6d47 28 speed = 0;
HenryWTriff 7:2ce6e90f6d47 29 }
HenryWTriff 7:2ce6e90f6d47 30 }
HenryWTriff 7:2ce6e90f6d47 31 if(offtrack == true) {
HenryWTriff 7:2ce6e90f6d47 32 if(speed > off_track_speed) {
HenryWTriff 7:2ce6e90f6d47 33 speed -= 0.10;
HenryWTriff 7:2ce6e90f6d47 34 }
HenryWTriff 7:2ce6e90f6d47 35 }
HenryWTriff 7:2ce6e90f6d47 36
HenryWTriff 7:2ce6e90f6d47 37 if(out_of_bounds == true) {
HenryWTriff 7:2ce6e90f6d47 38 speed = 0;
HenryWTriff 7:2ce6e90f6d47 39 }
HenryWTriff 7:2ce6e90f6d47 40
HenryWTriff 7:2ce6e90f6d47 41 speed = Get_Boost_Speed(plates, map_info.number_of_boost_plates, position, speed);
HenryWTriff 7:2ce6e90f6d47 42
HenryWTriff 7:2ce6e90f6d47 43 return speed;
HenryWTriff 7:2ce6e90f6d47 44 }
HenryWTriff 7:2ce6e90f6d47 45
HenryWTriff 7:2ce6e90f6d47 46 // COMBINING
HenryWTriff 7:2ce6e90f6d47 47
HenryWTriff 5:2d9f3c36bcb9 48 bool Mechanics::Is_Offtrack(Point_2D position, Square_2D offtrack_square[], Triangle_2D offtrack_triangle[], Map_Data map_info)
HenryWTriff 5:2d9f3c36bcb9 49 {
HenryWTriff 8:4503c92acaf6 50 return (Is_Offtrack_Square(offtrack_square, map_info.number_of_off_track_squares, position) || Is_Offtrack_Triangle(offtrack_triangle, map_info.number_of_off_track_triangles, position));
HenryWTriff 5:2d9f3c36bcb9 51 }
HenryWTriff 5:2d9f3c36bcb9 52
HenryWTriff 7:2ce6e90f6d47 53 bool Mechanics::Is_Out_Of_Bounds(Point_2D position, Square_2D out_of_bounds_square[], Triangle_2D out_of_bounds_triangle[], Map_Data map_info)
HenryWTriff 5:2d9f3c36bcb9 54 {
HenryWTriff 7:2ce6e90f6d47 55 return (Is_Out_Of_Bounds_Square(out_of_bounds_square, map_info.number_of_out_of_bounds_squares, position) || Is_Out_Of_Bounds_Triangle(out_of_bounds_triangle, map_info.number_of_out_of_bounds_triangles, position));
HenryWTriff 5:2d9f3c36bcb9 56 }
HenryWTriff 5:2d9f3c36bcb9 57
HenryWTriff 5:2d9f3c36bcb9 58 // OFF TRACK
HenryWTriff 5:2d9f3c36bcb9 59
HenryWTriff 5:2d9f3c36bcb9 60 bool Mechanics::Is_Offtrack_Square(Square_2D offtrack[], int size, Point_2D position)
HenryWTriff 5:2d9f3c36bcb9 61 {
HenryWTriff 5:2d9f3c36bcb9 62 for(int i = 0; i < size; i++) {
HenryWTriff 5:2d9f3c36bcb9 63 if(position.x > offtrack[i].TL.x && position.x < offtrack[i].BR.x && position.y < offtrack[i].TL.y && position.y > offtrack[i].BR.y ) {
HenryWTriff 5:2d9f3c36bcb9 64 return true;
HenryWTriff 5:2d9f3c36bcb9 65 }
HenryWTriff 5:2d9f3c36bcb9 66 }
HenryWTriff 5:2d9f3c36bcb9 67 return false;
HenryWTriff 5:2d9f3c36bcb9 68 }
HenryWTriff 5:2d9f3c36bcb9 69
HenryWTriff 5:2d9f3c36bcb9 70 bool Mechanics::Is_Offtrack_Triangle(Triangle_2D offtrack[], int size, Point_2D position)
HenryWTriff 5:2d9f3c36bcb9 71 {
HenryWTriff 5:2d9f3c36bcb9 72 for(int i = 0; i < size; i++) {
HenryWTriff 5:2d9f3c36bcb9 73 if(position.x > offtrack[i].TL.x && position.x < offtrack[i].BR.x && position.y < offtrack[i].TL.y && position.y > offtrack[i].BR.y ) {
HenryWTriff 5:2d9f3c36bcb9 74 if(offtrack[i].Type == 1) {
HenryWTriff 5:2d9f3c36bcb9 75 Point_2D Translated_position = {position.x - offtrack[i].TL.x, position.y - offtrack[i].TL.y};
HenryWTriff 5:2d9f3c36bcb9 76 float position_limit = (offtrack[i].BR.y - offtrack[i].TL.y) / (offtrack[i].BR.x - offtrack[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 77 if(Translated_position.y < position_limit) {
HenryWTriff 5:2d9f3c36bcb9 78 return true;
HenryWTriff 5:2d9f3c36bcb9 79 }
HenryWTriff 5:2d9f3c36bcb9 80 } else if(offtrack[i].Type == 2) {
HenryWTriff 5:2d9f3c36bcb9 81 Point_2D Translated_position = {position.x - offtrack[i].TL.x, position.y - offtrack[i].BR.y};
HenryWTriff 5:2d9f3c36bcb9 82 float position_limit = (offtrack[i].TL.y - offtrack[i].BR.y) / (offtrack[i].BR.x - offtrack[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 83 if(Translated_position.y > position_limit) {
HenryWTriff 5:2d9f3c36bcb9 84 return true;
HenryWTriff 5:2d9f3c36bcb9 85 }
HenryWTriff 5:2d9f3c36bcb9 86 } else if(offtrack[i].Type == 3) {
HenryWTriff 5:2d9f3c36bcb9 87 Point_2D Translated_position = {position.x - offtrack[i].TL.x, position.y - offtrack[i].TL.y};
HenryWTriff 5:2d9f3c36bcb9 88 float position_limit = (offtrack[i].BR.y - offtrack[i].TL.y) / (offtrack[i].BR.x - offtrack[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 89 if(Translated_position.y > position_limit) {
HenryWTriff 5:2d9f3c36bcb9 90 return true;
HenryWTriff 5:2d9f3c36bcb9 91 }
HenryWTriff 5:2d9f3c36bcb9 92 } else if(offtrack[i].Type == 4) {
HenryWTriff 5:2d9f3c36bcb9 93 Point_2D Translated_position = {position.x - offtrack[i].TL.x, position.y - offtrack[i].BR.y};
HenryWTriff 5:2d9f3c36bcb9 94 float position_limit = (offtrack[i].TL.y - offtrack[i].BR.y) / (offtrack[i].BR.x - offtrack[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 95 if(Translated_position.y < position_limit) {
HenryWTriff 5:2d9f3c36bcb9 96 return true;
HenryWTriff 5:2d9f3c36bcb9 97 }
HenryWTriff 5:2d9f3c36bcb9 98 }
HenryWTriff 5:2d9f3c36bcb9 99 }
HenryWTriff 5:2d9f3c36bcb9 100 }
HenryWTriff 5:2d9f3c36bcb9 101 return false;
HenryWTriff 5:2d9f3c36bcb9 102 }
HenryWTriff 5:2d9f3c36bcb9 103
HenryWTriff 5:2d9f3c36bcb9 104 // OUT OF BOUNDS
HenryWTriff 5:2d9f3c36bcb9 105
HenryWTriff 5:2d9f3c36bcb9 106 bool Mechanics::Is_Out_Of_Bounds_Square(Square_2D out_of_bounds[], int size, Point_2D position)
HenryWTriff 5:2d9f3c36bcb9 107 {
HenryWTriff 5:2d9f3c36bcb9 108 for(int i = 0; i < size; i++) {
HenryWTriff 5:2d9f3c36bcb9 109 if(position.x > out_of_bounds[i].TL.x && position.x < out_of_bounds[i].BR.x && position.y < out_of_bounds[i].TL.y && position.y > out_of_bounds[i].BR.y ) {
HenryWTriff 5:2d9f3c36bcb9 110 return true;
HenryWTriff 5:2d9f3c36bcb9 111 }
HenryWTriff 5:2d9f3c36bcb9 112 }
HenryWTriff 5:2d9f3c36bcb9 113 return false;
HenryWTriff 5:2d9f3c36bcb9 114 }
HenryWTriff 5:2d9f3c36bcb9 115
HenryWTriff 5:2d9f3c36bcb9 116 bool Mechanics::Is_Out_Of_Bounds_Triangle(Triangle_2D out_of_bounds[], int size, Point_2D position)
HenryWTriff 5:2d9f3c36bcb9 117 {
HenryWTriff 5:2d9f3c36bcb9 118 for(int i = 0; i < size; i++) {
HenryWTriff 5:2d9f3c36bcb9 119 if(position.x > out_of_bounds[i].TL.x && position.x < out_of_bounds[i].BR.x && position.y < out_of_bounds[i].TL.y && position.y > out_of_bounds[i].BR.y ) {
HenryWTriff 5:2d9f3c36bcb9 120 if(out_of_bounds[i].Type == 1) {
HenryWTriff 5:2d9f3c36bcb9 121 Point_2D Translated_position = {position.x - out_of_bounds[i].TL.x, position.y - out_of_bounds[i].TL.y};
HenryWTriff 5:2d9f3c36bcb9 122 float position_limit = (out_of_bounds[i].BR.y - out_of_bounds[i].TL.y) / (out_of_bounds[i].BR.x - out_of_bounds[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 123 if(Translated_position.y < position_limit) {
HenryWTriff 5:2d9f3c36bcb9 124 return true;
HenryWTriff 5:2d9f3c36bcb9 125 }
HenryWTriff 5:2d9f3c36bcb9 126 } else if(out_of_bounds[i].Type == 2) {
HenryWTriff 5:2d9f3c36bcb9 127 Point_2D Translated_position = {position.x - out_of_bounds[i].TL.x, position.y - out_of_bounds[i].BR.y};
HenryWTriff 5:2d9f3c36bcb9 128 float position_limit = (out_of_bounds[i].TL.y - out_of_bounds[i].BR.y) / (out_of_bounds[i].BR.x - out_of_bounds[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 129 if(Translated_position.y > position_limit) {
HenryWTriff 5:2d9f3c36bcb9 130 return true;
HenryWTriff 5:2d9f3c36bcb9 131 }
HenryWTriff 5:2d9f3c36bcb9 132 } else if(out_of_bounds[i].Type == 3) {
HenryWTriff 5:2d9f3c36bcb9 133 Point_2D Translated_position = {position.x - out_of_bounds[i].TL.x, position.y - out_of_bounds[i].TL.y};
HenryWTriff 5:2d9f3c36bcb9 134 float position_limit = (out_of_bounds[i].BR.y - out_of_bounds[i].TL.y) / (out_of_bounds[i].BR.x - out_of_bounds[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 135 if(Translated_position.y > position_limit) {
HenryWTriff 5:2d9f3c36bcb9 136 return true;
HenryWTriff 5:2d9f3c36bcb9 137 }
HenryWTriff 5:2d9f3c36bcb9 138 } else if(out_of_bounds[i].Type == 4) {
HenryWTriff 5:2d9f3c36bcb9 139 Point_2D Translated_position = {position.x - out_of_bounds[i].TL.x, position.y - out_of_bounds[i].BR.y};
HenryWTriff 5:2d9f3c36bcb9 140 float position_limit = (out_of_bounds[i].TL.y - out_of_bounds[i].BR.y) / (out_of_bounds[i].BR.x - out_of_bounds[i].TL.x) * Translated_position.x;
HenryWTriff 5:2d9f3c36bcb9 141 if(Translated_position.y < position_limit) {
HenryWTriff 5:2d9f3c36bcb9 142 return true;
HenryWTriff 5:2d9f3c36bcb9 143 }
HenryWTriff 5:2d9f3c36bcb9 144 }
HenryWTriff 5:2d9f3c36bcb9 145 }
HenryWTriff 5:2d9f3c36bcb9 146 }
HenryWTriff 5:2d9f3c36bcb9 147 return false;
HenryWTriff 5:2d9f3c36bcb9 148 }
HenryWTriff 5:2d9f3c36bcb9 149
HenryWTriff 7:2ce6e90f6d47 150 // BOOST PLATE
HenryWTriff 7:2ce6e90f6d47 151
HenryWTriff 7:2ce6e90f6d47 152 float Mechanics::Get_Boost_Speed(Triangle_2D plates[], int number_of_plates, Point_2D position, float speed)
HenryWTriff 7:2ce6e90f6d47 153 {
HenryWTriff 7:2ce6e90f6d47 154 for(int i = 0; i < number_of_plates; i++) {
HenryWTriff 7:2ce6e90f6d47 155 if(position.x > plates[i].TL.x && position.x < plates[i].BR.x && position.y < plates[i].TL.y && position.y > plates[i].BR.y) {
HenryWTriff 7:2ce6e90f6d47 156 speed = 6;
HenryWTriff 7:2ce6e90f6d47 157 }
HenryWTriff 7:2ce6e90f6d47 158 }
HenryWTriff 7:2ce6e90f6d47 159 return speed;
HenryWTriff 7:2ce6e90f6d47 160 }
HenryWTriff 7:2ce6e90f6d47 161
HenryWTriff 7:2ce6e90f6d47 162 //******************
HenryWTriff 7:2ce6e90f6d47 163 // GATES AND LAPS
HenryWTriff 7:2ce6e90f6d47 164 //******************
HenryWTriff 5:2d9f3c36bcb9 165
HenryWTriff 5:2d9f3c36bcb9 166 int Mechanics::Get_Gate(Square_2D gates[], int number_of_gates, Point_2D position, int current_gate)
HenryWTriff 5:2d9f3c36bcb9 167 {
HenryWTriff 5:2d9f3c36bcb9 168 int next_gate;
HenryWTriff 5:2d9f3c36bcb9 169
HenryWTriff 5:2d9f3c36bcb9 170 if(current_gate + 1 <= (number_of_gates - 1)) {
HenryWTriff 5:2d9f3c36bcb9 171 next_gate = current_gate + 1;
HenryWTriff 5:2d9f3c36bcb9 172 } else {
HenryWTriff 5:2d9f3c36bcb9 173 next_gate = 0;
HenryWTriff 5:2d9f3c36bcb9 174 }
HenryWTriff 5:2d9f3c36bcb9 175
HenryWTriff 5:2d9f3c36bcb9 176 if(position.x >= gates[next_gate].TL.x && position.x <= gates[next_gate].BR.x && position.y <= gates[next_gate].TL.y && position.y >= gates[next_gate].BR.y) {
HenryWTriff 5:2d9f3c36bcb9 177 return next_gate;
HenryWTriff 5:2d9f3c36bcb9 178 }
HenryWTriff 5:2d9f3c36bcb9 179
HenryWTriff 5:2d9f3c36bcb9 180 return current_gate;
HenryWTriff 5:2d9f3c36bcb9 181 }
HenryWTriff 5:2d9f3c36bcb9 182
HenryWTriff 5:2d9f3c36bcb9 183 int Mechanics::Get_Laps(int laps, Square_2D gates[], int number_of_gates, Point_2D position, int current_gate)
HenryWTriff 5:2d9f3c36bcb9 184 {
HenryWTriff 5:2d9f3c36bcb9 185 int next_gate;
HenryWTriff 5:2d9f3c36bcb9 186
HenryWTriff 5:2d9f3c36bcb9 187 if(current_gate + 1 <= (number_of_gates - 1)) {
HenryWTriff 5:2d9f3c36bcb9 188 next_gate = current_gate + 1;
HenryWTriff 5:2d9f3c36bcb9 189 } else {
HenryWTriff 5:2d9f3c36bcb9 190 next_gate = 0;
HenryWTriff 5:2d9f3c36bcb9 191 }
HenryWTriff 5:2d9f3c36bcb9 192 if(position.x >= gates[next_gate].TL.x && position.x <= gates[next_gate].BR.x && position.y <= gates[next_gate].TL.y && position.y >= gates[next_gate].BR.y) {
HenryWTriff 5:2d9f3c36bcb9 193 if(next_gate == 0) {
HenryWTriff 5:2d9f3c36bcb9 194 laps++;
HenryWTriff 5:2d9f3c36bcb9 195 }
HenryWTriff 5:2d9f3c36bcb9 196 }
HenryWTriff 5:2d9f3c36bcb9 197 return laps;
HenryWTriff 6:5f76dd718dc3 198 }
HenryWTriff 6:5f76dd718dc3 199
HenryWTriff 7:2ce6e90f6d47 200 //********
HenryWTriff 7:2ce6e90f6d47 201 // TIME
HenryWTriff 7:2ce6e90f6d47 202 //********
HenryWTriff 7:2ce6e90f6d47 203
HenryWTriff 6:5f76dd718dc3 204 Time Mechanics::Convert_To_Time(int game_fps, int number_of_frames)
HenryWTriff 6:5f76dd718dc3 205 {
HenryWTriff 6:5f76dd718dc3 206 int total_seconds = float(number_of_frames) / float(game_fps);
HenryWTriff 6:5f76dd718dc3 207 int seconds = total_seconds % 60;
HenryWTriff 6:5f76dd718dc3 208 float miliseconds_decimal = (float(number_of_frames) / float(game_fps)) - seconds;
HenryWTriff 6:5f76dd718dc3 209 int miliseconds = float(miliseconds_decimal * 1000);
HenryWTriff 6:5f76dd718dc3 210 int minuites = (total_seconds - seconds) / 60;
HenryWTriff 6:5f76dd718dc3 211 return {minuites, seconds, miliseconds};
HenryWTriff 6:5f76dd718dc3 212 }
HenryWTriff 6:5f76dd718dc3 213
HenryWTriff 7:2ce6e90f6d47 214 //*************
HenryWTriff 7:2ce6e90f6d47 215 // GET ANGLE
HenryWTriff 7:2ce6e90f6d47 216 //*************
HenryWTriff 6:5f76dd718dc3 217
HenryWTriff 7:2ce6e90f6d47 218 int Mechanics::Get_Angle(int angle, int handling, bool gyro_enabled, FXOS8700CQ &Gyro, Gamepad &Device)
HenryWTriff 7:2ce6e90f6d47 219 {
HenryWTriff 7:2ce6e90f6d47 220 if(gyro_enabled == false) {
HenryWTriff 7:2ce6e90f6d47 221 int Stick_Position = Device.get_direction();
HenryWTriff 7:2ce6e90f6d47 222 if(Stick_Position == 2 || Stick_Position == 3 || Stick_Position == 4) {
HenryWTriff 7:2ce6e90f6d47 223 angle += handling;
HenryWTriff 7:2ce6e90f6d47 224 } else if(Stick_Position == 6 || Stick_Position == 7 || Stick_Position == 8) {
HenryWTriff 7:2ce6e90f6d47 225 angle -= handling;
HenryWTriff 7:2ce6e90f6d47 226 }
HenryWTriff 7:2ce6e90f6d47 227 return angle;
HenryWTriff 7:2ce6e90f6d47 228 } else {
HenryWTriff 7:2ce6e90f6d47 229 Gyro_Data Gyro_Tilt = Gyro.get_values();
HenryWTriff 7:2ce6e90f6d47 230 float tilt = Gyro_Tilt.ay * 90;
HenryWTriff 7:2ce6e90f6d47 231 if(tilt > 5) {
HenryWTriff 7:2ce6e90f6d47 232 if(tilt < 40) {
HenryWTriff 7:2ce6e90f6d47 233 angle += handling * (tilt/40);
HenryWTriff 7:2ce6e90f6d47 234 } else {
HenryWTriff 7:2ce6e90f6d47 235 angle += handling;
HenryWTriff 7:2ce6e90f6d47 236 }
HenryWTriff 7:2ce6e90f6d47 237 } else if(tilt < -5) {
HenryWTriff 7:2ce6e90f6d47 238 if(tilt > -40) {
HenryWTriff 7:2ce6e90f6d47 239 angle -= handling * (tilt/-40);
HenryWTriff 7:2ce6e90f6d47 240 } else {
HenryWTriff 7:2ce6e90f6d47 241 angle -= handling;
HenryWTriff 7:2ce6e90f6d47 242 }
HenryWTriff 7:2ce6e90f6d47 243 }
HenryWTriff 7:2ce6e90f6d47 244 return angle;
HenryWTriff 7:2ce6e90f6d47 245 }
HenryWTriff 7:2ce6e90f6d47 246 }
HenryWTriff 7:2ce6e90f6d47 247
HenryWTriff 7:2ce6e90f6d47 248 //*******************
HenryWTriff 7:2ce6e90f6d47 249 // GET TRANSLATION
HenryWTriff 7:2ce6e90f6d47 250 //*******************
HenryWTriff 7:2ce6e90f6d47 251
HenryWTriff 7:2ce6e90f6d47 252 Point_2D Mechanics::Get_Translation(Point_2D in, float angle, float speed, Square_2D *out_of_bounds_square, Triangle_2D *out_of_bounds_triangle, Map_Data map_info, Gamepad &Device)
HenryWTriff 7:2ce6e90f6d47 253 {
HenryWTriff 7:2ce6e90f6d47 254 float x = in.x;
HenryWTriff 7:2ce6e90f6d47 255 float y = in.y;
HenryWTriff 7:2ce6e90f6d47 256 bool out_of_bounds = Is_Out_Of_Bounds(in, out_of_bounds_square, out_of_bounds_triangle, map_info);
HenryWTriff 8:4503c92acaf6 257
HenryWTriff 7:2ce6e90f6d47 258 if(out_of_bounds == true) {
HenryWTriff 7:2ce6e90f6d47 259 float temp_speed = -4;
HenryWTriff 7:2ce6e90f6d47 260 y += temp_speed * cos(-angle * PI / 180);
HenryWTriff 7:2ce6e90f6d47 261 x -= temp_speed * sin(-angle * PI / 180);
HenryWTriff 7:2ce6e90f6d47 262 }
HenryWTriff 7:2ce6e90f6d47 263 y += speed * cos(-angle * PI / 180);
HenryWTriff 7:2ce6e90f6d47 264 x -= speed * sin(-angle * PI / 180);
HenryWTriff 7:2ce6e90f6d47 265
HenryWTriff 7:2ce6e90f6d47 266 return {x,y};
HenryWTriff 7:2ce6e90f6d47 267 }
HenryWTriff 7:2ce6e90f6d47 268
HenryWTriff 7:2ce6e90f6d47 269 //**************
HenryWTriff 7:2ce6e90f6d47 270 // CAR MODELS
HenryWTriff 7:2ce6e90f6d47 271 //**************
HenryWTriff 7:2ce6e90f6d47 272
HenryWTriff 7:2ce6e90f6d47 273 float Mechanics::Get_Max_Speed(int car_model)
HenryWTriff 6:5f76dd718dc3 274 {
HenryWTriff 7:2ce6e90f6d47 275 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
HenryWTriff 7:2ce6e90f6d47 276
HenryWTriff 7:2ce6e90f6d47 277 if(car_model == Stupid) {
HenryWTriff 7:2ce6e90f6d47 278 return 8;
HenryWTriff 7:2ce6e90f6d47 279 } else if(car_model == Racecar) {
HenryWTriff 7:2ce6e90f6d47 280 return 6;
HenryWTriff 7:2ce6e90f6d47 281 } else if(car_model == Sportscar) {
HenryWTriff 7:2ce6e90f6d47 282 return 4;
HenryWTriff 7:2ce6e90f6d47 283 } else if(car_model == Drifter) {
HenryWTriff 7:2ce6e90f6d47 284 return 4;
HenryWTriff 7:2ce6e90f6d47 285 } else if(car_model == Offroad) {
HenryWTriff 7:2ce6e90f6d47 286 return 2;
HenryWTriff 7:2ce6e90f6d47 287 } else if(car_model == Basic) {
HenryWTriff 7:2ce6e90f6d47 288 return 3;
HenryWTriff 7:2ce6e90f6d47 289 }
HenryWTriff 7:2ce6e90f6d47 290 }
HenryWTriff 7:2ce6e90f6d47 291
HenryWTriff 7:2ce6e90f6d47 292 float Mechanics::Get_Acceleration(int car_model)
HenryWTriff 7:2ce6e90f6d47 293 {
HenryWTriff 7:2ce6e90f6d47 294 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
HenryWTriff 7:2ce6e90f6d47 295
HenryWTriff 7:2ce6e90f6d47 296 if(car_model == Stupid) {
HenryWTriff 7:2ce6e90f6d47 297 return 0.15;
HenryWTriff 7:2ce6e90f6d47 298 } else if(car_model == Racecar) {
HenryWTriff 7:2ce6e90f6d47 299 return 0.1;
HenryWTriff 7:2ce6e90f6d47 300 } else if(car_model == Sportscar) {
HenryWTriff 7:2ce6e90f6d47 301 return 0.08;
HenryWTriff 7:2ce6e90f6d47 302 } else if(car_model == Drifter) {
HenryWTriff 7:2ce6e90f6d47 303 return 0.05;
HenryWTriff 7:2ce6e90f6d47 304 } else if(car_model == Offroad) {
HenryWTriff 7:2ce6e90f6d47 305 return 0.02;
HenryWTriff 7:2ce6e90f6d47 306 } else if(car_model == Basic) {
HenryWTriff 7:2ce6e90f6d47 307 return 0.03;
HenryWTriff 6:5f76dd718dc3 308 }
HenryWTriff 7:2ce6e90f6d47 309
HenryWTriff 7:2ce6e90f6d47 310 }
HenryWTriff 7:2ce6e90f6d47 311
HenryWTriff 7:2ce6e90f6d47 312 float Mechanics::Get_Deceleration(int car_model)
HenryWTriff 7:2ce6e90f6d47 313 {
HenryWTriff 7:2ce6e90f6d47 314 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
HenryWTriff 7:2ce6e90f6d47 315
HenryWTriff 7:2ce6e90f6d47 316 if(car_model == Stupid) {
HenryWTriff 7:2ce6e90f6d47 317 return 0.3;
HenryWTriff 7:2ce6e90f6d47 318 } else if(car_model == Racecar) {
HenryWTriff 7:2ce6e90f6d47 319 return 0.15;
HenryWTriff 7:2ce6e90f6d47 320 } else if(car_model == Sportscar) {
HenryWTriff 7:2ce6e90f6d47 321 return 0.1;
HenryWTriff 7:2ce6e90f6d47 322 } else if(car_model == Drifter) {
HenryWTriff 7:2ce6e90f6d47 323 return 0.03;
HenryWTriff 7:2ce6e90f6d47 324 } else if(car_model == Offroad) {
HenryWTriff 7:2ce6e90f6d47 325 return 0.03;
HenryWTriff 7:2ce6e90f6d47 326 } else if(car_model == Basic) {
HenryWTriff 7:2ce6e90f6d47 327 return 0.05;
HenryWTriff 7:2ce6e90f6d47 328 }
HenryWTriff 7:2ce6e90f6d47 329 }
HenryWTriff 7:2ce6e90f6d47 330
HenryWTriff 7:2ce6e90f6d47 331 float Mechanics::Get_Off_Road_Speed(int car_model)
HenryWTriff 7:2ce6e90f6d47 332 {
HenryWTriff 7:2ce6e90f6d47 333 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
HenryWTriff 7:2ce6e90f6d47 334
HenryWTriff 7:2ce6e90f6d47 335 if(car_model == Stupid) {
HenryWTriff 7:2ce6e90f6d47 336 return 2;
HenryWTriff 7:2ce6e90f6d47 337 } else if(car_model == Racecar) {
HenryWTriff 7:2ce6e90f6d47 338 return 0.5;
HenryWTriff 7:2ce6e90f6d47 339 } else if(car_model == Sportscar) {
HenryWTriff 7:2ce6e90f6d47 340 return 0.8;
HenryWTriff 7:2ce6e90f6d47 341 } else if(car_model == Drifter) {
HenryWTriff 7:2ce6e90f6d47 342 return 0.3;
HenryWTriff 7:2ce6e90f6d47 343 } else if(car_model == Offroad) {
HenryWTriff 7:2ce6e90f6d47 344 return 2;
HenryWTriff 7:2ce6e90f6d47 345 } else if(car_model == Basic) {
HenryWTriff 7:2ce6e90f6d47 346 return 0.8;
HenryWTriff 7:2ce6e90f6d47 347 }
HenryWTriff 7:2ce6e90f6d47 348 }
HenryWTriff 7:2ce6e90f6d47 349
HenryWTriff 7:2ce6e90f6d47 350 int Mechanics::Get_Handling(int car_model)
HenryWTriff 7:2ce6e90f6d47 351 {
HenryWTriff 7:2ce6e90f6d47 352 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
HenryWTriff 7:2ce6e90f6d47 353
HenryWTriff 7:2ce6e90f6d47 354 if(car_model == Stupid) {
HenryWTriff 7:2ce6e90f6d47 355 return 3;
HenryWTriff 7:2ce6e90f6d47 356 } else if(car_model == Racecar) {
HenryWTriff 7:2ce6e90f6d47 357 return 3;
HenryWTriff 7:2ce6e90f6d47 358 } else if(car_model == Sportscar) {
HenryWTriff 7:2ce6e90f6d47 359 return 2;
HenryWTriff 7:2ce6e90f6d47 360 } else if(car_model == Drifter) {
HenryWTriff 7:2ce6e90f6d47 361 return 2;
HenryWTriff 7:2ce6e90f6d47 362 } else if(car_model == Offroad) {
HenryWTriff 7:2ce6e90f6d47 363 return 1;
HenryWTriff 7:2ce6e90f6d47 364 } else if(car_model == Basic) {
HenryWTriff 7:2ce6e90f6d47 365 return 2;
HenryWTriff 7:2ce6e90f6d47 366 }
HenryWTriff 6:5f76dd718dc3 367 }
HenryWTriff 6:5f76dd718dc3 368
HenryWTriff 6:5f76dd718dc3 369
HenryWTriff 6:5f76dd718dc3 370
HenryWTriff 6:5f76dd718dc3 371
HenryWTriff 6:5f76dd718dc3 372
HenryWTriff 6:5f76dd718dc3 373
HenryWTriff 6:5f76dd718dc3 374