ELEC2645 (2017/18) / Mbed 2 deprecated ll14zs

Dependencies:   mbed

Fork of ll14zs by Zeshaan Saeed

DashEngine/DashEngine.cpp

Committer:
ll14zs
Date:
2018-05-24
Revision:
3:1231a3961984
Parent:
2:5d3aac7fd3df

File content as of revision 3:1231a3961984:

#include "DashEngine.h"

void scoreTicker_isr();
volatile int g_score_flag=0; 

DashEngine::DashEngine() 
{

} 

DashEngine::~DashEngine() 
{

}




void DashEngine::init(int car_width,int car_height,int _x,int _y,int level_height) 
{

// initialise the game parameters
    _car_width = car_width; 
    _car_height = car_height; 
    _car_x = _x; 
    _car_y = _y; 
    _level_height = level_height;
    
    
  _car.init(_car_width,_car_height,_car_x,_car_y);
}

void DashEngine::read_input(Gamepad &pad) 
{ 
    _d = pad.get_direction();
    pad.check_event(Gamepad::START_PRESSED) == false;
}

void DashEngine::draw(N5110 &lcd,Gamepad &pad)
{
    lcd.drawRect(0,0,82,48,0); // Draws in the LCD buffer
    
    _level.draw(lcd); // Level
    
    for(std::vector<Level*>::iterator it = LevelVectors.begin(); it != LevelVectors.end(); it++){
        (*it)->draw(lcd); //Iterator
    
    _car.draw(lcd); // Car
    //printf("%d\n",drawcar);
    
    }
    
void DashEngine::addLevel()
{
    LevelVectors.push_back(new Level()); // Adds a new Level at the end of the vector, after its current last Level. The Level is copied (or moved) to the new Level.

}
    
void DashEngine::update(N5110 & lcd,Gamepad & pad)
{
    _level.get.velocity();
    _car.update(_d);
    score_timer(pad);
    counter++; // Increment counter each cycle 
    if(counter == 25){
        counter =0;
        addLevel();
        }
    for std::vector<Level*>::iterator it = LevelVectors.begin(); it != LevelVectors.end(); it++){
        (*it)>>draw(lcd); //Iterator
        }
        
    check_wall_collision(pad);
    //printf("%d\n", wallcollision)
    
    check_level_collision(pad);
    //printf("%d\n", levelcollision)
    
void DashEngine::check_wall_collision(Gamepad & pad)
{ 
    // read current car attributes
    Vector2D car_pos = _car.get_pos();
    
    // check if hit left wall
    if(car_pos.x <= 1){ // 1 to 1 pixel boundary 
       car_pos.x = 1;
       // audio feedback
       pad.tone(750.0,0.1);
    }
    // check if hit right wall
    else if(car_pos.x >= (80)){
        // audio feedback
        pad.tone(750.0,0.1);
    }
    
    // update car parameters
    _car.set_pos(car_pos);
}

void DashEngine::check_level_collisions(N5110 &lcd,Gamepad &pad)
{
    // read current car attributes
    Vector2D car_pos = _car.get_pos();
    Vector2D car_velocity = _car.get_velocity();
    
    // see if the pixels below the car are clear
    if (!(lcd.getPixel(car_pos.x, car_pos.y + _car_height+1) || lcd.getPixel(car_pos.x, car_pos.y + _car_height + 2))){
        
        levelcollision = 0;
    }
    //printf("%d\n",levelcollision=0)
    
    
    if ((lcd.getPixel(car_pos.x, car_pos.y + _car_height+1) || lcd.getPixel(car_pos.x, car_pos.y + _car_height + 2))){
        
        levelcollision = 1;
        pad.tone(850.0,0.1);
    }
    //printf("%d\n",levelcollision=1)
     
    if ( (levelcollision == 0)){
        car_velocity.y = 1;
    }
    
      
    if ( (levelcollision == 1)){
        car_velocity.y = -1;
    }
    
    // update car parameters
    _car.set_velocity(car_velocity);
    _car.set_pos(car_pos);
}
    
void DashEngine::score_timer(Gamepad & pad){
    
    if (g_score_flag==1) {
        
        _car.add_score();
        }
}

void DashEngine::check_gameover(N5110 & lcd, Gamepad & pad)
{
    Vector2D car_pos = _car.get_pos();
    
    int car_score = _car.get_score();
    
    //check if car hits the top 
    if (car_pos.y <= 1) {
        
        int i=0;
        while(1) {
            i++;
            
        if (i==15){
    
        // auido feedback
        pad.tone(300.0,0.2);
        wait(0.5);
        pad.tone(500.0,0.4);
        wait(0.5);
        pad.tone(700.0,1.0);
    }
    
        // end of game screen
        lcd.clear();
        lcd.printString(" GAME OVER! ",0,1);
        lcd.printString(" SCORE: ",0,4);
    
        char buffer1[14];
        sprintf(buffer1,"%2d",car_score);
        lcd.printString(buffer1,25,4);
        lcd.refresh();
    }
}}