ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Committer:
el17cd
Date:
Tue Apr 02 17:40:59 2019 +0000
Revision:
21:6b5d2d75e083
Parent:
20:3ca430241df0
Child:
22:236319885874
Fixed crashing caused by timer/ticker, faces only render when on screen (big performance boost), 18 cubes now in game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17cd 15:8fbbdefbe720 1 #include "Game.h"
el17cd 19:ec4cb22accb0 2
el17cd 15:8fbbdefbe720 3
el17cd 19:ec4cb22accb0 4
el17cd 15:8fbbdefbe720 5 Game::Game(){
el17cd 21:6b5d2d75e083 6 noOfCubes = 18;
el17cd 18:8256546a3cbf 7 homeSelection = 0;
el17cd 15:8fbbdefbe720 8 gamepad.init();
el17cd 15:8fbbdefbe720 9 renderer.init();
el17cd 20:3ca430241df0 10 for(int i = 0; i < noOfCubes; i++){
el17cd 20:3ca430241df0 11 cubeArray[i].translate(rand()%100-50,0,20+ i*10);
el17cd 15:8fbbdefbe720 12 }
el17cd 15:8fbbdefbe720 13 }
el17cd 15:8fbbdefbe720 14
el17cd 15:8fbbdefbe720 15 void Game::run(){
el17cd 18:8256546a3cbf 16 score = 0;
el17cd 18:8256546a3cbf 17 selection = true;
el17cd 18:8256546a3cbf 18 playing = true;
el17cd 21:6b5d2d75e083 19 //ticker.attach(this, &Game::addScore, 0.1);
el17cd 15:8fbbdefbe720 20 while(1) {
el17cd 15:8fbbdefbe720 21 Vector2D coord = gamepad.get_coord();
el17cd 15:8fbbdefbe720 22 renderer.clear();
el17cd 15:8fbbdefbe720 23 renderer.drawHorizon(coord.x/15);
el17cd 20:3ca430241df0 24 for (int c = 0; c< noOfCubes; c++){
el17cd 15:8fbbdefbe720 25 if(playing){
el17cd 21:6b5d2d75e083 26 if(score < 2000)
el17cd 21:6b5d2d75e083 27 cubeArray[c].translate(-coord.x*1.4f,0,-2.5f-(float)score/500);
el17cd 16:64cd7bc094f9 28 else{
el17cd 21:6b5d2d75e083 29 cubeArray[c].translate(-coord.x*1.4f,0,-4.5f);
el17cd 16:64cd7bc094f9 30 }
el17cd 15:8fbbdefbe720 31 }
el17cd 20:3ca430241df0 32 else{
el17cd 20:3ca430241df0 33 coord.x = 0;
el17cd 20:3ca430241df0 34 coord.y = 0;
el17cd 20:3ca430241df0 35 }
el17cd 15:8fbbdefbe720 36 for (int i = 0; i < 6; i++){
el17cd 20:3ca430241df0 37 faceArray[c*6 + i] = cubeArray[c].getFace(i);
el17cd 15:8fbbdefbe720 38 }
el17cd 20:3ca430241df0 39 if (cubeArray[c].despawn()){
el17cd 20:3ca430241df0 40 cubeArray[c].resetPos();
el17cd 21:6b5d2d75e083 41 cubeArray[c].translate(rand()%180-90,0,140);
el17cd 20:3ca430241df0 42 }
el17cd 20:3ca430241df0 43 if (cubeArray[c].tooClose()){
el17cd 15:8fbbdefbe720 44 playing = false;
el17cd 21:6b5d2d75e083 45 //ticker.detach();
el17cd 20:3ca430241df0 46 cubeArray[c].resetPos();
el17cd 21:6b5d2d75e083 47 cubeArray[c].translate(rand()%180-90,0,140);
el17cd 15:8fbbdefbe720 48 }
el17cd 15:8fbbdefbe720 49 }
el17cd 20:3ca430241df0 50
el17cd 20:3ca430241df0 51 renderer.drawAllFaces(faceArray, noOfCubes, coord.x);//faceArray, noOfCubes, coord.x);
el17cd 20:3ca430241df0 52
el17cd 21:6b5d2d75e083 53 if(!playing){
el17cd 16:64cd7bc094f9 54 deathScreen();
el17cd 18:8256546a3cbf 55 if(deathButtonSelections()){
el17cd 18:8256546a3cbf 56 break;
el17cd 18:8256546a3cbf 57 }
el17cd 16:64cd7bc094f9 58 }
el17cd 20:3ca430241df0 59
el17cd 18:8256546a3cbf 60
el17cd 20:3ca430241df0 61 char buf[5];
el17cd 15:8fbbdefbe720 62 sprintf(buf, "%d", score);
el17cd 16:64cd7bc094f9 63 renderer.print(buf, 0, 0);
el17cd 15:8fbbdefbe720 64 memset(buf, 0, sizeof buf);
el17cd 15:8fbbdefbe720 65 renderer.refresh();
el17cd 16:64cd7bc094f9 66
el17cd 21:6b5d2d75e083 67 wait_ms(1000/30);
el17cd 15:8fbbdefbe720 68 }
el17cd 15:8fbbdefbe720 69 }
el17cd 18:8256546a3cbf 70
el17cd 21:6b5d2d75e083 71 void Game::addScore(){
el17cd 21:6b5d2d75e083 72 score++;
el17cd 21:6b5d2d75e083 73 }
el17cd 21:6b5d2d75e083 74
el17cd 21:6b5d2d75e083 75 void Game::resetScore(){
el17cd 21:6b5d2d75e083 76 score = 0;
el17cd 21:6b5d2d75e083 77 }
el17cd 18:8256546a3cbf 78 bool Game::deathButtonSelections(){
el17cd 18:8256546a3cbf 79 if(gamepad.check_event(Gamepad::Y_PRESSED) == true){
el17cd 18:8256546a3cbf 80 selection = true;
el17cd 18:8256546a3cbf 81 }
el17cd 18:8256546a3cbf 82 else if(gamepad.check_event(Gamepad::A_PRESSED) == true){
el17cd 18:8256546a3cbf 83 selection = false;
el17cd 18:8256546a3cbf 84 }
el17cd 18:8256546a3cbf 85 if (selection == true && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 86 playing = true;
el17cd 18:8256546a3cbf 87 score = 0;
el17cd 21:6b5d2d75e083 88 resetScore();
el17cd 21:6b5d2d75e083 89 //ticker.attach(this, &Game::addScore, 0.5);
el17cd 18:8256546a3cbf 90 }
el17cd 18:8256546a3cbf 91 else if(selection == false && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 21:6b5d2d75e083 92 resetScore();
el17cd 18:8256546a3cbf 93 return true;
el17cd 18:8256546a3cbf 94 }
el17cd 18:8256546a3cbf 95 return false;
el17cd 18:8256546a3cbf 96 }
el17cd 18:8256546a3cbf 97
el17cd 18:8256546a3cbf 98 void Game::homeButtonSelections(){
el17cd 18:8256546a3cbf 99 if(gamepad.check_event(Gamepad::Y_PRESSED) == true && homeSelection > 0){
el17cd 18:8256546a3cbf 100 homeSelection--;
el17cd 18:8256546a3cbf 101 }
el17cd 18:8256546a3cbf 102 else if(gamepad.check_event(Gamepad::A_PRESSED) == true && homeSelection < 2){
el17cd 18:8256546a3cbf 103 homeSelection++;
el17cd 18:8256546a3cbf 104 }
el17cd 18:8256546a3cbf 105 if (homeSelection == 0 && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 106 run();
el17cd 18:8256546a3cbf 107 }
el17cd 18:8256546a3cbf 108 else if(homeSelection == 2 && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 109 //return true;
el17cd 18:8256546a3cbf 110 }
el17cd 18:8256546a3cbf 111 }
el17cd 16:64cd7bc094f9 112
el17cd 16:64cd7bc094f9 113 void Game::deathScreen(){
el17cd 16:64cd7bc094f9 114 renderer.drawDeathScreen(selection);
el17cd 16:64cd7bc094f9 115 }
el17cd 18:8256546a3cbf 116
el17cd 18:8256546a3cbf 117 void Game::homeScreen(){
el17cd 18:8256546a3cbf 118 while(1){
el17cd 18:8256546a3cbf 119 renderer.clear();
el17cd 18:8256546a3cbf 120 homeButtonSelections();
el17cd 18:8256546a3cbf 121 renderer.drawHomeScreen(homeSelection);
el17cd 18:8256546a3cbf 122 renderer.refresh();
el17cd 21:6b5d2d75e083 123 wait_ms(1000/30);
el17cd 18:8256546a3cbf 124 }
el17cd 18:8256546a3cbf 125 }
el17cd 15:8fbbdefbe720 126