Initial publish
Dependencies: mbed
Fork of el17dg by
game/stars.h@40:e3bbda7444fa, 2019-05-07 (annotated)
- 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?
User | Revision | Line number | New 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 |