ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Mon May 06 22:35:51 2019 +0000
Revision:
37:6a2bf4488022
Parent:
36:207ec7db8648
Child:
38:ef3968546d36
Have made finishing changes for comments and game. Have added a debug in main.h. Have separate the simplified sprite drawing into sprite.h.

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 26:676874c42883 35 Hud hud;
Noximilien 12:bfe3a3deaac3 36
Noximilien 33:c623c6d5ed16 37
Noximilien 33:c623c6d5ed16 38 void Game::updateAndDrawGameplay() {
Noximilien 33:c623c6d5ed16 39 checkButtonToShoot();
Noximilien 33:c623c6d5ed16 40 player.updateAndDraw();
Noximilien 33:c623c6d5ed16 41 player.updateAndDrawBlasts();
Noximilien 33:c623c6d5ed16 42 stars.updateAndDrawSmallStars();
Noximilien 34:754915ce9de5 43 //stars.updateAndDrawMediumStars();
Noximilien 33:c623c6d5ed16 44 stars.starsSpawnDelay();
Noximilien 33:c623c6d5ed16 45 increaseGameDifficultyAndEnemySpawnDelay();
Noximilien 33:c623c6d5ed16 46 hud.displayLifes();
Noximilien 33:c623c6d5ed16 47 hud.drawScore();
Noximilien 33:c623c6d5ed16 48 collideEnemiesAndBlasts();
Noximilien 33:c623c6d5ed16 49 collideEnemiesBlastsAndPlayer();
Noximilien 33:c623c6d5ed16 50 collideEnemiesAndPlayer();
Noximilien 33:c623c6d5ed16 51 enemies.updateAndDrawEnemies();
Noximilien 33:c623c6d5ed16 52 enemies.updateAndDrawEnemyBlasts();
Noximilien 34:754915ce9de5 53 boss.updateAndDrawBossBlasts();
Noximilien 33:c623c6d5ed16 54
Noximilien 34:754915ce9de5 55 if (checkForGameOver()) { game_state = GameState_gameover;}
Noximilien 34:754915ce9de5 56 if (is_boss_active) { game_state = GameState_boss_cutscene;}
Noximilien 33:c623c6d5ed16 57 }
Noximilien 33:c623c6d5ed16 58
Noximilien 33:c623c6d5ed16 59 void Game::updateAndDrawGameover() {
Noximilien 33:c623c6d5ed16 60 gameOverManager.updateAndDraw();
Noximilien 37:6a2bf4488022 61 lcd.normalMode();
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 37:6a2bf4488022 105 DG_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 37:6a2bf4488022 137 bool collision = 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 37:6a2bf4488022 143 DG_PRINTF("enemy got hit and dies \n");
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 37:6a2bf4488022 165 bool collision = 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 37:6a2bf4488022 173 DG_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 37:6a2bf4488022 192 bool collision = 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 36:207ec7db8648 198
Noximilien 23:240bc00ef25b 199 enemy.die();
Noximilien 37:6a2bf4488022 200 DG_PRINTF("enemy got hit from collsion and dies");
Noximilien 37:6a2bf4488022 201 DG_PRINTF("lost a life from enemy col. left: %i \n", GameGlobals::player_lifes);
Noximilien 33:c623c6d5ed16 202 }
Noximilien 33:c623c6d5ed16 203 }
Noximilien 33:c623c6d5ed16 204 }
Noximilien 33:c623c6d5ed16 205 }
Noximilien 33:c623c6d5ed16 206
Noximilien 33:c623c6d5ed16 207 void Game::collideBossAndPlayerBlasts() {
Noximilien 33:c623c6d5ed16 208 for (int i = 0; i < player.max_player_blasts; ++i) {
Noximilien 33:c623c6d5ed16 209 GameObject& blast = player.blasts[i];
Noximilien 33:c623c6d5ed16 210 if (blast.active) {
Noximilien 37:6a2bf4488022 211 bool collision = circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 212 boss.pos, boss.boss_bounds,
Noximilien 33:c623c6d5ed16 213 blast.pos, player.blast_bounds
Noximilien 33:c623c6d5ed16 214 );
Noximilien 33:c623c6d5ed16 215 if (collision) {
Noximilien 34:754915ce9de5 216 boss.boss_lives -= 1;
Noximilien 33:c623c6d5ed16 217 gamepad.tone(123,0.4);
Noximilien 33:c623c6d5ed16 218 blast.active = false;
Noximilien 37:6a2bf4488022 219 DG_PRINTF("boss has. left: %i \n", boss.boss_lives);
Noximilien 34:754915ce9de5 220 }
Noximilien 34:754915ce9de5 221 }
Noximilien 34:754915ce9de5 222 }
Noximilien 34:754915ce9de5 223 }
Noximilien 34:754915ce9de5 224
Noximilien 34:754915ce9de5 225 void Game::collideBossBlastsAndPlayer() {
Noximilien 34:754915ce9de5 226 for (int i = 0; i < boss.max_boss_blasts; ++i) {
Noximilien 34:754915ce9de5 227 GameObject& blast = boss.boss_blasts[i];
Noximilien 34:754915ce9de5 228 if (blast.active) {
Noximilien 37:6a2bf4488022 229 bool collision = circleCollideTwoObjects(
Noximilien 34:754915ce9de5 230 player.pos, player.player_bounds,
Noximilien 34:754915ce9de5 231 blast.pos, boss.boss_blast_bounds
Noximilien 34:754915ce9de5 232 );
Noximilien 37:6a2bf4488022 233 DG_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 37:6a2bf4488022 234 DG_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 235 if (collision) {
Noximilien 34:754915ce9de5 236 if (!GameGlobals::is_shield_on){
Noximilien 34:754915ce9de5 237
Noximilien 34:754915ce9de5 238 gamepad.tone(423,0.4);
Noximilien 34:754915ce9de5 239 GameGlobals::player_lifes -= 1;
Noximilien 34:754915ce9de5 240 blast.active = false;
Noximilien 37:6a2bf4488022 241 DG_PRINTF("collision happened;\n");
Noximilien 37:6a2bf4488022 242 DG_PRINTF("lost a life from blast. left: %i \n", GameGlobals::player_lifes);
Noximilien 34:754915ce9de5 243 }else{
Noximilien 34:754915ce9de5 244 blast.active = false;
Noximilien 34:754915ce9de5 245 gamepad.tone(700,0.6);
Noximilien 34:754915ce9de5 246 }
Noximilien 23:240bc00ef25b 247 }
Noximilien 23:240bc00ef25b 248 }
Noximilien 23:240bc00ef25b 249 }
Noximilien 13:5c3dc6e827c2 250 }
Noximilien 13:5c3dc6e827c2 251
Noximilien 30:d454d0cb72bc 252 /**
Noximilien 26:676874c42883 253 * This function resets all the values to their intial states when the game is
Noximilien 26:676874c42883 254 * first began when the player dies and wants to restart the game.
Noximilien 23:240bc00ef25b 255 * It does not reset the values when the game is paused.
Noximilien 23:240bc00ef25b 256 */
Noximilien 21:0eb394495b8a 257 void Game::startNewGame() {
Noximilien 34:754915ce9de5 258 is_boss_active = false;
Noximilien 37:6a2bf4488022 259 //game_state = GameState_gameplay;
Noximilien 37:6a2bf4488022 260 game_state = GameState_boss_cutscene;
Noximilien 33:c623c6d5ed16 261 player.pos.x = 0; //player was defined in player.h
Noximilien 33:c623c6d5ed16 262 player.pos.y = 24;
Noximilien 31:becb8f6bf7b7 263 stars.stars_delay = 0;
Noximilien 26:676874c42883 264 enemy_ship_delay_max = 40;
Noximilien 26:676874c42883 265 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 31:becb8f6bf7b7 266 GameGlobals::is_shield_on = false;
Noximilien 31:becb8f6bf7b7 267 GameGlobals::game_score = 0;
Noximilien 31:becb8f6bf7b7 268 GameGlobals::score_count_for_difficulty = 0;
Noximilien 31:becb8f6bf7b7 269 GameGlobals::player_lifes = 3;
Noximilien 34:754915ce9de5 270 GameGlobals::score_count_for_boss_mode = 0;
Noximilien 31:becb8f6bf7b7 271 hud.resetRedLed();
Noximilien 34:754915ce9de5 272 enemies.enemy_blast_speed = 3;
Noximilien 34:754915ce9de5 273 enemy.enemy_speed = 1;
Noximilien 37:6a2bf4488022 274
Noximilien 34:754915ce9de5 275 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 21:0eb394495b8a 276 enemies.enemies[i].active = false;
Noximilien 13:5c3dc6e827c2 277 }
Noximilien 33:c623c6d5ed16 278 for (int i = 0; i < player.max_player_blasts; ++i) {
Noximilien 33:c623c6d5ed16 279 player.blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 280 }
Noximilien 34:754915ce9de5 281 for (int i = 0; i < enemies.max_enemy_blasts; ++i) {
Noximilien 21:0eb394495b8a 282 enemies.enemy_blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 283 }
Noximilien 34:754915ce9de5 284 for (int i = 0; i < boss.max_boss_blasts; ++i) {
Noximilien 34:754915ce9de5 285 boss.boss_blasts[i].active = false;
Noximilien 34:754915ce9de5 286 }
Noximilien 36:207ec7db8648 287 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 13:5c3dc6e827c2 288 }
Noximilien 13:5c3dc6e827c2 289
Noximilien 30:d454d0cb72bc 290 /**
Noximilien 26:676874c42883 291 * A function tbat delays enemy spawn on low game score.
Noximilien 26:676874c42883 292 * It decreases the enemy spawn delay as in game score increases.
Noximilien 29:579e00b7f118 293 * The enemy spawn delay is located in game.cpp because the game difficulty
Noximilien 29:579e00b7f118 294 * depends on the on how fast enemy appears.
Noximilien 26:676874c42883 295 */
Noximilien 26:676874c42883 296 void Game::increaseGameDifficultyAndEnemySpawnDelay(){
Noximilien 26:676874c42883 297 if (enemy_ship_delay_counter <= 0){
Noximilien 26:676874c42883 298 enemies.spawnNewEnemy();
Noximilien 26:676874c42883 299 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 26:676874c42883 300 }
Noximilien 26:676874c42883 301 else { enemy_ship_delay_counter -= 1;}
Noximilien 26:676874c42883 302
Noximilien 31:becb8f6bf7b7 303 if (enemy_ship_delay_max >= 4 && GameGlobals::score_count_for_difficulty >= increase_difficulty){
Noximilien 29:579e00b7f118 304 //decrease enemy delay spawn.
Noximilien 26:676874c42883 305 enemy_ship_delay_max -= 3;
Noximilien 26:676874c42883 306 if (enemy_ship_delay_max <= 20 && enemy_ship_delay_max >= 15){
Noximilien 34:754915ce9de5 307 enemies.enemy_blast_speed += 1;
Noximilien 34:754915ce9de5 308 enemy.enemy_speed += 1;
Noximilien 26:676874c42883 309 }
Noximilien 31:becb8f6bf7b7 310 GameGlobals::score_count_for_difficulty = 0;
Noximilien 26:676874c42883 311 }
Noximilien 34:754915ce9de5 312 if (GameGlobals::score_count_for_boss_mode >= 400){
Noximilien 34:754915ce9de5 313 is_boss_active = true;
Noximilien 31:becb8f6bf7b7 314 lcd.inverseMode();
Noximilien 31:becb8f6bf7b7 315 }
Noximilien 26:676874c42883 316 }
Noximilien 26:676874c42883 317
Noximilien 30:d454d0cb72bc 318 bool Game::forceShildActivate(){
Noximilien 30:d454d0cb72bc 319 if (gamepad.check_event(gamepad.R_PRESSED)){
Noximilien 31:becb8f6bf7b7 320 GameGlobals::is_shield_on = !GameGlobals::is_shield_on;
Noximilien 30:d454d0cb72bc 321 }
Noximilien 31:becb8f6bf7b7 322 return GameGlobals::is_shield_on;
Noximilien 30:d454d0cb72bc 323 }
Noximilien 30:d454d0cb72bc 324
Noximilien 30:d454d0cb72bc 325 /**
Noximilien 27:f05f4e738ba9 326 * This is a single line function to set the player lifes to 0 when the.
Noximilien 27:f05f4e738ba9 327 * game is over.
Noximilien 27:f05f4e738ba9 328 */
Noximilien 27:f05f4e738ba9 329 bool Game::checkForGameOver() {
Noximilien 34:754915ce9de5 330 return GameGlobals::player_lifes <= 0;
Noximilien 28:35af3843de8f 331 }
Noximilien 29:579e00b7f118 332
Noximilien 30:d454d0cb72bc 333 /** This small statment checks whether the pause button was pressed or not.
Noximilien 30:d454d0cb72bc 334 * If it was pressed, then the game will go back to main menu and will save
Noximilien 30:d454d0cb72bc 335 * the current status of the object until the game is continued.
Noximilien 30:d454d0cb72bc 336 */
Noximilien 33:c623c6d5ed16 337 bool Game::checkIfNeedsToReturnToMenu(){
Noximilien 30:d454d0cb72bc 338 bool want_to_pause = false;
Noximilien 33:c623c6d5ed16 339
Noximilien 30:d454d0cb72bc 340 if (gamepad.check_event(gamepad.START_PRESSED)){
Noximilien 37:6a2bf4488022 341 DG_PRINTF("game paused\n");
Noximilien 30:d454d0cb72bc 342 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 30:d454d0cb72bc 343 want_to_pause = true;
Noximilien 30:d454d0cb72bc 344 }
Noximilien 30:d454d0cb72bc 345 return want_to_pause;
Noximilien 26:676874c42883 346 }