ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Game/Game.cpp

Committer:
el17cd
Date:
2019-04-01
Revision:
20:3ca430241df0
Parent:
19:ec4cb22accb0
Child:
21:6b5d2d75e083

File content as of revision 20:3ca430241df0:

#include "Game.h"

Serial pc(USBTX, USBRX); // tx, rx


Game::Game(){
    noOfCubes = 10;
    homeSelection = 0;
    gamepad.init();
    renderer.init();
    timer.start();
    for(int i = 0; i < noOfCubes; i++){
        cubeArray[i].translate(rand()%100-50,0,20+ i*10);
    }
}

void Game::run(){
    score = 0;
    selection = true;
    playing = true;
    timer.reset();
    
    while(1) {
        Vector2D coord = gamepad.get_coord();
        renderer.clear();
        renderer.drawHorizon(coord.x/15);
        //pc.printf("a");
        for (int c = 0; c< noOfCubes; c++){  
            if(playing){
                if(score < 1500)
                    cubeArray[c].translate((float)-coord.x*1.4,0,-2-(float)score/500);
                else{
                    cubeArray[c].translate((float)-coord.x*1.4,0,-3.5);
                }
            }
            else{
                coord.x = 0;
                coord.y = 0;
            }
            for (int i = 0; i < 6; i++){
                faceArray[c*6 + i] = cubeArray[c].getFace(i);
            }
            if (cubeArray[c].despawn()){
                cubeArray[c].resetPos();
                cubeArray[c].translate(rand()%100-50,0,90);
            }
            if (cubeArray[c].tooClose()){
                playing = false;
                cubeArray[c].resetPos();
                cubeArray[c].translate(rand()%100-50,0,90);
            }
        }
        
        renderer.drawAllFaces(faceArray, noOfCubes, coord.x);//faceArray, noOfCubes, coord.x);
        
        if(playing){
            score = timer.read_ms()/200;
        }
        else{
            deathScreen();
            if(deathButtonSelections()){
                break;
            }
        }
        
                
        char buf[5];
        sprintf(buf, "%d", score);
        renderer.print(buf, 0, 0);
        memset(buf, 0, sizeof buf);
        renderer.refresh();

        wait_ms(1000/28);
    }
}

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/28);
    }
}