Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Tue May 07 15:22:35 2019 +0000
Revision:
40:e3bbda7444fa
Parent:
39:ca77a6d574e6
The Final, Submission Version. I have read and agreed to the academic integrity. SID:201160286

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 39:ca77a6d574e6 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 38:ef3968546d36 75 gamepad.tone(60,2);
Noximilien 39:ca77a6d574e6 76 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 39:ca77a6d574e6 77 enemies.enemies[i].active = false;
Noximilien 39:ca77a6d574e6 78 }
Noximilien 39:ca77a6d574e6 79 for (int i = 0; i < enemies.max_enemy_blasts; ++i) {
Noximilien 39:ca77a6d574e6 80 enemies.enemy_blasts[i].active = false;
Noximilien 39:ca77a6d574e6 81 }
Noximilien 34:754915ce9de5 82 if (boss.isFinishedCutscene()) {
Noximilien 33:c623c6d5ed16 83 game_state = GameState_boss_gameplay;
Noximilien 34:754915ce9de5 84 boss.resetCutscene();
Noximilien 33:c623c6d5ed16 85 }
Noximilien 33:c623c6d5ed16 86 }
Noximilien 33:c623c6d5ed16 87
Noximilien 33:c623c6d5ed16 88 void Game::updateAndDrawBossGameplay() {
Noximilien 33:c623c6d5ed16 89 checkButtonToShoot();
Noximilien 34:754915ce9de5 90 enemies.updateAndDrawEnemyBlasts();
Noximilien 33:c623c6d5ed16 91 player.updateAndDraw();
Noximilien 33:c623c6d5ed16 92 player.updateAndDrawBlasts();
Noximilien 33:c623c6d5ed16 93 stars.updateAndDrawSmallStars();
Noximilien 33:c623c6d5ed16 94 stars.starsSpawnDelay();
Noximilien 33:c623c6d5ed16 95 hud.displayLifes();
Noximilien 33:c623c6d5ed16 96 hud.drawScore();
Noximilien 33:c623c6d5ed16 97 boss.updateAndDrawBossBlasts();
Noximilien 33:c623c6d5ed16 98 collideBossAndPlayerBlasts();
Noximilien 34:754915ce9de5 99 collideBossBlastsAndPlayer();
Noximilien 34:754915ce9de5 100 is_boss_active = boss.updateAndDrawBoss();
Noximilien 34:754915ce9de5 101 if (checkForGameOver()) { game_state = GameState_gameover;}
Noximilien 34:754915ce9de5 102 if (!is_boss_active) { game_state = GameState_gameplay;}
Noximilien 33:c623c6d5ed16 103 }
Noximilien 33:c623c6d5ed16 104
Noximilien 30:d454d0cb72bc 105 /**
Noximilien 33:c623c6d5ed16 106 * This is the main function of game.cpp, where the actual gameplay happens.
Noximilien 33:c623c6d5ed16 107 * Here all other functions are activeated, and when the player dies, it
Noximilien 33:c623c6d5ed16 108 * returns back to main menu "main.cpp".
Noximilien 33:c623c6d5ed16 109 */
Noximilien 29:579e00b7f118 110 bool Game::updateAndDraw() {
Noximilien 33:c623c6d5ed16 111 if (game_state == GameState_newgame) {
Noximilien 37:6a2bf4488022 112 DG_PRINTF("start game \n");
Noximilien 29:579e00b7f118 113 startNewGame();
Noximilien 29:579e00b7f118 114 }
Noximilien 33:c623c6d5ed16 115 if (game_state == GameState_gameplay) { updateAndDrawGameplay(); }
Noximilien 33:c623c6d5ed16 116 else if (game_state == GameState_boss_cutscene) { updateAndDrawBossCutscene(); }
Noximilien 33:c623c6d5ed16 117 else if (game_state == GameState_boss_gameplay) { updateAndDrawBossGameplay(); }
Noximilien 33:c623c6d5ed16 118 else if (game_state == GameState_gameover) { updateAndDrawGameover(); }
Noximilien 33:c623c6d5ed16 119
Noximilien 33:c623c6d5ed16 120 return checkIfNeedsToReturnToMenu();
Noximilien 33:c623c6d5ed16 121 }
Noximilien 33:c623c6d5ed16 122
Noximilien 33:c623c6d5ed16 123 void Game::checkButtonToShoot(){
Noximilien 31:becb8f6bf7b7 124 if (gamepad.check_event(gamepad.X_PRESSED) && !GameGlobals::is_shield_on){
Noximilien 29:579e00b7f118 125 // Checking the button second time to prevent double blast.
Noximilien 29:579e00b7f118 126 gamepad.check_event(gamepad.X_PRESSED);
Noximilien 33:c623c6d5ed16 127 player.fireNewBlast();
Noximilien 29:579e00b7f118 128 gamepad.tone(200,0.1);
Noximilien 29:579e00b7f118 129 }
Noximilien 29:579e00b7f118 130 }
Noximilien 29:579e00b7f118 131
Noximilien 30:d454d0cb72bc 132 /**
Noximilien 22:4dc3c95f2146 133 * This function checks whether the requirments for the collision of the two objects,
Noximilien 22:4dc3c95f2146 134 * are met. When those requirments are met the collision of two objects function will
Noximilien 22:4dc3c95f2146 135 * be checking wheter the boundaries of the objects colide. If they do, the blast
Noximilien 22:4dc3c95f2146 136 * becomes inactive, in game score increases and enemy dies.
Noximilien 22:4dc3c95f2146 137 */
Noximilien 21:0eb394495b8a 138 void Game::collideEnemiesAndBlasts() {
Noximilien 34:754915ce9de5 139 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 33:c623c6d5ed16 140 for (int j = 0; j < player.max_player_blasts; ++j) {
Noximilien 21:0eb394495b8a 141 Enemy& enemy = enemies.enemies[i];
Noximilien 33:c623c6d5ed16 142 GameObject& blast = player.blasts[j];
Noximilien 21:0eb394495b8a 143 if (enemy.active && !enemy.dead && blast.active) {
Noximilien 37:6a2bf4488022 144 bool collision = circleCollideTwoObjects(
Noximilien 21:0eb394495b8a 145 enemy.pos, enemies.enemy_bounds,
Noximilien 33:c623c6d5ed16 146 blast.pos, player.blast_bounds
Noximilien 12:bfe3a3deaac3 147 );
Noximilien 12:bfe3a3deaac3 148 if (collision) {
Noximilien 21:0eb394495b8a 149 enemy.die();
Noximilien 37:6a2bf4488022 150 DG_PRINTF("enemy got hit and dies \n");
Noximilien 31:becb8f6bf7b7 151 GameGlobals::game_score += 30;
Noximilien 31:becb8f6bf7b7 152 GameGlobals::score_count_for_difficulty +=30;
Noximilien 34:754915ce9de5 153 GameGlobals::score_count_for_boss_mode += 30;
Noximilien 21:0eb394495b8a 154 blast.active = false;
Noximilien 12:bfe3a3deaac3 155 }
Noximilien 12:bfe3a3deaac3 156 }
Noximilien 12:bfe3a3deaac3 157 }
Noximilien 12:bfe3a3deaac3 158 }
Noximilien 12:bfe3a3deaac3 159 }
Noximilien 5:2b9181bc5c89 160
Noximilien 30:d454d0cb72bc 161 /**
Noximilien 23:240bc00ef25b 162 * This code does the same work as the one before but with two other objects.
Noximilien 22:4dc3c95f2146 163 * It checks whether the requirments for the collision of the two objects,
Noximilien 22:4dc3c95f2146 164 * are met. When those requirments are met the collision of two objects function will
Noximilien 22:4dc3c95f2146 165 * be checking wheter the boundaries of the objects colide. If they do, the blast
Noximilien 22:4dc3c95f2146 166 * becomes inactive, in game score increases and enemy dies.
Noximilien 22:4dc3c95f2146 167 */
Noximilien 21:0eb394495b8a 168 void Game::collideEnemiesBlastsAndPlayer() {
Noximilien 34:754915ce9de5 169 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 21:0eb394495b8a 170 GameObject& blast = enemies.enemy_blasts[i];
Noximilien 21:0eb394495b8a 171 if (blast.active) {
Noximilien 37:6a2bf4488022 172 bool collision = circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 173 player.pos, player.player_bounds,
Noximilien 21:0eb394495b8a 174 blast.pos, enemies.enemy_blast_bounds
Noximilien 21:0eb394495b8a 175 );
Noximilien 21:0eb394495b8a 176 if (collision) {
Noximilien 31:becb8f6bf7b7 177 if (!GameGlobals::is_shield_on){
Noximilien 30:d454d0cb72bc 178 gamepad.tone(423,0.4);
Noximilien 31:becb8f6bf7b7 179 GameGlobals::player_lifes -= 1;
Noximilien 37:6a2bf4488022 180 DG_PRINTF("lost a life from blast. left: %i \n", GameGlobals::player_lifes);
Noximilien 30:d454d0cb72bc 181 blast.active = false;
Noximilien 30:d454d0cb72bc 182 }else{
Noximilien 30:d454d0cb72bc 183 blast.active = false;
Noximilien 30:d454d0cb72bc 184 gamepad.tone(700,0.6);
Noximilien 30:d454d0cb72bc 185 }
Noximilien 18:6becc9f9de5e 186 }
Noximilien 18:6becc9f9de5e 187 }
Noximilien 18:6becc9f9de5e 188 }
Noximilien 18:6becc9f9de5e 189 }
Noximilien 26:676874c42883 190
Noximilien 30:d454d0cb72bc 191 /**
Noximilien 23:240bc00ef25b 192 * This code does the same work as the one before but with two other object.
Noximilien 23:240bc00ef25b 193 * of enemy ship and the player's ship
Noximilien 22:4dc3c95f2146 194 */
Noximilien 23:240bc00ef25b 195 void Game::collideEnemiesAndPlayer() {
Noximilien 34:754915ce9de5 196 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 23:240bc00ef25b 197 Enemy& enemy = enemies.enemies[i];
Noximilien 23:240bc00ef25b 198 if (enemy.active && !enemy.dead) {
Noximilien 37:6a2bf4488022 199 bool collision = circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 200 player.pos, player.player_bounds,
Noximilien 23:240bc00ef25b 201 enemy.pos, enemies.enemy_bounds
Noximilien 23:240bc00ef25b 202 );
Noximilien 23:240bc00ef25b 203 if (collision) {
Noximilien 31:becb8f6bf7b7 204 GameGlobals::player_lifes -= 1;
Noximilien 36:207ec7db8648 205
Noximilien 23:240bc00ef25b 206 enemy.die();
Noximilien 37:6a2bf4488022 207 DG_PRINTF("enemy got hit from collsion and dies");
Noximilien 37:6a2bf4488022 208 DG_PRINTF("lost a life from enemy col. left: %i \n", GameGlobals::player_lifes);
Noximilien 33:c623c6d5ed16 209 }
Noximilien 33:c623c6d5ed16 210 }
Noximilien 33:c623c6d5ed16 211 }
Noximilien 33:c623c6d5ed16 212 }
Noximilien 33:c623c6d5ed16 213
Noximilien 33:c623c6d5ed16 214 void Game::collideBossAndPlayerBlasts() {
Noximilien 33:c623c6d5ed16 215 for (int i = 0; i < player.max_player_blasts; ++i) {
Noximilien 33:c623c6d5ed16 216 GameObject& blast = player.blasts[i];
Noximilien 33:c623c6d5ed16 217 if (blast.active) {
Noximilien 37:6a2bf4488022 218 bool collision = circleCollideTwoObjects(
Noximilien 33:c623c6d5ed16 219 boss.pos, boss.boss_bounds,
Noximilien 33:c623c6d5ed16 220 blast.pos, player.blast_bounds
Noximilien 33:c623c6d5ed16 221 );
Noximilien 33:c623c6d5ed16 222 if (collision) {
Noximilien 34:754915ce9de5 223 boss.boss_lives -= 1;
Noximilien 33:c623c6d5ed16 224 gamepad.tone(123,0.4);
Noximilien 33:c623c6d5ed16 225 blast.active = false;
Noximilien 37:6a2bf4488022 226 DG_PRINTF("boss has. left: %i \n", boss.boss_lives);
Noximilien 34:754915ce9de5 227 }
Noximilien 34:754915ce9de5 228 }
Noximilien 34:754915ce9de5 229 }
Noximilien 34:754915ce9de5 230 }
Noximilien 34:754915ce9de5 231
Noximilien 34:754915ce9de5 232 void Game::collideBossBlastsAndPlayer() {
Noximilien 34:754915ce9de5 233 for (int i = 0; i < boss.max_boss_blasts; ++i) {
Noximilien 34:754915ce9de5 234 GameObject& blast = boss.boss_blasts[i];
Noximilien 34:754915ce9de5 235 if (blast.active) {
Noximilien 37:6a2bf4488022 236 bool collision = circleCollideTwoObjects(
Noximilien 34:754915ce9de5 237 player.pos, player.player_bounds,
Noximilien 34:754915ce9de5 238 blast.pos, boss.boss_blast_bounds
Noximilien 34:754915ce9de5 239 );
Noximilien 37:6a2bf4488022 240 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 39:ca77a6d574e6 241 DG_PRINTF("blast 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 242 if (collision) {
Noximilien 34:754915ce9de5 243 if (!GameGlobals::is_shield_on){
Noximilien 34:754915ce9de5 244
Noximilien 34:754915ce9de5 245 gamepad.tone(423,0.4);
Noximilien 34:754915ce9de5 246 GameGlobals::player_lifes -= 1;
Noximilien 34:754915ce9de5 247 blast.active = false;
Noximilien 37:6a2bf4488022 248 DG_PRINTF("collision happened;\n");
Noximilien 37:6a2bf4488022 249 DG_PRINTF("lost a life from blast. left: %i \n", GameGlobals::player_lifes);
Noximilien 34:754915ce9de5 250 }else{
Noximilien 34:754915ce9de5 251 blast.active = false;
Noximilien 34:754915ce9de5 252 gamepad.tone(700,0.6);
Noximilien 34:754915ce9de5 253 }
Noximilien 23:240bc00ef25b 254 }
Noximilien 23:240bc00ef25b 255 }
Noximilien 23:240bc00ef25b 256 }
Noximilien 13:5c3dc6e827c2 257 }
Noximilien 13:5c3dc6e827c2 258
Noximilien 30:d454d0cb72bc 259 /**
Noximilien 26:676874c42883 260 * This function resets all the values to their intial states when the game is
Noximilien 26:676874c42883 261 * first began when the player dies and wants to restart the game.
Noximilien 23:240bc00ef25b 262 * It does not reset the values when the game is paused.
Noximilien 23:240bc00ef25b 263 */
Noximilien 21:0eb394495b8a 264 void Game::startNewGame() {
Noximilien 34:754915ce9de5 265 is_boss_active = false;
Noximilien 39:ca77a6d574e6 266 game_state = GameState_gameplay;
Noximilien 33:c623c6d5ed16 267 player.pos.x = 0; //player was defined in player.h
Noximilien 33:c623c6d5ed16 268 player.pos.y = 24;
Noximilien 31:becb8f6bf7b7 269 stars.stars_delay = 0;
Noximilien 26:676874c42883 270 enemy_ship_delay_max = 40;
Noximilien 26:676874c42883 271 enemy_ship_delay_counter = enemy_ship_delay_max;
Noximilien 31:becb8f6bf7b7 272 GameGlobals::is_shield_on = false;
Noximilien 31:becb8f6bf7b7 273 GameGlobals::game_score = 0;
Noximilien 31:becb8f6bf7b7 274 GameGlobals::score_count_for_difficulty = 0;
Noximilien 31:becb8f6bf7b7 275 GameGlobals::player_lifes = 3;
Noximilien 34:754915ce9de5 276 GameGlobals::score_count_for_boss_mode = 0;
Noximilien 31:becb8f6bf7b7 277 hud.resetRedLed();
Noximilien 34:754915ce9de5 278 enemies.enemy_blast_speed = 3;
Noximilien 34:754915ce9de5 279 enemy.enemy_speed = 1;
Noximilien 38:ef3968546d36 280 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 34:754915ce9de5 281 for (int i = 0; i < enemies.max_enemies; ++i) {
Noximilien 21:0eb394495b8a 282 enemies.enemies[i].active = false;
Noximilien 13:5c3dc6e827c2 283 }
Noximilien 33:c623c6d5ed16 284 for (int i = 0; i < player.max_player_blasts; ++i) {
Noximilien 33:c623c6d5ed16 285 player.blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 286 }
Noximilien 34:754915ce9de5 287 for (int i = 0; i < enemies.max_enemy_blasts; ++i) {
Noximilien 21:0eb394495b8a 288 enemies.enemy_blasts[i].active = false;
Noximilien 13:5c3dc6e827c2 289 }
Noximilien 34:754915ce9de5 290 for (int i = 0; i < boss.max_boss_blasts; ++i) {
Noximilien 34:754915ce9de5 291 boss.boss_blasts[i].active = false;
Noximilien 34:754915ce9de5 292 }
Noximilien 36:207ec7db8648 293 gamepad.check_event(gamepad.START_PRESSED);
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 37:6a2bf4488022 347 DG_PRINTF("game paused\n");
Noximilien 30:d454d0cb72bc 348 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 38:ef3968546d36 349 gamepad.check_event(gamepad.A_PRESSED);
Noximilien 30:d454d0cb72bc 350 want_to_pause = true;
Noximilien 30:d454d0cb72bc 351 }
Noximilien 30:d454d0cb72bc 352 return want_to_pause;
Noximilien 26:676874c42883 353 }