ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Committer:
el17cd
Date:
Mon Apr 01 14:43:18 2019 +0000
Revision:
19:ec4cb22accb0
Parent:
18:8256546a3cbf
Child:
20:3ca430241df0
Faces are no longer drawn when off screen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17cd 15:8fbbdefbe720 1 #include "Game.h"
el17cd 19:ec4cb22accb0 2
el17cd 18:8256546a3cbf 3 Serial pc(USBTX, USBRX); // tx, rx
el17cd 15:8fbbdefbe720 4
el17cd 19:ec4cb22accb0 5
el17cd 15:8fbbdefbe720 6 Game::Game(){
el17cd 18:8256546a3cbf 7 homeSelection = 0;
el17cd 15:8fbbdefbe720 8 gamepad.init();
el17cd 15:8fbbdefbe720 9 renderer.init();
el17cd 18:8256546a3cbf 10 timer.start();
el17cd 15:8fbbdefbe720 11
el17cd 18:8256546a3cbf 12 for(int i = 0; i < 10; i++){
el17cd 18:8256546a3cbf 13 Cube cube(rand()%100-50,0,20+ i*10,5);
el17cd 15:8fbbdefbe720 14 cubeVector.push_back(cube);
el17cd 15:8fbbdefbe720 15 }
el17cd 15:8fbbdefbe720 16 }
el17cd 15:8fbbdefbe720 17
el17cd 15:8fbbdefbe720 18 void Game::run(){
el17cd 18:8256546a3cbf 19 score = 0;
el17cd 18:8256546a3cbf 20 selection = true;
el17cd 18:8256546a3cbf 21 playing = true;
el17cd 19:ec4cb22accb0 22 timer.reset();
el17cd 15:8fbbdefbe720 23 while(1) {
el17cd 15:8fbbdefbe720 24 Vector2D coord = gamepad.get_coord();
el17cd 15:8fbbdefbe720 25 renderer.clear();
el17cd 15:8fbbdefbe720 26 renderer.drawHorizon(coord.x/15);
el17cd 15:8fbbdefbe720 27 for (int c = 0; c< cubeVector.size(); c++)
el17cd 15:8fbbdefbe720 28 {
el17cd 15:8fbbdefbe720 29 if(playing){
el17cd 18:8256546a3cbf 30 if(score < 1500)
el17cd 18:8256546a3cbf 31 cubeVector[c].translate((float)-coord.x*1.4,0,-2-(float)score/500);
el17cd 16:64cd7bc094f9 32 else{
el17cd 18:8256546a3cbf 33 cubeVector[c].translate((float)-coord.x*1.4,0,-3.5);
el17cd 16:64cd7bc094f9 34 }
el17cd 15:8fbbdefbe720 35 }
el17cd 15:8fbbdefbe720 36 for (int i = 0; i < 6; i++){
el17cd 15:8fbbdefbe720 37 faceVector.push_back(cubeVector[c].getFace(i));
el17cd 15:8fbbdefbe720 38 }
el17cd 15:8fbbdefbe720 39 if (cubeVector[c].despawn()){
el17cd 19:ec4cb22accb0 40 //cubeVector.erase(cubeVector.begin() + c);
el17cd 18:8256546a3cbf 41 Cube cube(rand()%100-50,0,90,5);
el17cd 19:ec4cb22accb0 42 //cubeVector.push_back(cube);
el17cd 19:ec4cb22accb0 43 cubeVector[c] = cube;
el17cd 15:8fbbdefbe720 44 }
el17cd 15:8fbbdefbe720 45 if (cubeVector[c].tooClose()){
el17cd 15:8fbbdefbe720 46 cubeVector.erase(cubeVector.begin() + c);
el17cd 15:8fbbdefbe720 47 playing = false;
el17cd 15:8fbbdefbe720 48 //renderer.invertMode();
el17cd 15:8fbbdefbe720 49 // ticker.attach(&resetScreen,1);
el17cd 18:8256546a3cbf 50 Cube cube(rand()%100-50,0,90,5);
el17cd 15:8fbbdefbe720 51 cubeVector.push_back(cube);
el17cd 15:8fbbdefbe720 52 }
el17cd 15:8fbbdefbe720 53 }
el17cd 15:8fbbdefbe720 54 for (int f = 0; f< faceVector.size(); f++){
el17cd 15:8fbbdefbe720 55 for (int f2 = 0; f2< faceVector.size(); f2++){
el17cd 15:8fbbdefbe720 56 if(faceVector[f2].getAvgZ() < faceVector[f2+1].getAvgZ()){
el17cd 15:8fbbdefbe720 57 Face temp = faceVector[f2+1];
el17cd 15:8fbbdefbe720 58 faceVector[f2+1] = faceVector[f2];
el17cd 15:8fbbdefbe720 59 faceVector[f2] = temp;
el17cd 15:8fbbdefbe720 60 }
el17cd 15:8fbbdefbe720 61 }
el17cd 15:8fbbdefbe720 62 }
el17cd 15:8fbbdefbe720 63 for (int f = 0; f< faceVector.size() ; f++){
el17cd 15:8fbbdefbe720 64 //pc.printf("%f\n", faceVector[f].getAvgZ());
el17cd 15:8fbbdefbe720 65 renderer.drawFace(faceVector[f], coord.x/15);
el17cd 15:8fbbdefbe720 66 //wait_ms(1000/1);
el17cd 15:8fbbdefbe720 67
el17cd 15:8fbbdefbe720 68 }
el17cd 18:8256546a3cbf 69 if(playing){
el17cd 18:8256546a3cbf 70 score = timer.read_ms()/200;
el17cd 18:8256546a3cbf 71 }
el17cd 18:8256546a3cbf 72 else{
el17cd 16:64cd7bc094f9 73 deathScreen();
el17cd 18:8256546a3cbf 74 if(deathButtonSelections()){
el17cd 18:8256546a3cbf 75 break;
el17cd 18:8256546a3cbf 76 }
el17cd 16:64cd7bc094f9 77 }
el17cd 18:8256546a3cbf 78
el17cd 15:8fbbdefbe720 79 char buf[10];
el17cd 15:8fbbdefbe720 80 sprintf(buf, "%d", score);
el17cd 16:64cd7bc094f9 81 renderer.print(buf, 0, 0);
el17cd 15:8fbbdefbe720 82 memset(buf, 0, sizeof buf);
el17cd 15:8fbbdefbe720 83 renderer.refresh();
el17cd 15:8fbbdefbe720 84 faceVector.clear();
el17cd 16:64cd7bc094f9 85
el17cd 15:8fbbdefbe720 86 wait_ms(1000/30);
el17cd 18:8256546a3cbf 87
el17cd 15:8fbbdefbe720 88 }
el17cd 15:8fbbdefbe720 89 }
el17cd 18:8256546a3cbf 90
el17cd 18:8256546a3cbf 91 bool Game::deathButtonSelections(){
el17cd 18:8256546a3cbf 92 if(gamepad.check_event(Gamepad::Y_PRESSED) == true){
el17cd 18:8256546a3cbf 93 selection = true;
el17cd 18:8256546a3cbf 94 }
el17cd 18:8256546a3cbf 95 else if(gamepad.check_event(Gamepad::A_PRESSED) == true){
el17cd 18:8256546a3cbf 96 selection = false;
el17cd 18:8256546a3cbf 97 }
el17cd 18:8256546a3cbf 98 if (selection == true && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 99 playing = true;
el17cd 18:8256546a3cbf 100 score = 0;
el17cd 18:8256546a3cbf 101 timer.reset();
el17cd 18:8256546a3cbf 102 }
el17cd 18:8256546a3cbf 103 else if(selection == false && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 104 timer.reset();
el17cd 18:8256546a3cbf 105 return true;
el17cd 18:8256546a3cbf 106 }
el17cd 18:8256546a3cbf 107 return false;
el17cd 18:8256546a3cbf 108 }
el17cd 18:8256546a3cbf 109
el17cd 18:8256546a3cbf 110 void Game::homeButtonSelections(){
el17cd 18:8256546a3cbf 111 if(gamepad.check_event(Gamepad::Y_PRESSED) == true && homeSelection > 0){
el17cd 18:8256546a3cbf 112 homeSelection--;
el17cd 18:8256546a3cbf 113 }
el17cd 18:8256546a3cbf 114 else if(gamepad.check_event(Gamepad::A_PRESSED) == true && homeSelection < 2){
el17cd 18:8256546a3cbf 115 homeSelection++;
el17cd 18:8256546a3cbf 116 }
el17cd 18:8256546a3cbf 117 if (homeSelection == 0 && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 118 run();
el17cd 18:8256546a3cbf 119 }
el17cd 18:8256546a3cbf 120 else if(homeSelection == 2 && gamepad.check_event(Gamepad::B_PRESSED) == true){
el17cd 18:8256546a3cbf 121 //return true;
el17cd 18:8256546a3cbf 122 }
el17cd 18:8256546a3cbf 123 }
el17cd 16:64cd7bc094f9 124
el17cd 16:64cd7bc094f9 125 void Game::deathScreen(){
el17cd 16:64cd7bc094f9 126 //int selection = 1;
el17cd 16:64cd7bc094f9 127 renderer.drawDeathScreen(selection);
el17cd 16:64cd7bc094f9 128 }
el17cd 18:8256546a3cbf 129
el17cd 18:8256546a3cbf 130 void Game::homeScreen(){
el17cd 18:8256546a3cbf 131 while(1){
el17cd 18:8256546a3cbf 132 renderer.clear();
el17cd 18:8256546a3cbf 133 homeButtonSelections();
el17cd 18:8256546a3cbf 134 renderer.drawHomeScreen(homeSelection);
el17cd 18:8256546a3cbf 135 renderer.refresh();
el17cd 18:8256546a3cbf 136 wait_ms(1000/30);
el17cd 18:8256546a3cbf 137 }
el17cd 18:8256546a3cbf 138 }
el17cd 15:8fbbdefbe720 139