Meteor defense project

Dependencies:   N5110 mbed

GameEngine/GameEngine.cpp

Committer:
jasper0712
Date:
2017-04-12
Revision:
19:7ccbb19703f9
Parent:
18:d82059ce929b
Child:
20:32f115462bbc

File content as of revision 19:7ccbb19703f9:

#include "GameEngine.h"

GameEngine::GameEngine()
{

}

GameEngine::~GameEngine()
{

}
void GameEngine::init() {
    _d1.droneInit(20, 46, 0);
    _d2.droneInit(62, 46, 83);   
    weap.init();
    spa.init();
    //printf("init completed \n");
}
void GameEngine::update(Gamepad &pad, N5110 &lcd) {
    _d1.drone(Array1, charArray, lcd);
    _d2.drone(Array1, charArray, lcd);
    drawSpawn(lcd); 
    drawLaserPlayer(pad, lcd);
    bombAndShield(pad, lcd);
}
void GameEngine::drawSpawn(N5110 &lcd){
    //spawning every 2 second, moving spawn at every 1 seconds when fps = 15 & drawit=30. 
    //It changes depending on the game FPS.
    if (drawit == 0) {
        drawit = 30;
        spa.randomizeSpawn(Array2, charArray);
        spa.moveSpawnABC(Array1, Array2, charArray);
        
    } else {
        drawit -= 0.5;
        spa.moveSpawnB(Array1, Array2, charArray);
        //printf("moving spawn b \n");
    }
    spa.updateSpawn(Array1, Array2, charArray, lcd); 
    //checkGameRule(lcd);
}
void GameEngine::drawLaserPlayer(Gamepad &pad, N5110 &lcd) {
    weap.drawPlayer(pad, lcd);
    //draw a line for the laser when button is pressed
    if (pad.buttonhold_A == 1) {
        //printf("hi, button is working \n");
        weap.weaponMath(pad);
        weap.drawLaser(Array1, charArray, lcd);
    }
}
void GameEngine::checkGameRule(N5110 &lcd) {
    //the only way to lose is when the spawn reaches y = 46.
    for ( int x = 0; x < 84; x ++) {
        if (Array1[x][46] > 0) {
            while (1) {
                lcd.clear();
                lcd.printString("Game Over",10,3);
                lcd.refresh();
                wait(1.0);
            }
        }
    }       
}
void GameEngine::bombAndShield(Gamepad &pad, N5110 &lcd) { 
    weap.bombCooldown(Array1, pad, lcd);
    if (pad.check_event(Gamepad::X_PRESSED)) {
        //to prevent from detonating the bomb at instant when button X is accidentally pressed 
    }
    if (pad.buttonhold_B == 1) { //if B pressed, generate shield. Shield doesnt have to be fully charged to be activated
        if (weap._shield > 0) { //shield will only activate if the shield has not depleted.
            weap.energyShield(Array1, Array2, charArray, lcd);
        } else { //or else, deactivate the shield and recharge the shield.
            pad.buttonhold_B = 0;
        }    
    } 
    if (pad.buttonhold_B == 0) { // recharge shield 
        if (weap._shield < weap._shieldCapacity ) {
            weap._shield = weap._shield + weap._shieldRegenRate;
            //printf("current shield = %d \n",weap._shield); 
            //printf("shield regen rate = %d \n",weap._shieldRegenRate);
        } else { //when the shield is fully charged. It will automatically activate the shield.
            pad.buttonhold_B = 1;
        }
    }
    weap.shieldMeter(lcd);
}