Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Animation/Animation.cpp@10:95842278bd66, 2017-05-03 (annotated)
- Committer:
- el15as
- Date:
- Wed May 03 16:16:33 2017 +0000
- Revision:
- 10:95842278bd66
- Parent:
- 8:c3cf8d1057bb
Animation class cleaned up and documented
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el15as | 6:33fd1797beb4 | 1 | #include "Animation.h" |
| el15as | 6:33fd1797beb4 | 2 | |
| el15as | 10:95842278bd66 | 3 | //////////// constructor //////////// |
| el15as | 6:33fd1797beb4 | 4 | Animation::Animation() |
| el15as | 6:33fd1797beb4 | 5 | { |
| el15as | 6:33fd1797beb4 | 6 | |
| el15as | 6:33fd1797beb4 | 7 | } |
| el15as | 4:1f7f32f3e017 | 8 | |
| el15as | 10:95842278bd66 | 9 | //////////// destructor //////////// |
| el15as | 6:33fd1797beb4 | 10 | Animation::~Animation() |
| el15as | 6:33fd1797beb4 | 11 | { |
| el15as | 4:1f7f32f3e017 | 12 | |
| el15as | 6:33fd1797beb4 | 13 | } |
| el15as | 4:1f7f32f3e017 | 14 | |
| el15as | 10:95842278bd66 | 15 | /////////////////// public methods /////////////////// |
| el15as | 10:95842278bd66 | 16 | |
| el15as | 6:33fd1797beb4 | 17 | void Animation::spawn(N5110 &lcd, intVector2D starting_position) |
| el15as | 5:158e2951654b | 18 | { |
| el15as | 10:95842278bd66 | 19 | // This animates the tube at the ceiling opening and the player falling out |
| el15as | 10:95842278bd66 | 20 | // of it, after which the tube closes. |
| el15as | 10:95842278bd66 | 21 | // The first animation cycle shows the player falling out of the tube |
| el15as | 10:95842278bd66 | 22 | // however we want the player to have control right after he appears, |
| el15as | 10:95842278bd66 | 23 | // rather than waiting for the tube opening to close. Hence the rest |
| el15as | 10:95842278bd66 | 24 | // of the animation will happen one frame at a time as the game goes on. |
| el15as | 6:33fd1797beb4 | 25 | if (spawnCycle == 0) |
| el15as | 6:33fd1797beb4 | 26 | { |
| el15as | 6:33fd1797beb4 | 27 | lcd.setPixel(starting_position.x + 1, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 28 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 29 | wait(0.1); |
| el15as | 4:1f7f32f3e017 | 30 | |
| el15as | 6:33fd1797beb4 | 31 | lcd.setPixel(starting_position.x, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 32 | lcd.setPixel(starting_position.x + 2, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 33 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 34 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 35 | |
| el15as | 6:33fd1797beb4 | 36 | lcd.setPixel(starting_position.x - 1, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 37 | lcd.setPixel(starting_position.x + 3, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 38 | lcd.setPixel(starting_position.x, starting_position.y - 1); |
| el15as | 6:33fd1797beb4 | 39 | lcd.setPixel(starting_position.x + 2, starting_position.y - 1); |
| el15as | 6:33fd1797beb4 | 40 | lcd.setPixel(starting_position.x + 1, starting_position.y - 1); |
| el15as | 6:33fd1797beb4 | 41 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 42 | wait(0.1); |
| el15as | 4:1f7f32f3e017 | 43 | |
| el15as | 6:33fd1797beb4 | 44 | lcd.setPixel(starting_position.x + 1, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 45 | lcd.setPixel(starting_position.x, starting_position.y); |
| el15as | 6:33fd1797beb4 | 46 | lcd.setPixel(starting_position.x + 2, starting_position.y); |
| el15as | 6:33fd1797beb4 | 47 | lcd.setPixel(starting_position.x + 1, starting_position.y); |
| el15as | 6:33fd1797beb4 | 48 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 49 | wait(0.1); |
| el15as | 5:158e2951654b | 50 | |
| el15as | 6:33fd1797beb4 | 51 | lcd.setPixel(starting_position.x + 1, starting_position.y - 1); |
| el15as | 6:33fd1797beb4 | 52 | lcd.setPixel(starting_position.x + 1, starting_position.y, false); |
| el15as | 6:33fd1797beb4 | 53 | lcd.setPixel(starting_position.x, starting_position.y + 1); |
| el15as | 6:33fd1797beb4 | 54 | lcd.setPixel(starting_position.x + 2, starting_position.y + 1); |
| el15as | 6:33fd1797beb4 | 55 | lcd.setPixel(starting_position.x + 1, starting_position.y + 1); |
| el15as | 6:33fd1797beb4 | 56 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 57 | wait(0.1); |
| el15as | 5:158e2951654b | 58 | |
| el15as | 6:33fd1797beb4 | 59 | spawnCycle++; |
| el15as | 6:33fd1797beb4 | 60 | } |
| el15as | 6:33fd1797beb4 | 61 | else if (spawnCycle == 1) |
| el15as | 6:33fd1797beb4 | 62 | { |
| el15as | 6:33fd1797beb4 | 63 | lcd.setPixel(starting_position.x, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 64 | lcd.setPixel(starting_position.x + 1, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 65 | lcd.setPixel(starting_position.x + 2, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 66 | spawnCycle++; |
| el15as | 6:33fd1797beb4 | 67 | } |
| el15as | 6:33fd1797beb4 | 68 | else if (spawnCycle == 2) |
| el15as | 6:33fd1797beb4 | 69 | { |
| el15as | 6:33fd1797beb4 | 70 | lcd.setPixel(starting_position.x + 1, starting_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 71 | spawnCycle++; |
| el15as | 4:1f7f32f3e017 | 72 | } |
| el15as | 4:1f7f32f3e017 | 73 | } |
| el15as | 4:1f7f32f3e017 | 74 | |
| el15as | 6:33fd1797beb4 | 75 | void Animation::death(N5110 &lcd, intVector2D position, int frame) |
| el15as | 6:33fd1797beb4 | 76 | { |
| el15as | 10:95842278bd66 | 77 | // Animates the explosion of the player due to hitting the spikes |
| el15as | 10:95842278bd66 | 78 | // The animation frame number is fed into the function |
| el15as | 10:95842278bd66 | 79 | // and the appropriate pixels are set or cleared. |
| el15as | 6:33fd1797beb4 | 80 | if (frame == 0) |
| el15as | 6:33fd1797beb4 | 81 | { |
| el15as | 6:33fd1797beb4 | 82 | lcd.setPixel(position.x + 1, position.y, false); |
| el15as | 6:33fd1797beb4 | 83 | lcd.setPixel(position.x, position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 84 | lcd.setPixel(position.x + 1, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 85 | lcd.setPixel(position.x + 2, position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 86 | lcd.setPixel(position.x + 1, position.y - 1); |
| el15as | 6:33fd1797beb4 | 87 | lcd.setPixel(position.x - 1, position.y + 1); |
| el15as | 6:33fd1797beb4 | 88 | lcd.setPixel(position.x + 1, position.y + 3); |
| el15as | 6:33fd1797beb4 | 89 | lcd.setPixel(position.x + 3, position.y + 1); |
| el15as | 6:33fd1797beb4 | 90 | } |
| el15as | 6:33fd1797beb4 | 91 | else if (frame == 1) |
| el15as | 6:33fd1797beb4 | 92 | { |
| el15as | 6:33fd1797beb4 | 93 | lcd.setPixel(position.x + 1, position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 94 | lcd.setPixel(position.x - 1, position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 95 | lcd.setPixel(position.x + 1, position.y + 3, false); |
| el15as | 6:33fd1797beb4 | 96 | lcd.setPixel(position.x + 3, position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 97 | lcd.setPixel(position.x, position.y, false); |
| el15as | 6:33fd1797beb4 | 98 | lcd.setPixel(position.x + 2, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 99 | lcd.setPixel(position.x + 2, position.y, false); |
| el15as | 6:33fd1797beb4 | 100 | lcd.setPixel(position.x, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 101 | lcd.setPixel(position.x, position.y - 1); |
| el15as | 6:33fd1797beb4 | 102 | lcd.setPixel(position.x - 1, position.y); |
| el15as | 6:33fd1797beb4 | 103 | lcd.setPixel(position.x + 3, position.y); |
| el15as | 6:33fd1797beb4 | 104 | lcd.setPixel(position.x + 2, position.y - 1); |
| el15as | 6:33fd1797beb4 | 105 | lcd.setPixel(position.x - 1, position.y + 2); |
| el15as | 6:33fd1797beb4 | 106 | lcd.setPixel(position.x, position.y + 3); |
| el15as | 6:33fd1797beb4 | 107 | lcd.setPixel(position.x + 3, position.y + 2); |
| el15as | 6:33fd1797beb4 | 108 | lcd.setPixel(position.x + 2, position.y + 3); |
| el15as | 6:33fd1797beb4 | 109 | } |
| el15as | 6:33fd1797beb4 | 110 | else if (frame == 2) |
| el15as | 6:33fd1797beb4 | 111 | { |
| el15as | 6:33fd1797beb4 | 112 | lcd.setPixel(position.x, position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 113 | lcd.setPixel(position.x - 1, position.y, false); |
| el15as | 6:33fd1797beb4 | 114 | lcd.setPixel(position.x + 3, position.y, false); |
| el15as | 6:33fd1797beb4 | 115 | lcd.setPixel(position.x + 2, position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 116 | lcd.setPixel(position.x - 1, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 117 | lcd.setPixel(position.x, position.y + 3, false); |
| el15as | 6:33fd1797beb4 | 118 | lcd.setPixel(position.x + 3, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 119 | lcd.setPixel(position.x + 2, position.y + 3, false); |
| el15as | 6:33fd1797beb4 | 120 | lcd.setPixel(position.x, position.y - 2); |
| el15as | 6:33fd1797beb4 | 121 | lcd.setPixel(position.x - 2, position.y); |
| el15as | 6:33fd1797beb4 | 122 | lcd.setPixel(position.x + 4, position.y); |
| el15as | 6:33fd1797beb4 | 123 | lcd.setPixel(position.x + 2, position.y - 2); |
| el15as | 6:33fd1797beb4 | 124 | lcd.setPixel(position.x - 2, position.y + 2); |
| el15as | 6:33fd1797beb4 | 125 | lcd.setPixel(position.x, position.y + 4); |
| el15as | 6:33fd1797beb4 | 126 | lcd.setPixel(position.x + 4, position.y + 2); |
| el15as | 6:33fd1797beb4 | 127 | lcd.setPixel(position.x + 2, position.y + 4); |
| el15as | 6:33fd1797beb4 | 128 | } |
| el15as | 6:33fd1797beb4 | 129 | else if (frame == 3) |
| el15as | 6:33fd1797beb4 | 130 | { |
| el15as | 6:33fd1797beb4 | 131 | lcd.setPixel(position.x, position.y - 2, false); |
| el15as | 6:33fd1797beb4 | 132 | lcd.setPixel(position.x - 2, position.y, false); |
| el15as | 6:33fd1797beb4 | 133 | lcd.setPixel(position.x + 4, position.y, false); |
| el15as | 6:33fd1797beb4 | 134 | lcd.setPixel(position.x + 2, position.y - 2, false); |
| el15as | 6:33fd1797beb4 | 135 | lcd.setPixel(position.x - 2, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 136 | lcd.setPixel(position.x, position.y + 4, false); |
| el15as | 6:33fd1797beb4 | 137 | lcd.setPixel(position.x + 4, position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 138 | lcd.setPixel(position.x + 2, position.y + 4, false); |
| el15as | 6:33fd1797beb4 | 139 | } |
| el15as | 6:33fd1797beb4 | 140 | } |
| el15as | 4:1f7f32f3e017 | 141 | |
| el15as | 7:b54323241435 | 142 | void Animation::finish(N5110 &lcd, intVector2D finish_position, Gamepad &pad, bool soundOn) |
| el15as | 6:33fd1797beb4 | 143 | { |
| el15as | 10:95842278bd66 | 144 | // Animates the player going into the level exit tube. First 4 frames |
| el15as | 10:95842278bd66 | 145 | // also trigger a tone if the sound is turned on. |
| el15as | 6:33fd1797beb4 | 146 | lcd.setPixel(finish_position.x + 3, finish_position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 147 | lcd.refresh(); |
| el15as | 7:b54323241435 | 148 | if (soundOn) pad.tone(523.25f,0.1f); |
| el15as | 6:33fd1797beb4 | 149 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 150 | |
| el15as | 6:33fd1797beb4 | 151 | lcd.setPixel(finish_position.x + 3, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 152 | lcd.refresh(); |
| el15as | 7:b54323241435 | 153 | if (soundOn) pad.tone(659.25f,0.1f); |
| el15as | 6:33fd1797beb4 | 154 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 155 | |
| el15as | 6:33fd1797beb4 | 156 | lcd.setPixel(finish_position.x + 3, finish_position.y, false); |
| el15as | 6:33fd1797beb4 | 157 | lcd.refresh(); |
| el15as | 7:b54323241435 | 158 | if (soundOn) pad.tone(784.0f,0.1f); |
| el15as | 6:33fd1797beb4 | 159 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 160 | |
| el15as | 6:33fd1797beb4 | 161 | lcd.setPixel(finish_position.x + 3, finish_position.y - 1, false); |
| el15as | 6:33fd1797beb4 | 162 | lcd.setPixel(finish_position.x + 3, finish_position.y + 2); |
| el15as | 6:33fd1797beb4 | 163 | lcd.setPixel(finish_position.x + 3, finish_position.y + 1); |
| el15as | 6:33fd1797beb4 | 164 | lcd.setPixel(finish_position.x + 3, finish_position.y); |
| el15as | 6:33fd1797beb4 | 165 | lcd.setPixel(finish_position.x + 2, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 166 | lcd.setPixel(finish_position.x + 1, finish_position.y + 1); |
| el15as | 6:33fd1797beb4 | 167 | lcd.setPixel(finish_position.x, finish_position.y, false); |
| el15as | 6:33fd1797beb4 | 168 | lcd.setPixel(finish_position.x, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 169 | lcd.setPixel(finish_position.x, finish_position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 170 | lcd.refresh(); |
| el15as | 7:b54323241435 | 171 | if (soundOn) pad.tone(1046.5f,0.1f); |
| el15as | 6:33fd1797beb4 | 172 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 173 | |
| el15as | 6:33fd1797beb4 | 174 | lcd.setPixel(finish_position.x + 1, finish_position.y, false); |
| el15as | 6:33fd1797beb4 | 175 | lcd.setPixel(finish_position.x + 1, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 176 | lcd.setPixel(finish_position.x + 1, finish_position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 177 | lcd.setPixel(finish_position.x + 2, finish_position.y + 1); |
| el15as | 6:33fd1797beb4 | 178 | lcd.setPixel(finish_position.x + 3, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 179 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 180 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 181 | |
| el15as | 6:33fd1797beb4 | 182 | lcd.setPixel(finish_position.x + 2, finish_position.y, false); |
| el15as | 6:33fd1797beb4 | 183 | lcd.setPixel(finish_position.x + 2, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 184 | lcd.setPixel(finish_position.x + 2, finish_position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 185 | lcd.setPixel(finish_position.x + 3, finish_position.y + 1); |
| el15as | 6:33fd1797beb4 | 186 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 187 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 188 | |
| el15as | 6:33fd1797beb4 | 189 | lcd.setPixel(finish_position.x + 3, finish_position.y, false); |
| el15as | 6:33fd1797beb4 | 190 | lcd.setPixel(finish_position.x + 3, finish_position.y + 1, false); |
| el15as | 6:33fd1797beb4 | 191 | lcd.setPixel(finish_position.x + 3, finish_position.y + 2, false); |
| el15as | 6:33fd1797beb4 | 192 | lcd.setPixel(finish_position.x + 3, finish_position.y - 1); |
| el15as | 6:33fd1797beb4 | 193 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 194 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 195 | |
| el15as | 6:33fd1797beb4 | 196 | lcd.setPixel(finish_position.x + 3, finish_position.y); |
| el15as | 6:33fd1797beb4 | 197 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 198 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 199 | |
| el15as | 6:33fd1797beb4 | 200 | lcd.setPixel(finish_position.x + 3, finish_position.y + 1); |
| el15as | 6:33fd1797beb4 | 201 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 202 | wait(0.1); |
| el15as | 6:33fd1797beb4 | 203 | |
| el15as | 6:33fd1797beb4 | 204 | lcd.setPixel(finish_position.x + 3, finish_position.y + 2); |
| el15as | 6:33fd1797beb4 | 205 | lcd.refresh(); |
| el15as | 6:33fd1797beb4 | 206 | wait(0.1); |
| el15as | 8:c3cf8d1057bb | 207 | } |