ELEC2645 (2016/17) / Mbed 2 deprecated 2645_Project_el15as

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }