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 21:0eb394495b8a 1 #ifndef STARS_H
Noximilien 21:0eb394495b8a 2 #define STARS_H
Noximilien 21:0eb394495b8a 3
Noximilien 31:becb8f6bf7b7 4 /**
Noximilien 31:becb8f6bf7b7 5 * Stars Class
Noximilien 31:becb8f6bf7b7 6 * @brief Manages, updates and draws the background stars.
Noximilien 29:579e00b7f118 7 * @author Dmitrijs Griskovs
Noximilien 29:579e00b7f118 8 * @date 15/04/2019
Noximilien 29:579e00b7f118 9 */
Noximilien 27:f05f4e738ba9 10 class Stars {
Noximilien 23:240bc00ef25b 11 public:
Noximilien 32:5403bb974294 12 /**
Noximilien 32:5403bb974294 13 * @var static const int max_small_stars variable;
Noximilien 32:5403bb974294 14 * @brief Sets the limit of maximum small stars allowed on the screen.
Noximilien 32:5403bb974294 15 */
Noximilien 31:becb8f6bf7b7 16 static const int max_small_stars = 10;
Noximilien 32:5403bb974294 17 /**
Noximilien 32:5403bb974294 18 * @var static const int max_medium_stars variable;
Noximilien 32:5403bb974294 19 * @brief Sets the limit of maximum medium stars allowed on the screen.
Noximilien 32:5403bb974294 20 */
Noximilien 31:becb8f6bf7b7 21 static const int max_medium_stars = 5;
Noximilien 31:becb8f6bf7b7 22
Noximilien 23:240bc00ef25b 23 GameObject small_stars[max_small_stars];
Noximilien 23:240bc00ef25b 24 GameObject medium_stars[max_medium_stars];
Noximilien 23:240bc00ef25b 25
Noximilien 31:becb8f6bf7b7 26 /**
Noximilien 31:becb8f6bf7b7 27 * @brief draws small stars on the screen.
Noximilien 31:becb8f6bf7b7 28 * @details when a small star is active, this function updates the position and
Noximilien 31:becb8f6bf7b7 29 * draws it on the screen. Also, When the star leaves the screen limits it
Noximilien 31:becb8f6bf7b7 30 * deactivates the star for a new star to fly.
Noximilien 31:becb8f6bf7b7 31 */
Noximilien 23:240bc00ef25b 32 void updateAndDrawSmallStars(){
Noximilien 23:240bc00ef25b 33 for (int i = 0; i < max_small_stars; ++i) {
Noximilien 23:240bc00ef25b 34 if (small_stars[i].active) {
Noximilien 23:240bc00ef25b 35 small_stars[i].pos.x -= small_star_speed;
Noximilien 23:240bc00ef25b 36 if (small_stars[i].pos.x <= 0){
Noximilien 23:240bc00ef25b 37 small_stars[i].active = false;
Noximilien 29:579e00b7f118 38 }
Noximilien 32:5403bb974294 39 drawSpriteOnTop(small_stars[i].pos, small_star_sprite);
Noximilien 21:0eb394495b8a 40 }
Noximilien 29:579e00b7f118 41 }
Noximilien 21:0eb394495b8a 42 }
Noximilien 36:207ec7db8648 43
Noximilien 31:becb8f6bf7b7 44 /**
Noximilien 31:becb8f6bf7b7 45 * @brief draws medium stars on the screen.
Noximilien 31:becb8f6bf7b7 46 * @details when a medium star is active, this function updates the position and
Noximilien 31:becb8f6bf7b7 47 * draws it on the screen. Also, When the star leaves the screen limits it
Noximilien 31:becb8f6bf7b7 48 * deactivates the star for a new star to fly.
Noximilien 31:becb8f6bf7b7 49 */
Noximilien 23:240bc00ef25b 50 void updateAndDrawMediumStars(){
Noximilien 23:240bc00ef25b 51 for (int i = 0; i < max_medium_stars; ++i) {
Noximilien 23:240bc00ef25b 52 if (medium_stars[i].active) {
Noximilien 23:240bc00ef25b 53 medium_stars[i].pos.x -= medium_star_speed;
Noximilien 23:240bc00ef25b 54 if (medium_stars[i].pos.x <= -2){
Noximilien 23:240bc00ef25b 55 medium_stars[i].active = false;
Noximilien 23:240bc00ef25b 56 }
Noximilien 32:5403bb974294 57 drawSpriteOnTop(medium_stars[i].pos, medium_star_sprite);
Noximilien 23:240bc00ef25b 58 }
Noximilien 23:240bc00ef25b 59 }
Noximilien 23:240bc00ef25b 60 }
Noximilien 28:35af3843de8f 61
Noximilien 31:becb8f6bf7b7 62 /** @brief A separate function for delaying the stars spawn time.*/
Noximilien 28:35af3843de8f 63 void starsSpawnDelay(){
Noximilien 28:35af3843de8f 64 if (stars_delay == stars_delay_max){
Noximilien 31:becb8f6bf7b7 65 //This is dealy between stars generation.
Noximilien 31:becb8f6bf7b7 66 newSmallStarFlies();
Noximilien 31:becb8f6bf7b7 67 newMediumStarFlies();
Noximilien 31:becb8f6bf7b7 68 stars_delay = 0;
Noximilien 28:35af3843de8f 69 }
Noximilien 31:becb8f6bf7b7 70 else {
Noximilien 31:becb8f6bf7b7 71 stars_delay += 1;
Noximilien 31:becb8f6bf7b7 72 }
Noximilien 28:35af3843de8f 73 }
Noximilien 35:172db1608332 74 /**
Noximilien 35:172db1608332 75 * @var int stars delay;
Noximilien 35:172db1608332 76 * @brief The value is incremented every time until it reaches stars_delay_max
Noximilien 35:172db1608332 77 * value, which triggers the stars spawn and then is reseted to zero. .
Noximilien 35:172db1608332 78 */
Noximilien 36:207ec7db8648 79 int stars_delay;
Noximilien 36:207ec7db8648 80
Noximilien 36:207ec7db8648 81
Noximilien 36:207ec7db8648 82
Noximilien 35:172db1608332 83 private:
Noximilien 35:172db1608332 84 /**
Noximilien 35:172db1608332 85 * @var static const int small_star_speed variable;
Noximilien 35:172db1608332 86 * @brief Sets the speed of the small stars.
Noximilien 35:172db1608332 87 */
Noximilien 39:ca77a6d574e6 88 static const int small_star_speed = 2;
Noximilien 35:172db1608332 89 /**
Noximilien 35:172db1608332 90 * @var static const int medium_star_speed variable;
Noximilien 35:172db1608332 91 * @brief Sets the speed of the medium stars.
Noximilien 35:172db1608332 92 */
Noximilien 39:ca77a6d574e6 93 static const int medium_star_speed = 4;
Noximilien 35:172db1608332 94 /**
Noximilien 35:172db1608332 95 * @var static const int stars_delay_max variable;
Noximilien 35:172db1608332 96 * @brief Sets the limit of the stars delay spawn.
Noximilien 35:172db1608332 97 */
Noximilien 36:207ec7db8648 98 static const int stars_delay_max = 5;
Noximilien 36:207ec7db8648 99
Noximilien 36:207ec7db8648 100 /**
Noximilien 36:207ec7db8648 101 * @brief Makes a small star active and gives it the start positions.
Noximilien 36:207ec7db8648 102 * @details Searches through the small stars array and if a star is not active,
Noximilien 36:207ec7db8648 103 * it becomes active and is given the position of x (which is 0) and.
Noximilien 36:207ec7db8648 104 * and random position of y.
Noximilien 36:207ec7db8648 105 */
Noximilien 36:207ec7db8648 106 void newSmallStarFlies() {
Noximilien 36:207ec7db8648 107 // Search the array of stars if inactive we can use it. - the same as with blasts
Noximilien 36:207ec7db8648 108 int found = -1;
Noximilien 36:207ec7db8648 109 for (int i = 0; i < max_small_stars; ++i) {
Noximilien 36:207ec7db8648 110 if (!small_stars[i].active) {
Noximilien 36:207ec7db8648 111 found = i;
Noximilien 36:207ec7db8648 112 break;
Noximilien 36:207ec7db8648 113 }
Noximilien 36:207ec7db8648 114 }
Noximilien 36:207ec7db8648 115
Noximilien 36:207ec7db8648 116 if (found != -1) {
Noximilien 36:207ec7db8648 117 small_stars[found].active = true;
Noximilien 36:207ec7db8648 118 small_stars[found].pos.x = screen_width;
Noximilien 36:207ec7db8648 119 small_stars[found].pos.y = rand() % screen_height + game_area_y;
Noximilien 36:207ec7db8648 120 }
Noximilien 36:207ec7db8648 121 }
Noximilien 36:207ec7db8648 122
Noximilien 36:207ec7db8648 123 /**
Noximilien 36:207ec7db8648 124 * @brief Makes a medium star active and gives it the start positions.
Noximilien 36:207ec7db8648 125 * @details Searches through the medium stars array and if a star is not active,
Noximilien 36:207ec7db8648 126 * it becomes active and is given the position of x (which is 0) and.
Noximilien 36:207ec7db8648 127 * and random position of y.
Noximilien 36:207ec7db8648 128 */
Noximilien 36:207ec7db8648 129 void newMediumStarFlies() {
Noximilien 36:207ec7db8648 130 // Search the array of stars if inactive we can use it. - the same as with blasts
Noximilien 36:207ec7db8648 131 int found = -1;
Noximilien 36:207ec7db8648 132 for (int i = 0; i < max_medium_stars; ++i) {
Noximilien 36:207ec7db8648 133 if (!medium_stars[i].active) {
Noximilien 36:207ec7db8648 134 found = i;
Noximilien 36:207ec7db8648 135 break;
Noximilien 36:207ec7db8648 136 }
Noximilien 36:207ec7db8648 137 }
Noximilien 36:207ec7db8648 138 if (found != -1) {
Noximilien 36:207ec7db8648 139 medium_stars[found].active = true;
Noximilien 36:207ec7db8648 140 medium_stars[found].pos.x = screen_width;
Noximilien 36:207ec7db8648 141 medium_stars[found].pos.y = rand() % screen_height + game_area_y;
Noximilien 36:207ec7db8648 142 }
Noximilien 36:207ec7db8648 143 }
Noximilien 23:240bc00ef25b 144 };
Noximilien 21:0eb394495b8a 145 #endif