ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Game/Game.cpp

Committer:
el17cd
Date:
2019-03-31
Revision:
18:8256546a3cbf
Parent:
17:3c9672c6e532
Child:
19:ec4cb22accb0

File content as of revision 18:8256546a3cbf:

#include "Game.h"
Serial pc(USBTX, USBRX); // tx, rx

Game::Game(){
    homeSelection = 0;
    gamepad.init();
    renderer.init();
    timer.start();
    
    for(int i = 0; i < 10; i++){
        Cube cube(rand()%100-50,0,20+ i*10,5);
        cubeVector.push_back(cube);
    }
}

void Game::run(){
    score = 0;
    selection = true;
    playing = true;
    while(1) {
        Vector2D coord = gamepad.get_coord();
        renderer.clear();
        
        renderer.drawHorizon(coord.x/15);
        for (int c = 0; c< cubeVector.size(); c++)
        {  
            if(playing){
                if(score < 1500)
                    cubeVector[c].translate((float)-coord.x*1.4,0,-2-(float)score/500);
                else{
                    cubeVector[c].translate((float)-coord.x*1.4,0,-3.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()%100-50,0,90,5);
                cubeVector.push_back(cube);
            }
            if (cubeVector[c].tooClose()){
                cubeVector.erase(cubeVector.begin() + c);
                playing = false;
                //renderer.invertMode();
                //  ticker.attach(&resetScreen,1);
                Cube cube(rand()%100-50,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){
            score = timer.read_ms()/200;
        }
        else{
            deathScreen();
            if(deathButtonSelections()){
                break;
            }
        }
                
        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);
        
    }
}

bool Game::deathButtonSelections(){
        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;
            score = 0;
            timer.reset();
        }
        else if(selection == false && gamepad.check_event(Gamepad::B_PRESSED) == true){
            timer.reset();
            return true;
        }
        return false;
}

void Game::homeButtonSelections(){
        if(gamepad.check_event(Gamepad::Y_PRESSED) == true && homeSelection > 0){
            homeSelection--;
        }
        else if(gamepad.check_event(Gamepad::A_PRESSED) == true && homeSelection < 2){
            homeSelection++;
        }
        if (homeSelection == 0 && gamepad.check_event(Gamepad::B_PRESSED) == true){
            run();
        }
        else if(homeSelection == 2 && gamepad.check_event(Gamepad::B_PRESSED) == true){
            //return true;
        }
}
    
void Game::deathScreen(){
    //int selection = 1;
    renderer.drawDeathScreen(selection);
}

void Game::homeScreen(){
    while(1){
        renderer.clear();
        homeButtonSelections();
        renderer.drawHomeScreen(homeSelection);
        renderer.refresh();
        wait_ms(1000/30);
    }
            
}