Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Tue Apr 30 19:24:41 2019 +0000
Revision:
34:754915ce9de5
Parent:
33:c623c6d5ed16
Child:
35:172db1608332
Finished the boss class. added additional comments Have fixed the high score problem.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Noximilien 3:10918b0f7a7d 1 #include "mbed.h"
Noximilien 3:10918b0f7a7d 2 #include "N5110.h"
Noximilien 3:10918b0f7a7d 3 #include "Gamepad.h"
Noximilien 33:c623c6d5ed16 4 #include "collision_lib.h"
Noximilien 3:10918b0f7a7d 5
Noximilien 3:10918b0f7a7d 6 #include "models.h"
Noximilien 4:02c63aaa2df9 7 #include "main.h"
Noximilien 4:02c63aaa2df9 8 #include "game.h"
Noximilien 21:0eb394495b8a 9 #include "gameobject.h"
Noximilien 21:0eb394495b8a 10
Noximilien 33:c623c6d5ed16 11 #include "boss.h"
Noximilien 21:0eb394495b8a 12 #include "enemies.h"
Noximilien 22:4dc3c95f2146 13 #include "constants.h"
Noximilien 23:240bc00ef25b 14 #include "stars.h"
Noximilien 23:240bc00ef25b 15 #include "player.h"
Noximilien 26:676874c42883 16 #include "hud.h"
Noximilien 33:c623c6d5ed16 17 #include "gameovermanager.h"
Noximilien 33:c623c6d5ed16 18
Noximilien 20:557e84189a57 19
Noximilien 34:754915ce9de5 20 const int increase_difficulty = 70;
Noximilien 31:becb8f6bf7b7 21 int GameGlobals::game_score = 0;
Noximilien 31:becb8f6bf7b7 22 int GameGlobals::score_count_for_difficulty = 0;
Noximilien 31:becb8f6bf7b7 23 int GameGlobals::player_lifes = 3;
Noximilien 31:becb8f6bf7b7 24 int GameGlobals::high_score = 0;
Noximilien 31:becb8f6bf7b7 25 bool GameGlobals::is_shield_on = false;
Noximilien 34:754915ce9de5 26 int GameGlobals::score_count_for_boss_mode = 0;
Noximilien 11:cf2ba52e8b7e 27
Noximilien 33:c623c6d5ed16 28 Boss boss;
Noximilien 21:0eb394495b8a 29 Enemies enemies;
Noximilien 34:754915ce9de5 30 Enemy enemy;
Noximilien 23:240bc00ef25b 31 Stars stars;
Noximilien 33:c623c6d5ed16 32 Player player;
Noximilien 33:c623c6d5ed16 33 GameOverManager gameOverManager;
Noximilien 33:c623c6d5ed16 34
Noximilien 30:d454d0cb72bc 35 CircleBounds circleBounds;
Noximilien 26:676874c42883 36 Hud hud;
Noximilien 12:bfe3a3deaac3 37
Noximilien 33:c623c6d5ed16 38
Noximilien 33:c623c6d5ed16 39 void Game::updateAndDrawGameplay() {
Noximilien 33:c623c6d5ed16 40 checkButtonToShoot();
Noximilien 33:c623c6d5ed16 41 player.updateAndDraw();
Noximilien 33:c623c6d5ed16 42 player.updateAndDrawBlasts();
Noximilien 33:c623c6d5ed16 43 stars.updateAndDrawSmallStars();
Noximilien 34:754915ce9de5 44 //stars.updateAndDrawMediumStars();
Noximilien 33:c623c6d5ed16 45 stars.starsSpawnDelay();
Noximilien 33:c623c6d5ed16 46 increaseGameDifficultyAndEnemySpawnDelay();
Noximilien 33:c623c6d5ed16 47 hud.displayLifes();
Noximilien 33:c623c6d5ed16 48 hud.drawScore();
Noximilien 33:c623c6d5ed16 49 collideEnemiesAndBlasts();
Noximilien 33:c623c6d5ed16 50 collideEnemiesBlastsAndPlayer();
Noximilien 33:c623c6d5ed16 51 collideEnemiesAndPlayer();
Noximilien 33:c623c6d5ed16 52 enemies.updateAndDrawEnemies();
Noximilien 33:c623c6d5ed16 53 enemies.updateAndDrawEnemyBlasts();
Noximilien 34:754915ce9de5 54 boss.updateAndDrawBossBlasts();
Noximilien 33:c623c6d5ed16 55
Noximilien 34:754915ce9de5 56 if (checkForGameOver()) { game_state = GameState_gameover;}
Noximilien 34:754915ce9de5 57 if (is_boss_active) { game_state = GameState_boss_cutscene;}
Noximilien 33:c623c6d5ed16 58 }
Noximilien 33:c623c6d5ed16 59
Noximilien 33:c623c6d5ed16 60 void Game::updateAndDrawGameover() {
Noximilien 33:c623c6d5ed16 61 gameOverManager.updateAndDraw();
Noximilien 33:c623c6d5ed16 62 if (gamepad.check_event(gamepad.Y_PRESSED) && !gameOverManager.isPlayingAnimation()) {
Noximilien 33:c623c6d5ed16 63 gameOverManager.reset();
Noximilien 33:c623c6d5ed16 64 game_state = GameState_newgame;
Noximilien 33:c623c6d5ed16 65 }
Noximilien 33:c623c6d5ed16 66 }
Noximilien 33:c623c6d5ed16 67
Noximilien 33:c623c6d5ed16 68 void Game::updateAndDrawBossCutscene() {
Noximilien 34:754915ce9de5 69 boss.updateCutscene();
Noximilien 34:754915ce9de5 70 enemies.updateAndDrawEnemyBlasts();
Noximilien 34:754915ce9de5 71 boss.draw();
Noximilien 34:754915ce9de5 72 player.draw();
Noximilien 34:754915ce9de5 73 stars.updateAndDrawSmallStars();
Noximilien 34:754915ce9de5 74 stars.updateAndDrawMediumStars();
Noximilien 34:754915ce9de5 75 if (boss.isFinishedCutscene()) {
Noximilien 33:c623c6d5ed16 76 game_state = GameState_boss_gameplay;
Noximilien 34:754915ce9de5 77 boss.resetCutscene();
Noximilien 33:c623c6d5ed16 78 }
Noximilien 33:c623c6d5ed16 79 }
Noximilien 33:c623c6d5ed16 80
Noximilien 33:c623c6d5ed16 81 void Game::updateAndDrawBossGameplay() {
Noximilien 33:c623c6d5ed16 82 checkButtonToShoot();
Noximilien 34:754915ce9de5 83 enemies.updateAndDrawEnemyBlasts();
Noximilien 33:c623c6d5ed16 84 player.updateAndDraw();
Noximilien 33:c623c6d5ed16 85 player.updateAndDrawBlasts();
Noximilien 33:c623c6d5ed16 86 stars.updateAndDrawSmallStars();
Noximilien 33:c623c6d5ed16 87 stars.starsSpawnDelay();
Noximilien 33:c623c6d5ed16 88 hud.displayLifes();
Noximilien 33:c623c6d5ed16 89 hud.drawScore();
Noximilien 33:c623c6d5ed16 90 boss.updateAndDrawBossBlasts();
Noximilien 33:c623c6d5ed16 91 collideBossAndPlayerBlasts();
Noximilien 34:754915ce9de5 92 collideBossBlastsAndPlayer();
Noximilien 34:754915ce9de5 93 is_boss_active = boss.updateAndDrawBoss();
Noximilien 34:754915ce9de5 94 if (checkForGameOver()) { game_state = GameState_gameover;}
Noximilien 34:754915ce9de5 95 if (!is_boss_active) { game_state = GameState_gameplay;}
Noximilien 33:c623c6d5ed16 96 }
Noximilien 33:c623c6d5ed16 97
Noximilien 30:d454d0cb72bc 98 /**
Noximilien 33:c623c6d5ed16 99 * This is the main function of game.cpp, where the actual gameplay happens.
Noximilien 33:c623c6d5ed16 100 * Here all other functions are activeated, and when the player dies, it
Noximilien 33:c623c6d5ed16 101 * returns back to main menu "main.cpp".
Noximilien 33:c623c6d5ed16 102 */
Noximilien 29:579e00b7f118 103 bool Game::updateAndDraw() {
Noximilien 33:c623c6d5ed16 104 if (game_state == GameState_newgame) {
Noximilien 33:c623c6d5ed16 105 //printf("start game \n");
Noximilien 29:579e00b7f118 106 startNewGame();
Noximilien 29:579e00b7f118 107 }
Noximilien 33:c623c6d5ed16 108 if (game_state == GameState_gameplay) { updateAndDrawGameplay(); }
Noximilien 33:c623c6d5ed16 109 else if (game_state == GameState_boss_cutscene) { updateAndDrawBossCutscene(); }
Noximilien 33:c623c6d5ed16 110 else if (game_state == GameState_boss_gameplay) { updateAndDrawBossGameplay(); }
Noximilien 33:c623c6d5ed16 111 else if (game_state == GameState_gameover) { updateAndDrawGameover(); }
Noximilien 33:c623c6d5ed16 112
Noximilien 33:c623c6d5ed16 113 return checkIfNeedsToReturnToMenu();
Noximilien 33:c623c6d5ed16 114 }
Noximilien 33:c623c6d5ed16 115
Noximilien 33:c623c6d5ed16 116 void Game::checkButtonToShoot(){
Noximilien 31:becb8f6bf7b7 117 if (gamepad.check_event(gamepad.X_PRESSED) && !GameGlobals::is_shield_on){
Noximilien 29:579e00b7f118 118 // Checking the button second time to prevent double blast.
Noximilien 29:579e00b7f118 119 gamepad.check_event(gamepad.X_PRESSED);
Noximilien 33:c623c6d5ed16 120 player.fireNewBlast();
Noximilien 29:579e00b7f118 121 gamepad.tone(200,0.1);
Noximilien 29:579e00b7f118 122 }
Noximilien 29:579e00b7f118 123 }
Noximilien 29:579e00b7f118 124
Noximilien 30:d454d0cb72bc 125 /**
Noximilien 22:4dc3c95f2146 126 * This function checks whether the requirments for the collision of the two objects,
Noximilien 22:4dc3c95f2146 127 * are met. When those requirments are met the collision of two objects function will
Noximilien 22:4dc3c95f2146 128 * be checking wheter the boundaries of the objects colide. If they do, the blast
Noximilien 22:4dc3c95f2146 129 * becomes inactive, in game score increases and enemy dies.
Noximilien 22:4dc3c95f2146 130 */
Noximilien 21:0eb394495b8a 131 void Game::collideEnemiesAndBlasts() {
Noximilien 34:754915ce9de5 132 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 33:c623c6d5ed16 133 for (int j = 0; j < player.max_player_blasts; ++j) {
Noximilien 21:0eb394495b8a 134 Enemy& enemy = enemies.enemies[i];
Noximilien 33:c623c6d5ed16 135 GameObject& blast = player.blasts[j];
Noximilien 21:0eb394495b8a 136 if (enemy.active && !enemy.dead && blast.active) {
Noximilien 30:d454d0cb72bc 137 bool collision = circleBounds.circleCollideTwoObjects(
Noximilien 21:0eb394495b8a 138 enemy.pos, enemies.enemy_bounds,
Noximilien 33:c623c6d5ed16 139 blast.pos, player.blast_bounds
Noximilien 12:bfe3a3deaac3 140 );
Noximilien 12:bfe3a3deaac3 141 if (collision) {
Noximilien 21:0eb394495b8a 142 enemy.die();
Noximilien 33:c623c6d5ed16 143 //printf("enemy got hit and dies from blast");
Noximilien 31:becb8f6bf7b7 144 GameGlobals::game_score += 30;
Noximilien 31:becb8f6bf7b7 145 GameGlobals::score_count_for_difficulty +=30;
Noximilien 34:754915ce9de5 146 GameGlobals::score_count_for_boss_mode += 30;
Noximilien 21:0eb394495b8a 147 blast.active = false;
Noximilien 12:bfe3a3deaac3 148 }
Noximilien 12:bfe3a3deaac3 149 }
Noximilien 12:bfe3a3deaac3 150 }
Noximilien 12:bfe3a3deaac3 151 }
Noximilien 12:bfe3a3deaac3 152 }
Noximilien 5:2b9181bc5c89 153
Noximilien 30:d454d0cb72bc 154 /**
Noximilien 23:240bc00ef25b 155 * This code does the same work as the one before but with two other objects.
Noximilien 22:4dc3c95f2146 156 * It checks whether the requirments for the collision of the two objects,
Noximilien 22:4dc3c95f2146 157 * are met. When those requirments are met the collision of two objects function will
Noximilien 22:4dc3c95f2146 158 * be checking wheter the boundaries of the objects colide. If they do, the blast
Noximilien 22:4dc3c95f2146 159 * becomes inactive, in game score increases and enemy dies.
Noximilien 22:4dc3c95f2146 160 */
Noximilien 21:0eb394495b8a 161 void Game::collideEnemiesBlastsAndPlayer() {
Noximilien 34:754915ce9de5 162 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 21:0eb394495b8a 163 GameObject& blast = enemies.enemy_blasts[i];
Noximilien 21:0eb394495b8a 164 if (blast.active) {
Noximilien 30:d454d0cb72bc 165 bool collision = circleBounds.circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 166 player.pos, player.player_bounds,
Noximilien 21:0eb394495b8a 167 blast.pos, enemies.enemy_blast_bounds
Noximilien 21:0eb394495b8a 168 );
Noximilien 21:0eb394495b8a 169 if (collision) {
Noximilien 31:becb8f6bf7b7 170 if (!GameGlobals::is_shield_on){
Noximilien 30:d454d0cb72bc 171 gamepad.tone(423,0.4);
Noximilien 31:becb8f6bf7b7 172 GameGlobals::player_lifes -= 1;
Noximilien 33:c623c6d5ed16 173 //printf("lost a life from blast. left: %i \n", GameGlobals::player_lifes);
Noximilien 30:d454d0cb72bc 174 blast.active = false;
Noximilien 30:d454d0cb72bc 175 }else{
Noximilien 30:d454d0cb72bc 176 blast.active = false;
Noximilien 30:d454d0cb72bc 177 gamepad.tone(700,0.6);
Noximilien 30:d454d0cb72bc 178 }
Noximilien 18:6becc9f9de5e 179 }
Noximilien 18:6becc9f9de5e 180 }
Noximilien 18:6becc9f9de5e 181 }
Noximilien 18:6becc9f9de5e 182 }
Noximilien 26:676874c42883 183
Noximilien 30:d454d0cb72bc 184 /**
Noximilien 23:240bc00ef25b 185 * This code does the same work as the one before but with two other object.
Noximilien 23:240bc00ef25b 186 * of enemy ship and the player's ship
Noximilien 22:4dc3c95f2146 187 */
Noximilien 23:240bc00ef25b 188 void Game::collideEnemiesAndPlayer() {
Noximilien 34:754915ce9de5 189 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 23:240bc00ef25b 190 Enemy& enemy = enemies.enemies[i];
Noximilien 23:240bc00ef25b 191 if (enemy.active && !enemy.dead) {
Noximilien 30:d454d0cb72bc 192 bool collision = circleBounds.circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 193 player.pos, player.player_bounds,
Noximilien 23:240bc00ef25b 194 enemy.pos, enemies.enemy_bounds
Noximilien 23:240bc00ef25b 195 );
Noximilien 23:240bc00ef25b 196 if (collision) {
Noximilien 31:becb8f6bf7b7 197 GameGlobals::player_lifes -= 1;
Noximilien 33:c623c6d5ed16 198 //printf("lost a life from enemy col. left: %i \n", GameGlobals::player_lifes);
Noximilien 23:240bc00ef25b 199 enemy.die();
Noximilien 33:c623c6d5ed16 200 //printf("enemy got hit from collsion and dies");
Noximilien 33:c623c6d5ed16 201 }
Noximilien 33:c623c6d5ed16 202 }
Noximilien 33:c623c6d5ed16 203 }
Noximilien 33:c623c6d5ed16 204 }
Noximilien 33:c623c6d5ed16 205
Noximilien 33:c623c6d5ed16 206 void Game::collideBossAndPlayerBlasts() {
Noximilien 33:c623c6d5ed16 207 for (int i = 0; i < player.max_player_blasts; ++i) {
Noximilien 33:c623c6d5ed16 208 GameObject& blast = player.blasts[i];
Noximilien 33:c623c6d5ed16 209 if (blast.active) {
Noximilien 33:c623c6d5ed16 210 bool collision = circleBounds.circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 211 boss.pos, boss.boss_bounds,
Noximilien 33:c623c6d5ed16 212 blast.pos, player.blast_bounds
Noximilien 33:c623c6d5ed16 213 );
Noximilien 33:c623c6d5ed16 214 if (collision) {
Noximilien 34:754915ce9de5 215 boss.boss_lives -= 1;
Noximilien 33:c623c6d5ed16 216 gamepad.tone(123,0.4);
Noximilien 33:c623c6d5ed16 217 blast.active = false;
Noximilien 34:754915ce9de5 218 #ifdef DEBUGel17dg
Noximilien 34:754915ce9de5 219 printf("boss has. left: %i \n", boss.boss_lives);
Noximilien 34:754915ce9de5 220 #endif
Noximilien 34:754915ce9de5 221 }
Noximilien 34:754915ce9de5 222 }
Noximilien 34:754915ce9de5 223 }
Noximilien 34:754915ce9de5 224 }
Noximilien 34:754915ce9de5 225
Noximilien 34:754915ce9de5 226 void Game::collideBossBlastsAndPlayer() {
Noximilien 34:754915ce9de5 227 for (int i = 0; i < boss.max_boss_blasts; ++i) {
Noximilien 34:754915ce9de5 228 GameObject& blast = boss.boss_blasts[i];
Noximilien 34:754915ce9de5 229 if (blast.active) {
Noximilien 34:754915ce9de5 230 bool collision = circleBounds.circleCollideTwoObjects(
Noximilien 34:754915ce9de5 231 player.pos, player.player_bounds,
Noximilien 34:754915ce9de5 232 blast.pos, boss.boss_blast_bounds
Noximilien 34:754915ce9de5 233 );
Noximilien 34:754915ce9de5 234 #ifdef DEBUGel17dg
Noximilien 34:754915ce9de5 235 printf("player pos:%i,%i; offset:%i,%i; radius:%f.3; \n", player.pos.x, player.pos.y, player.player_bounds.center.x, player.player_bounds.center.y, player.player_bounds.radius);
Noximilien 34:754915ce9de5 236 printf("blas pos:%i,%i; offset:%i,%i; radius:%f.3; \n", blast.pos.x, blast.pos.y, boss.boss_blast_bounds.center.x, boss.boss_blast_bounds.center.y, boss.boss_blast_bounds.radius);
Noximilien 34:754915ce9de5 237 #endif
Noximilien 34:754915ce9de5 238 if (collision) {
Noximilien 34:754915ce9de5 239 if (!GameGlobals::is_shield_on){
Noximilien 34:754915ce9de5 240
Noximilien 34:754915ce9de5 241 gamepad.tone(423,0.4);
Noximilien 34:754915ce9de5 242 GameGlobals::player_lifes -= 1;
Noximilien 34:754915ce9de5 243 blast.active = false;
Noximilien 34:754915ce9de5 244 #ifdef DEBUGel17dg
Noximilien 34:754915ce9de5 245 printf("collision happened;\n");
Noximilien 34:754915ce9de5 246 printf("lost a life from blast. left: %i \n", GameGlobals::player_lifes);
Noximilien 34:754915ce9de5 247 #endif
Noximilien 34:754915ce9de5 248 }else{
Noximilien 34:754915ce9de5 249 blast.active = false;
Noximilien 34:754915ce9de5 250 gamepad.tone(700,0.6);
Noximilien 34:754915ce9de5 251 }
Noximilien 23:240bc00ef25b 252 }
Noximilien 23:240bc00ef25b 253 }
Noximilien 23:240bc00ef25b 254 }
Noximilien 13:5c3dc6e827c2 255 }
Noximilien 13:5c3dc6e827c2 256
Noximilien 30:d454d0cb72bc 257 /**
Noximilien 26:676874c42883 258 * This function resets all the values to their intial states when the game is
Noximilien 26:676874c42883 259 * first began when the player dies and wants to restart the game.
Noximilien 23:240bc00ef25b 260 * It does not reset the values when the game is paused.
Noximilien 23:240bc00ef25b 261 */
Noximilien 21:0eb394495b8a 262 void Game::startNewGame() {
Noximilien 34:754915ce9de5 263 is_boss_active = false;
Noximilien 34:754915ce9de5 264 game_state = GameState_gameplay;
Noximilien 33:c623c6d5ed16 265 player.pos.x = 0; //player was defined in player.h
Noximilien 33:c623c6d5ed16 266 player.pos.y = 24;
Noximilien 31:becb8f6bf7b7 267 stars.stars_delay = 0;
Noximilien 26:676874c42883 268 enemy_ship_delay_max = 40;
Noximilien 26:676874c42883 269 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 31:becb8f6bf7b7 270 GameGlobals::is_shield_on = false;
Noximilien 31:becb8f6bf7b7 271 GameGlobals::game_score = 0;
Noximilien 31:becb8f6bf7b7 272 GameGlobals::score_count_for_difficulty = 0;
Noximilien 31:becb8f6bf7b7 273 GameGlobals::player_lifes = 3;
Noximilien 34:754915ce9de5 274 GameGlobals::score_count_for_boss_mode = 0;
Noximilien 31:becb8f6bf7b7 275 hud.resetRedLed();
Noximilien 34:754915ce9de5 276 enemies.enemy_blast_speed = 3;
Noximilien 34:754915ce9de5 277 enemy.enemy_speed = 1;
Noximilien 34:754915ce9de5 278 #ifdef DEBUGel17dg
Noximilien 34:754915ce9de5 279 printf("startNewGame\n");
Noximilien 34:754915ce9de5 280 printf("boss lives set to: %i \n", boss.boss_lives);
Noximilien 34:754915ce9de5 281 #endif
Noximilien 34:754915ce9de5 282 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 21:0eb394495b8a 283 enemies.enemies[i].active = false;
Noximilien 13:5c3dc6e827c2 284 }
Noximilien 33:c623c6d5ed16 285 for (int i = 0; i < player.max_player_blasts; ++i) {
Noximilien 33:c623c6d5ed16 286 player.blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 287 }
Noximilien 34:754915ce9de5 288 for (int i = 0; i < enemies.max_enemy_blasts; ++i) {
Noximilien 21:0eb394495b8a 289 enemies.enemy_blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 290 }
Noximilien 34:754915ce9de5 291 for (int i = 0; i < boss.max_boss_blasts; ++i) {
Noximilien 34:754915ce9de5 292 boss.boss_blasts[i].active = false;
Noximilien 34:754915ce9de5 293 }
Noximilien 13:5c3dc6e827c2 294 }
Noximilien 13:5c3dc6e827c2 295
Noximilien 30:d454d0cb72bc 296 /**
Noximilien 26:676874c42883 297 * A function tbat delays enemy spawn on low game score.
Noximilien 26:676874c42883 298 * It decreases the enemy spawn delay as in game score increases.
Noximilien 29:579e00b7f118 299 * The enemy spawn delay is located in game.cpp because the game difficulty
Noximilien 29:579e00b7f118 300 * depends on the on how fast enemy appears.
Noximilien 26:676874c42883 301 */
Noximilien 26:676874c42883 302 void Game::increaseGameDifficultyAndEnemySpawnDelay(){
Noximilien 26:676874c42883 303 if (enemy_ship_delay_counter <= 0){
Noximilien 26:676874c42883 304 enemies.spawnNewEnemy();
Noximilien 26:676874c42883 305 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 26:676874c42883 306 }
Noximilien 26:676874c42883 307 else { enemy_ship_delay_counter -= 1;}
Noximilien 26:676874c42883 308
Noximilien 31:becb8f6bf7b7 309 if (enemy_ship_delay_max >= 4 && GameGlobals::score_count_for_difficulty >= increase_difficulty){
Noximilien 29:579e00b7f118 310 //decrease enemy delay spawn.
Noximilien 26:676874c42883 311 enemy_ship_delay_max -= 3;
Noximilien 26:676874c42883 312 if (enemy_ship_delay_max <= 20 && enemy_ship_delay_max >= 15){
Noximilien 34:754915ce9de5 313 enemies.enemy_blast_speed += 1;
Noximilien 34:754915ce9de5 314 enemy.enemy_speed += 1;
Noximilien 26:676874c42883 315 }
Noximilien 31:becb8f6bf7b7 316 GameGlobals::score_count_for_difficulty = 0;
Noximilien 26:676874c42883 317 }
Noximilien 34:754915ce9de5 318 if (GameGlobals::score_count_for_boss_mode >= 400){
Noximilien 34:754915ce9de5 319 is_boss_active = true;
Noximilien 31:becb8f6bf7b7 320 lcd.inverseMode();
Noximilien 31:becb8f6bf7b7 321 }
Noximilien 26:676874c42883 322 }
Noximilien 26:676874c42883 323
Noximilien 30:d454d0cb72bc 324 bool Game::forceShildActivate(){
Noximilien 30:d454d0cb72bc 325 if (gamepad.check_event(gamepad.R_PRESSED)){
Noximilien 31:becb8f6bf7b7 326 GameGlobals::is_shield_on = !GameGlobals::is_shield_on;
Noximilien 30:d454d0cb72bc 327 }
Noximilien 31:becb8f6bf7b7 328 return GameGlobals::is_shield_on;
Noximilien 30:d454d0cb72bc 329 }
Noximilien 30:d454d0cb72bc 330
Noximilien 30:d454d0cb72bc 331 /**
Noximilien 27:f05f4e738ba9 332 * This is a single line function to set the player lifes to 0 when the.
Noximilien 27:f05f4e738ba9 333 * game is over.
Noximilien 27:f05f4e738ba9 334 */
Noximilien 27:f05f4e738ba9 335 bool Game::checkForGameOver() {
Noximilien 34:754915ce9de5 336 return GameGlobals::player_lifes <= 0;
Noximilien 28:35af3843de8f 337 }
Noximilien 29:579e00b7f118 338
Noximilien 30:d454d0cb72bc 339 /** This small statment checks whether the pause button was pressed or not.
Noximilien 30:d454d0cb72bc 340 * If it was pressed, then the game will go back to main menu and will save
Noximilien 30:d454d0cb72bc 341 * the current status of the object until the game is continued.
Noximilien 30:d454d0cb72bc 342 */
Noximilien 33:c623c6d5ed16 343 bool Game::checkIfNeedsToReturnToMenu(){
Noximilien 30:d454d0cb72bc 344 bool want_to_pause = false;
Noximilien 33:c623c6d5ed16 345
Noximilien 30:d454d0cb72bc 346 if (gamepad.check_event(gamepad.START_PRESSED)){
Noximilien 34:754915ce9de5 347 #ifdef DEBUGel17dg
Noximilien 34:754915ce9de5 348 printf("game paused\n");
Noximilien 34:754915ce9de5 349 #endif
Noximilien 30:d454d0cb72bc 350 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 30:d454d0cb72bc 351 want_to_pause = true;
Noximilien 30:d454d0cb72bc 352 }
Noximilien 30:d454d0cb72bc 353 return want_to_pause;
Noximilien 26:676874c42883 354 }