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:
38:ef3968546d36
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 33:c623c6d5ed16 1 #ifndef GAMEOVERMANAGER_H
Noximilien 33:c623c6d5ed16 2 #define GAMEOVERMANAGER_H
Noximilien 33:c623c6d5ed16 3
Noximilien 34:754915ce9de5 4 /**
Noximilien 34:754915ce9de5 5 * GameOverManager Class
Noximilien 34:754915ce9de5 6 * @brief A class for updating and drawing GameOver state.
Noximilien 34:754915ce9de5 7 * @author Dmitrijs Griskovs
Noximilien 34:754915ce9de5 8 * @date 30/04/2019
Noximilien 34:754915ce9de5 9 */
Noximilien 33:c623c6d5ed16 10 class GameOverManager {
Noximilien 33:c623c6d5ed16 11 public:
Noximilien 34:754915ce9de5 12 /**
Noximilien 34:754915ce9de5 13 * Constructor.
Noximilien 34:754915ce9de5 14 * @brief It init the GameOver with reseting
Noximilien 34:754915ce9de5 15 * the statrting sequence of the gameOver state.
Noximilien 34:754915ce9de5 16 */
Noximilien 33:c623c6d5ed16 17 GameOverManager() { reset(); }
Noximilien 33:c623c6d5ed16 18
Noximilien 34:754915ce9de5 19 /**
Noximilien 34:754915ce9de5 20 * @brief Resets the gameOver to the animiation to appear again
Noximilien 34:754915ce9de5 21 * @returns bool started, when GameOver begins.
Noximilien 34:754915ce9de5 22 */
Noximilien 33:c623c6d5ed16 23 void reset() { started = false; }
Noximilien 34:754915ce9de5 24 /**
Noximilien 34:754915ce9de5 25 * @brief Updates and draws the game over animation.
Noximilien 34:754915ce9de5 26 * @details It draws "GameOver" sprite from the leftside of the screen to the center
Noximilien 34:754915ce9de5 27 * and "youDied" sprite from the right side to the center.
Noximilien 34:754915ce9de5 28 */
Noximilien 33:c623c6d5ed16 29 void updateAndDraw() {
Noximilien 35:172db1608332 30 if (!started) { startAnimation();}
Noximilien 33:c623c6d5ed16 31 if (animation_counter < animation_length) {
Noximilien 33:c623c6d5ed16 32 if (gamepad.check_event(gamepad.START_PRESSED)) {
Noximilien 33:c623c6d5ed16 33 gameOverLogo.pos.x = game_area_x - 29 + 42;
Noximilien 33:c623c6d5ed16 34 youDied.pos.x = game_area_width - 42;
Noximilien 34:754915ce9de5 35 animation_counter = animation_length;
Noximilien 33:c623c6d5ed16 36 } else {
Noximilien 33:c623c6d5ed16 37 animation_counter++;
Noximilien 33:c623c6d5ed16 38 gameOverLogo.pos.x += 1;
Noximilien 33:c623c6d5ed16 39 youDied.pos.x -= 1;
Noximilien 33:c623c6d5ed16 40 }
Noximilien 33:c623c6d5ed16 41 }
Noximilien 33:c623c6d5ed16 42 drawSprite(gameOverLogo.pos, game_over_sprite);
Noximilien 33:c623c6d5ed16 43 drawSprite(youDied.pos, you_died_sprite);
Noximilien 35:172db1608332 44 gameOverPostAnimation();
Noximilien 33:c623c6d5ed16 45 musicGameOver();
Noximilien 33:c623c6d5ed16 46 ledsGameOver();
Noximilien 33:c623c6d5ed16 47 }
Noximilien 33:c623c6d5ed16 48
Noximilien 34:754915ce9de5 49 /**
Noximilien 34:754915ce9de5 50 * @brief Checks for whether the animation of GameOver has stoped drawing or not
Noximilien 34:754915ce9de5 51 * @details It check the value of the counter against the total length of the
Noximilien 34:754915ce9de5 52 * animation play. When the counter equals to the total length, it indicates that
Noximilien 34:754915ce9de5 53 * the animation has stopped
Noximilien 34:754915ce9de5 54 */
Noximilien 33:c623c6d5ed16 55 bool isPlayingAnimation() {
Noximilien 33:c623c6d5ed16 56 return animation_counter < animation_length;
Noximilien 33:c623c6d5ed16 57 };
Noximilien 33:c623c6d5ed16 58
Noximilien 33:c623c6d5ed16 59 private:
Noximilien 33:c623c6d5ed16 60 void startAnimation() {
Noximilien 33:c623c6d5ed16 61 started = true;
Noximilien 33:c623c6d5ed16 62 gameOverLogo.pos.x = game_area_x - 29; // 0 - the sprite length
Noximilien 33:c623c6d5ed16 63 gameOverLogo.pos.y = game_area_y;
Noximilien 33:c623c6d5ed16 64 youDied.pos.x = game_area_width;
Noximilien 33:c623c6d5ed16 65 youDied.pos.y = game_area_y;
Noximilien 33:c623c6d5ed16 66 animation_counter = 0;
Noximilien 33:c623c6d5ed16 67 led_state = false;
Noximilien 33:c623c6d5ed16 68 low_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 69 high_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 70 }
Noximilien 33:c623c6d5ed16 71
Noximilien 33:c623c6d5ed16 72 void ledsGameOver(){
Noximilien 33:c623c6d5ed16 73 gamepad.led(1,(float)led_state);
Noximilien 33:c623c6d5ed16 74 gamepad.led(2,(float)!led_state);
Noximilien 33:c623c6d5ed16 75 gamepad.led(3,(float)led_state);
Noximilien 33:c623c6d5ed16 76 gamepad.led(4,(float)!led_state);
Noximilien 33:c623c6d5ed16 77 gamepad.led(5,(float)led_state);
Noximilien 33:c623c6d5ed16 78 gamepad.led(6,(float)!led_state);
Noximilien 33:c623c6d5ed16 79 led_state = !led_state;
Noximilien 33:c623c6d5ed16 80 }
Noximilien 33:c623c6d5ed16 81
Noximilien 33:c623c6d5ed16 82 void musicGameOver(){
Noximilien 33:c623c6d5ed16 83 lowFrequencyPartMusic();
Noximilien 33:c623c6d5ed16 84 highFrequencyPartMusic();
Noximilien 33:c623c6d5ed16 85 high_frequency_music_counter++;
Noximilien 33:c623c6d5ed16 86 low_frequency_music_counter++;//comment out this for epic game over beat.
Noximilien 37:6a2bf4488022 87 DG_PRINTF("Low frequency counter value:: %i\n", low_frequency_music_counter);
Noximilien 37:6a2bf4488022 88 DG_PRINTF("high frequency counter value:: %i\n", high_frequency_music_counter);
Noximilien 33:c623c6d5ed16 89 }
Noximilien 33:c623c6d5ed16 90
Noximilien 33:c623c6d5ed16 91 void lowFrequencyPartMusic(){
Noximilien 33:c623c6d5ed16 92 // Low frequency
Noximilien 33:c623c6d5ed16 93 if (low_frequency_music_counter == 0){ gamepad.tone(60,3);}
Noximilien 33:c623c6d5ed16 94 else if (low_frequency_music_counter == 3){gamepad.tone(90,3);}
Noximilien 33:c623c6d5ed16 95 else if (low_frequency_music_counter == 6){gamepad.tone(60,3);}
Noximilien 33:c623c6d5ed16 96 else if (low_frequency_music_counter == 9){gamepad.tone(80,3);}
Noximilien 33:c623c6d5ed16 97 else if (low_frequency_music_counter == 12){gamepad.tone(70,2);}
Noximilien 33:c623c6d5ed16 98 else if (low_frequency_music_counter == 14){gamepad.tone(60,2);}
Noximilien 33:c623c6d5ed16 99 else if (low_frequency_music_counter == 16){gamepad.tone(70,3);}
Noximilien 33:c623c6d5ed16 100 else if (low_frequency_music_counter == 19){gamepad.tone(50,1);}
Noximilien 33:c623c6d5ed16 101 else if (low_frequency_music_counter == 20){gamepad.tone(40,3);}
Noximilien 33:c623c6d5ed16 102 else if (low_frequency_music_counter== 23){
Noximilien 33:c623c6d5ed16 103 gamepad.tone(60,2);
Noximilien 33:c623c6d5ed16 104 low_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 105 }
Noximilien 33:c623c6d5ed16 106 }
Noximilien 33:c623c6d5ed16 107
Noximilien 33:c623c6d5ed16 108 void highFrequencyPartMusic(){
Noximilien 33:c623c6d5ed16 109 // High frequency
Noximilien 33:c623c6d5ed16 110 if ( high_frequency_music_counter == 0){ gamepad.tone(300,0.1);}
Noximilien 33:c623c6d5ed16 111 else if (high_frequency_music_counter == 3){gamepad.tone(250,0.1);}
Noximilien 33:c623c6d5ed16 112 else if (high_frequency_music_counter == 6){gamepad.tone(230,0.2);}
Noximilien 33:c623c6d5ed16 113 else if (high_frequency_music_counter == 9){gamepad.tone(250,0.1);}
Noximilien 33:c623c6d5ed16 114 else if ( high_frequency_music_counter == 12){gamepad.tone(250,0.2);}
Noximilien 33:c623c6d5ed16 115 else if ( high_frequency_music_counter == 14){gamepad.tone(220,0.1);}
Noximilien 33:c623c6d5ed16 116 else if ( high_frequency_music_counter == 16){gamepad.tone(210,0.3);}
Noximilien 33:c623c6d5ed16 117 else if ( high_frequency_music_counter == 19){gamepad.tone(200,1);}
Noximilien 33:c623c6d5ed16 118 else if ( high_frequency_music_counter == 21){gamepad.tone(250,1);}
Noximilien 33:c623c6d5ed16 119 else if ( high_frequency_music_counter == 22){
Noximilien 33:c623c6d5ed16 120 gamepad.tone(200,1);
Noximilien 33:c623c6d5ed16 121 high_frequency_music_counter = 0;
Noximilien 33:c623c6d5ed16 122 }
Noximilien 33:c623c6d5ed16 123 }
Noximilien 34:754915ce9de5 124 void updateHighScore(){
Noximilien 34:754915ce9de5 125 if (GameGlobals::high_score < GameGlobals::game_score){
Noximilien 34:754915ce9de5 126 GameGlobals::high_score = GameGlobals::game_score;
Noximilien 34:754915ce9de5 127 }
Noximilien 34:754915ce9de5 128 }
Noximilien 33:c623c6d5ed16 129
Noximilien 35:172db1608332 130 void gameOverPostAnimation(){
Noximilien 35:172db1608332 131 char buffer[32];
Noximilien 35:172db1608332 132 sprintf(buffer,"Score: %i", GameGlobals::game_score);
Noximilien 35:172db1608332 133 updateHighScore();
Noximilien 35:172db1608332 134 lcd.printString(buffer,0,3);
Noximilien 35:172db1608332 135 lcd.printString("Press Y",0,4);
Noximilien 35:172db1608332 136 lcd.printString("to restart",0,5);
Noximilien 38:ef3968546d36 137 gamepad.check_event(gamepad.START_PRESSED);
Noximilien 35:172db1608332 138 }
Noximilien 35:172db1608332 139
Noximilien 33:c623c6d5ed16 140 bool started;
Noximilien 33:c623c6d5ed16 141 static const int animation_length = 42;
Noximilien 33:c623c6d5ed16 142 int animation_counter;
Noximilien 33:c623c6d5ed16 143 GameObject gameOverLogo;
Noximilien 33:c623c6d5ed16 144 GameObject youDied;
Noximilien 33:c623c6d5ed16 145 bool led_state;
Noximilien 33:c623c6d5ed16 146 int low_frequency_music_counter;
Noximilien 33:c623c6d5ed16 147 int high_frequency_music_counter;
Noximilien 33:c623c6d5ed16 148 };
Noximilien 33:c623c6d5ed16 149
Noximilien 33:c623c6d5ed16 150 #endif