ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Game/Game.cpp

Committer:
el17cd
Date:
2019-03-31
Revision:
16:64cd7bc094f9
Parent:
15:8fbbdefbe720
Child:
17:3c9672c6e532

File content as of revision 16:64cd7bc094f9:

#include "Game.h"

Game::Game(){
    playing = true;
    score = 0;
    gamepad.init();
    renderer.init();
    
    for(int i = 0; i < 7; i++){
        Cube cube(rand()%80-40,0,30+ i*20,5);
        cubeVector.push_back(cube);
    }
}

void Game::run(){

    while(1) {
        Vector2D coord = gamepad.get_coord();
        renderer.clear();
        
        if(playing){
            score++;
        }
        else{
            if(gamepad.check_event(Gamepad::Y_PRESSED) == true){
                selection = true;
            }
            else if(gamepad.check_event(Gamepad::A_PRESSED) == true){
                selection = false;
            }
            if (selection == true && gamepad.check_event(Gamepad::B_PRESSED) == true){
                playing = true;
            }
            else if(selection == false && gamepad.check_event(Gamepad::B_PRESSED) == true){
                break;
            }
        }
        
        renderer.drawHorizon(coord.x/15);
        for (int c = 0; c< cubeVector.size(); c++)
        {  
            if(playing){
                if(score < 2500)
                    cubeVector[c].translate(-coord.x*1.4,0,-2.5-(double)score/1000);
                else{
                    cubeVector[c].translate(-coord.x*1.4,0,(double)-5);
                }
            }
            for (int i = 0; i < 6; i++){
                faceVector.push_back(cubeVector[c].getFace(i));
            }
            if (cubeVector[c].despawn()){
                cubeVector.erase(cubeVector.begin() + c);
                Cube cube(rand()%80-40,0,90,5);
                cubeVector.push_back(cube);
            }
            if (cubeVector[c].tooClose()){
                cubeVector.erase(cubeVector.begin() + c);
                playing = false;
                //renderer.invertMode();
                score = 0;
                //  ticker.attach(&resetScreen,1);
                Cube cube(rand()%80-40,0,90,5);
                cubeVector.push_back(cube);
            }
        }
        for (int f = 0; f< faceVector.size(); f++){
            for (int f2 = 0; f2< faceVector.size(); f2++){
                if(faceVector[f2].getAvgZ() < faceVector[f2+1].getAvgZ()){
                    Face temp = faceVector[f2+1];
                    faceVector[f2+1] = faceVector[f2];
                    faceVector[f2] = temp;
                }
            }
        }
        
        for (int f = 0; f< faceVector.size() ; f++){
            //pc.printf("%f\n", faceVector[f].getAvgZ());
            renderer.drawFace(faceVector[f], coord.x/15);
            //wait_ms(1000/1);
           
        }
        if(!playing){
            deathScreen();
        }
        char buf[10];
        sprintf(buf, "%d", score);
        renderer.print(buf, 0, 0);
        memset(buf, 0, sizeof buf);
        renderer.refresh();
        faceVector.clear();  

        wait_ms(1000/30);
    }
}
    
void Game::deathScreen(){
    //int selection = 1;
    renderer.drawDeathScreen(selection);
}