ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Sun May 17 21:14:39 2020 +0000
Revision:
35:db257b7bdefc
Parent:
33:011f0f7cf3ce
Child:
37:65c9e5a65738
added levels, object class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19tb 35:db257b7bdefc 1 #include "Frogger
el19tb 35:db257b7bdefc 2 #include "Menu.h"
el19tb 35:db257b7bdefc 3 #include "GraphicEngine.h"
el19tb 35:db257b7bdefc 4 #include <vector>
el19tb 35:db257b7bdefc 5 #include <stdio.h>
el19tb 35:db257b7bdefc 6 #include <cstddef>
el19tb 35:db257b7bdefc 7
el19tb 35:db257b7bdefc 8 //there will be multiple cars
el19tb 35:db257b7bdefc 9 Car firstLane[2];
el19tb 35:db257b7bdefc 10 Car secondLane[2];
el19tb 35:db257b7bdefc 11 Car thirdLane[3];
el19tb 35:db257b7bdefc 12 Car fourthLane[3];
el19tb 35:db257b7bdefc 13 Car log1Lane[2];
el19tb 35:db257b7bdefc 14 Car lo[2];
el19tb 35:db257b7bdefc 15 Car logger[2];
el19tb 35:db257b7bdefc 16 Car vop[2];
el19tb 35:db257b7bdefc 17
el19tb 35:db257b7bdefc 18
el19tb 35:db257b7bdefc 19 bool frogLog = false;
el19tb 35:db257b7bdefc 20 bool frogDie = false; // whenever the frog is above safety lane in the middle
el19tb 35:db257b7bdefc 21 bool attach = false;
el19tb 35:db257b7bdefc 22
el19tb 35:db257b7bdefc 23 Frogger::Frogger(GraphicEngine *engine, Level *level, Frog *frog)
el19tb 35:db257b7bdefc 24 {
el19tb 35:db257b7bdefc 25 this->graphics = engine; // get the renderer in place
el19tb 35:db257b7bdefc 26 this->level = level; // one level object per engine
el19tb 35:db257b7bdefc 27 this->frog = frog; // one frog object per run
el19tb 35:db257b7bdefc 28
el19tb 35:db257b7bdefc 29 initializeParams(); // initialize the software parameters
el19tb 35:db257b7bdefc 30 initializeEmbeddedSystem(); // initialize the hardware paramaters
el19tb 35:db257b7bdefc 31 }
el19tb 35:db257b7bdefc 32
el19tb 35:db257b7bdefc 33 void Frogger::initializeParams()
el19tb 35:db257b7bdefc 34 {
el19tb 35:db257b7bdefc 35 // screen sizes
el19tb 35:db257b7bdefc 36 screenW = 84; // width
el19tb 35:db257b7bdefc 37 screenH = 48; // height
el19tb 35:db257b7bdefc 38
el19tb 35:db257b7bdefc 39 // grid values
el19tb 35:db257b7bdefc 40 grid = 4; // size of game grid system
el19tb 35:db257b7bdefc 41 grid_width = 22; // size of screen width in grid units
el19tb 35:db257b7bdefc 42 }
el19tb 35:db257b7bdefc 43
el19tb 35:db257b7bdefc 44 void Frogger::initializeEmbeddedSystem()
el19tb 35:db257b7bdefc 45 {
el19tb 35:db257b7bdefc 46 //game setup
el19tb 35:db257b7bdefc 47 graphics.init(); // initialize the LCD object
el19tb 35:db257b7bdefc 48 graphics.contrast(); // set the contrast to 0.4
el19tb 35:db257b7bdefc 49 graphics.backLightOn(); // turn on the backlight
el19tb 35:db257b7bdefc 50 gamepad.init(); // initialize the actual game pad
el19tb 35:db257b7bdefc 51 }
el19tb 35:db257b7bdefc 52
el19tb 35:db257b7bdefc 53 //main function that starts the game
el19tb 35:db257b7bdefc 54 void CrossyChicken::start(){
el19tb 35:db257b7bdefc 55
el19tb 35:db257b7bdefc 56 row_number = 1;
el19tb 35:db257b7bdefc 57
el19tb 35:db257b7bdefc 58 //keep reading and processing user input
el19tb 35:db257b7bdefc 59 while(1) {
el19tb 35:db257b7bdefc 60 graphics.clear();
el19tb 35:db257b7bdefc 61
el19tb 35:db257b7bdefc 62 for(int i = 0; i < 2; i++){
el19tb 35:db257b7bdefc 63 moveCar(&firstLane[i], 2, (-2)); // change x position (moving)
el19tb 35:db257b7bdefc 64 }
el19tb 35:db257b7bdefc 65
el19tb 35:db257b7bdefc 66 for(int x = 0; x < 2; x++){
el19tb 35:db257b7bdefc 67 moveCar(&secondLane[x], 1, 1);
el19tb 35:db257b7bdefc 68 }
el19tb 35:db257b7bdefc 69
el19tb 35:db257b7bdefc 70 for(int t = 0; t < 3; t++){
el19tb 35:db257b7bdefc 71 moveCar(&thirdLane[t], 2, 1);
el19tb 35:db257b7bdefc 72 }
el19tb 35:db257b7bdefc 73
el19tb 35:db257b7bdefc 74 for(int c = 0; c < 3; c++){
el19tb 35:db257b7bdefc 75 moveCar(&fourthLane[c], 2, 1);
el19tb 35:db257b7bdefc 76 }
el19tb 35:db257b7bdefc 77
el19tb 35:db257b7bdefc 78 for(int v = 0; v < 2; v++){
el19tb 35:db257b7bdefc 79 moveCar(&log1Lane[v], 1, 1);
el19tb 35:db257b7bdefc 80 }
el19tb 35:db257b7bdefc 81
el19tb 35:db257b7bdefc 82 for(int b = 0; b < 2; b++){
el19tb 35:db257b7bdefc 83 moveCar(&lo[b], 2, 1);
el19tb 35:db257b7bdefc 84 // moveCar(&logger[b], 2, 2);
el19tb 35:db257b7bdefc 85 moveCar(&vop[b], 1, 2);
el19tb 35:db257b7bdefc 86
el19tb 35:db257b7bdefc 87 }
el19tb 35:db257b7bdefc 88
el19tb 35:db257b7bdefc 89 graphics.showCar(firstLane);
el19tb 35:db257b7bdefc 90 graphics.showCar(secondLane);
el19tb 35:db257b7bdefc 91 graphics.showCar(thirdLane);
el19tb 35:db257b7bdefc 92 graphics.showCar(fourthLane);
el19tb 35:db257b7bdefc 93 graphics.showCar(log1Lane);
el19tb 35:db257b7bdefc 94 graphics.showCar(lo);
el19tb 35:db257b7bdefc 95 graphics.showCar(logger);
el19tb 35:db257b7bdefc 96 graphics.showCar(vop);
el19tb 35:db257b7bdefc 97
el19tb 35:db257b7bdefc 98 graphics.showChicken();
el19tb 35:db257b7bdefc 99 process_input();
el19tb 35:db257b7bdefc 100
el19tb 35:db257b7bdefc 101 // now when the chicken is above the safety
el19tb 35:db257b7bdefc 102 // lane we need to ensure that it only can go on logs
el19tb 35:db257b7bdefc 103 if(chicken.y < screenH - grid*6){
el19tb 35:db257b7bdefc 104 frogDie = true; // frog can die if it is in water
el19tb 35:db257b7bdefc 105
el19tb 35:db257b7bdefc 106 //if it is not in a log
el19tb 35:db257b7bdefc 107 for(int x = 0; x < 2; x++){
el19tb 35:db257b7bdefc 108 setCollision(&log1Lane[x]);
el19tb 35:db257b7bdefc 109 setCollision(&lo[x]);
el19tb 35:db257b7bdefc 110 setCollision(&logger[x]);
el19tb 35:db257b7bdefc 111 setCollision(&vop[x]);
el19tb 35:db257b7bdefc 112
el19tb 35:db257b7bdefc 113 if(attach){
el19tb 35:db257b7bdefc 114 frogOnLog(&log1Lane[x]);
el19tb 35:db257b7bdefc 115 frogOnLog(&lo[x]);
el19tb 35:db257b7bdefc 116 frogOnLog(&logger[x]);
el19tb 35:db257b7bdefc 117 frogOnLog(&vop[x]);
el19tb 35:db257b7bdefc 118
el19tb 35:db257b7bdefc 119 }
el19tb 35:db257b7bdefc 120 }
el19tb 35:db257b7bdefc 121
el19tb 35:db257b7bdefc 122 if(!attach){
el19tb 35:db257b7bdefc 123 graphics.print();
el19tb 35:db257b7bdefc 124 }
el19tb 35:db257b7bdefc 125 }
el19tb 35:db257b7bdefc 126
el19tb 35:db257b7bdefc 127 graphics.refresh();
el19tb 35:db257b7bdefc 128 wait_ms(70);
el19tb 35:db257b7bdefc 129 }
el19tb 35:db257b7bdefc 130 }
el19tb 35:db257b7bdefc 131
el19tb 35:db257b7bdefc 132 // log intersects then frog.x = log[i].speed
el19tb 35:db257b7bdefc 133 // frog is attached function
el19tb 35:db257b7bdefc 134 // detach the frog when user goes up or down
el19tb 35:db257b7bdefc 135 // if the frog is back to the safe zone detatch also
el19tb 35:db257b7bdefc 136 // whenever the frog moves detach
el19tb 35:db257b7bdefc 137 //A moves right
el19tb 35:db257b7bdefc 138 //X moves upward
el19tb 35:db257b7bdefc 139 //B moves downward
el19tb 35:db257b7bdefc 140 //Y moves left
el19tb 35:db257b7bdefc 141 void CrossyChicken::process_input() {
el19tb 35:db257b7bdefc 142 //determine the input
el19tb 35:db257b7bdefc 143 /* make this a switch statement */
el19tb 35:db257b7bdefc 144 if(gamepad.A_pressed()){
el19tb 35:db257b7bdefc 145 moveChicken(1,0);
el19tb 35:db257b7bdefc 146 attach = false;
el19tb 35:db257b7bdefc 147 } else if(gamepad.X_pressed()){
el19tb 35:db257b7bdefc 148 moveChicken(0,-1);
el19tb 35:db257b7bdefc 149 attach = false;
el19tb 35:db257b7bdefc 150 } else if(gamepad.B_pressed()){
el19tb 35:db257b7bdefc 151 moveChicken(0,1);
el19tb 35:db257b7bdefc 152 attach = false;
el19tb 35:db257b7bdefc 153 } else if(gamepad.Y_pressed()){
el19tb 35:db257b7bdefc 154 moveChicken(-1,0);
el19tb 35:db257b7bdefc 155 attach = false;
el19tb 35:db257b7bdefc 156 }
el19tb 35:db257b7bdefc 157 }
el19tb 35:db257b7bdefc 158
el19tb 35:db257b7bdefc 159 void CrossyChicken::createMultipleSafetyLane()
el19tb 35:db257b7bdefc 160 {
el19tb 35:db257b7bdefc 161 int min = 0; // start from the top, and draw till 0
el19tb 35:db257b7bdefc 162 int max = grid_width; // draw 21 objects to the first lane
el19tb 35:db257b7bdefc 163 int row = 1;
el19tb 35:db257b7bdefc 164 int x_fac = 1;
el19tb 35:db257b7bdefc 165
el19tb 35:db257b7bdefc 166 for(int x = 0; x < 2; x++){
el19tb 35:db257b7bdefc 167 creatSafetyObject(min, max, row, x_fac);
el19tb 35:db257b7bdefc 168 row += 6; // increment the rows to the next lane
el19tb 35:db257b7bdefc 169 min += 22; // fill in the vector with 22 grid units
el19tb 35:db257b7bdefc 170 max += 22;
el19tb 35:db257b7bdefc 171 }
el19tb 35:db257b7bdefc 172 }
el19tb 35:db257b7bdefc 173
el19tb 35:db257b7bdefc 174 void CrossyChicken::createSafetyObject(int min, int max, int row, int x_fac)
el19tb 35:db257b7bdefc 175 {
el19tb 35:db257b7bdefc 176 int state = 1;
el19tb 35:db257b7bdefc 177
el19tb 35:db257b7bdefc 178 for(int z = 0; z < 22; z++){
el19tb 35:db257b7bdefc 179 switch(state)
el19tb 35:db257b7bdefc 180 {
el19tb 35:db257b7bdefc 181 case 1:
el19tb 35:db257b7bdefc 182 safety_lane.push_back(z/x_fac, row, 'K'); // safety lane so row 0
el19tb 35:db257b7bdefc 183 state++;
el19tb 35:db257b7bdefc 184 break;
el19tb 35:db257b7bdefc 185 case 2:
el19tb 35:db257b7bdefc 186 safety_lane.push_back(z/x_fac, row, 'P'); // safety lane so row 0
el19tb 35:db257b7bdefc 187 state--; // back to inital state
el19tb 35:db257b7bdefc 188 break;
el19tb 35:db257b7bdefc 189 }
el19tb 35:db257b7bdefc 190 }
el19tb 35:db257b7bdefc 191 }
el19tb 35:db257b7bdefc 192
el19tb 35:db257b7bdefc 193 void CrossyChicken::drawSafety()
el19tb 35:db257b7bdefc 194 {
el19tb 35:db257b7bdefc 195 graphics.drawSafetyLanes(safety_lane);
el19tb 35:db257b7bdefc 196 }
el19tb 35:db257b7bdefc 197
el19tb 35:db257b7bdefc 198
el19tb 35:db257b7bdefc 199 void CrossyChicken::createMultipleRoadLane()
el19tb 35:db257b7bdefc 200 {
el19tb 35:db257b7bdefc 201 int min = 0; // start from the top, and draw till 0
el19tb 35:db257b7bdefc 202 int max = grid_width; // draw 21 objects to the first lane
el19tb 35:db257b7bdefc 203 int row = 1;
el19tb 35:db257b7bdefc 204
el19tb 35:db257b7bdefc 205 for(int x = 0; x < 4; x++){
el19tb 35:db257b7bdefc 206 createRoadLane(min, max, row);
el19tb 35:db257b7bdefc 207 row++; // increment the rows to the next lane
el19tb 35:db257b7bdefc 208 min += 22; // fill in the vector with 22 grid units
el19tb 35:db257b7bdefc 209 max += 22;
el19tb 35:db257b7bdefc 210 }
el19tb 35:db257b7bdefc 211 }
el19tb 35:db257b7bdefc 212
el19tb 35:db257b7bdefc 213 // every level is going to have the same amount of blocks
el19tb 35:db257b7bdefc 214 void CrossyChicken::createRoadLane(int min, int max, int row)
el19tb 35:db257b7bdefc 215 {
el19tb 35:db257b7bdefc 216 std::vector<Background>::size_type it;
el19tb 35:db257b7bdefc 217
el19tb 35:db257b7bdefc 218 // fill the road objects
el19tb 35:db257b7bdefc 219 for(int it = min; it != max; it++){
el19tb 35:db257b7bdefc 220 roads.push_back(it/row, row); // it is the x pos of the obj, row is the y pos
el19tb 35:db257b7bdefc 221 }
el19tb 35:db257b7bdefc 222 }
el19tb 35:db257b7bdefc 223
el19tb 35:db257b7bdefc 224 void CrossyChicken::drawRoadObjects()
el19tb 35:db257b7bdefc 225 {
el19tb 35:db257b7bdefc 226 graphics.getRoadObjects(roads);
el19tb 35:db257b7bdefc 227 }
el19tb 35:db257b7bdefc 228
el19tb 35:db257b7bdefc 229 void CrossyChicken::createMultipleLanesWater()
el19tb 35:db257b7bdefc 230 {
el19tb 35:db257b7bdefc 231 int min = 0; // start from the top, and draw till 0
el19tb 35:db257b7bdefc 232 int max = grid_width; // draw 21 objects to the first lane
el19tb 35:db257b7bdefc 233 int row = 7;
el19tb 35:db257b7bdefc 234 int x_fac = 1;
el19tb 35:db257b7bdefc 235
el19tb 35:db257b7bdefc 236 for(int x = 0; x < 3; x++){
el19tb 35:db257b7bdefc 237 if(x == 1){
el19tb 35:db257b7bdefc 238 createWaterLane(min, max, row, -0.6); // second row goes left
el19tb 35:db257b7bdefc 239 } else {
el19tb 35:db257b7bdefc 240 createWaterLane(min, max, row, 0.4); // rest of the rows go right
el19tb 35:db257b7bdefc 241 }
el19tb 35:db257b7bdefc 242
el19tb 35:db257b7bdefc 243 row++; // increment the rows to the next lane
el19tb 35:db257b7bdefc 244 min += grid_width; // fill in the vector with 22 grid units
el19tb 35:db257b7bdefc 245 max += grid_width;
el19tb 35:db257b7bdefc 246 }
el19tb 35:db257b7bdefc 247 }
el19tb 35:db257b7bdefc 248
el19tb 35:db257b7bdefc 249 void CrossyChicken::createWaterLane(int min, int max, int row, float speed, int x_fac){
el19tb 35:db257b7bdefc 250 int state = 1;
el19tb 35:db257b7bdefc 251 for(it = min; it < max; it++)
el19tb 35:db257b7bdefc 252 {
el19tb 35:db257b7bdefc 253 switch(state)
el19tb 35:db257b7bdefc 254 {
el19tb 35:db257b7bdefc 255 case 1: // initial state
el19tb 35:db257b7bdefc 256 water[it].push_back(it/x_fac, row, speed, 'F'); // first type of water
el19tb 35:db257b7bdefc 257 state++; // transition to next state
el19tb 35:db257b7bdefc 258 break;
el19tb 35:db257b7bdefc 259 case 2:
el19tb 35:db257b7bdefc 260 water[it].push_back(it/x_fac, row, speed, 'S'); // first type of water
el19tb 35:db257b7bdefc 261 state++; // transition to state 3
el19tb 35:db257b7bdefc 262 break;
el19tb 35:db257b7bdefc 263 case 3:
el19tb 35:db257b7bdefc 264 water[it].push_back(it/x_fac, row, speed, 'T'); // first type of water
el19tb 35:db257b7bdefc 265 state = 1; // back to start state
el19tb 35:db257b7bdefc 266 break;
el19tb 35:db257b7bdefc 267 }
el19tb 35:db257b7bdefc 268 }
el19tb 35:db257b7bdefc 269 }
el19tb 35:db257b7bdefc 270
el19tb 35:db257b7bdefc 271 // moves the water based on the velocity
el19tb 35:db257b7bdefc 272 void CrossyChicken::moveWater(std::vector<Water>& water_lanes)
el19tb 35:db257b7bdefc 273 {
el19tb 35:db257b7bdefc 274 for(unsigned int i = 0; i < water_lanes.size(); i++)
el19tb 35:db257b7bdefc 275 {
el19tb 35:db257b7bdefc 276 if(water_lanes(i).speed > 0){
el19tb 35:db257b7bdefc 277 water_lanes(i).x += speed;
el19tb 35:db257b7bdefc 278 } else {
el19tb 35:db257b7bdefc 279 water_lanes(i).x -= speed;
el19tb 35:db257b7bdefc 280 }
el19tb 35:db257b7bdefc 281 }
el19tb 35:db257b7bdefc 282
el19tb 35:db257b7bdefc 283 loopWater(water_lanes);
el19tb 35:db257b7bdefc 284 }
el19tb 35:db257b7bdefc 285
el19tb 35:db257b7bdefc 286
el19tb 35:db257b7bdefc 287 void CrossyChicken::loopWater(std::vector<Water>& water_lanes)
el19tb 35:db257b7bdefc 288 {
el19tb 35:db257b7bdefc 289 for(unsigned int i = 0; i < water_lanes.size(); i++)
el19tb 35:db257b7bdefc 290 {
el19tb 35:db257b7bdefc 291 if(water_lanes(i).x > 84+grid){
el19tb 35:db257b7bdefc 292 water_lanes(i).x = -4;
el19tb 35:db257b7bdefc 293 } else if(water_lanes[i].x < -4){
el19tb 35:db257b7bdefc 294 water_lanes(i).x = 84 + grid;
el19tb 35:db257b7bdefc 295 }
el19tb 35:db257b7bdefc 296 }
el19tb 35:db257b7bdefc 297 }
el19tb 35:db257b7bdefc 298
el19tb 35:db257b7bdefc 299 void CrossyChicken::drawWater()
el19tb 35:db257b7bdefc 300 {
el19tb 35:db257b7bdefc 301 graphics.drawWater(water);
el19tb 35:db257b7bdefc 302 }
el19tb 35:db257b7bdefc 303
el19tb 35:db257b7bdefc 304 void CrossyChicken::drawEndPost()
el19tb 35:db257b7bdefc 305 {
el19tb 35:db257b7bdefc 306 graphics.drawGoal(84/2)-grid/2, 48-grid*11);
el19tb 35:db257b7bdefc 307 }
el19tb 35:db257b7bdefc 308
el19tb 35:db257b7bdefc 309 // make the frog move same speed as log
el19tb 35:db257b7bdefc 310 // if the frog moves then detach
el19tb 35:db257b7bdefc 311 void CrossyChicken::frogOnLog(Car *log) {
el19tb 35:db257b7bdefc 312 if(log->seperation != 0){
el19tb 35:db257b7bdefc 313 chicken.x += 1.0;
el19tb 35:db257b7bdefc 314 }
el19tb 35:db257b7bdefc 315 }
el19tb 35:db257b7bdefc 316
el19tb 35:db257b7bdefc 317 //moves the chicken around the grid
el19tb 35:db257b7bdefc 318 void CrossyChicken::moveChicken(int xWay, int yWay){
el19tb 35:db257b7bdefc 319 //increment the left side of the chicken by a value of the grid size
el19tb 35:db257b7bdefc 320 chicken.x += xWay * 4;
el19tb 35:db257b7bdefc 321
el19tb 35:db257b7bdefc 322 //increment the top side by a value of grid sizw
el19tb 35:db257b7bdefc 323 chicken.y += yWay * 4;
el19tb 35:db257b7bdefc 324
el19tb 35:db257b7bdefc 325 chicken.left_side = chicken.x;
el19tb 35:db257b7bdefc 326 chicken.right_side = grid + chicken.x;
el19tb 35:db257b7bdefc 327 chicken.up = chicken.y;
el19tb 35:db257b7bdefc 328 chicken.down = grid + chicken.y;
el19tb 35:db257b7bdefc 329
el19tb 35:db257b7bdefc 330 //display the new state of the chicken
el19tb 35:db257b7bdefc 331 //graphics.showChicken();
el19tb 35:db257b7bdefc 332
el19tb 35:db257b7bdefc 333 //wait_ms(30);
el19tb 35:db257b7bdefc 334 }
el19tb 35:db257b7bdefc 335
el19tb 35:db257b7bdefc 336 void CrossyChicken::moveCar(Car *car, int dir, int x) {
el19tb 35:db257b7bdefc 337 car->speedMedium(dir, x);
el19tb 35:db257b7bdefc 338
el19tb 35:db257b7bdefc 339 // check if car goes out of bounds
el19tb 35:db257b7bdefc 340 if(car->vehicle.x > 84+grid){
el19tb 35:db257b7bdefc 341 car->vehicle.x = -4;
el19tb 35:db257b7bdefc 342
el19tb 35:db257b7bdefc 343 } else if(car->vehicle.x < -4){
el19tb 35:db257b7bdefc 344 car->vehicle.x = 84 + grid;
el19tb 35:db257b7bdefc 345 }
el19tb 35:db257b7bdefc 346 }
el19tb 35:db257b7bdefc 347
el19tb 35:db257b7bdefc 348 // debug
el19tb 35:db257b7bdefc 349 void CrossyChicken::setCollision(Car *car){
el19tb 35:db257b7bdefc 350
el19tb 35:db257b7bdefc 351 float other_bottom = car->vehicle.height + car->vehicle.y;
el19tb 35:db257b7bdefc 352
el19tb 35:db257b7bdefc 353
el19tb 35:db257b7bdefc 354 if(!(chicken.up >= other_bottom ||
el19tb 35:db257b7bdefc 355 (chicken.right_side <= car->vehicle.x) ||
el19tb 35:db257b7bdefc 356 (chicken.down <= car->vehicle.y) ||
el19tb 35:db257b7bdefc 357 chicken.left_side >= (car->vehicle.width + car->vehicle.x))){
el19tb 35:db257b7bdefc 358 graphics.printTest();
el19tb 35:db257b7bdefc 359
el19tb 35:db257b7bdefc 360 if(chicken.y < screenH - grid*6){
el19tb 35:db257b7bdefc 361 attach = true;
el19tb 35:db257b7bdefc 362 } else {
el19tb 35:db257b7bdefc 363 attach = false;
el19tb 35:db257b7bdefc 364 }
el19tb 35:db257b7bdefc 365 }
el19tb 35:db257b7bdefc 366 }
el19tb 35:db257b7bdefc 367
el19tb 35:db257b7bdefc 368 bool CrossyChicken::returnCollision(Car* log){
el19tb 35:db257b7bdefc 369
el19tb 35:db257b7bdefc 370 float ob = log->vehicle.height + log->vehicle.y;
el19tb 35:db257b7bdefc 371
el19tb 35:db257b7bdefc 372 if(!(chicken.up >= ob||
el19tb 35:db257b7bdefc 373 (chicken.right_side <= log->vehicle.x) ||
el19tb 35:db257b7bdefc 374 (chicken.down <= log->vehicle.y) ||
el19tb 35:db257b7bdefc 375 chicken.left_side >= (log->vehicle.width + log->vehicle.x))){
el19tb 35:db257b7bdefc 376 return true;
el19tb 35:db257b7bdefc 377 }
el19tb 35:db257b7bdefc 378 }