My platformer project
Dependencies: Finalproject N5110 mbed
Enemy/Enemy.cpp@0:5dd225e2621d, 2017-05-05 (annotated)
- Committer:
- lion152
- Date:
- Fri May 05 15:00:33 2017 +0000
- Revision:
- 0:5dd225e2621d
Finished in one go
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lion152 | 0:5dd225e2621d | 1 | #include "Enemy.h" |
lion152 | 0:5dd225e2621d | 2 | #include "N5110.h" |
lion152 | 0:5dd225e2621d | 3 | #include "mbed.h" |
lion152 | 0:5dd225e2621d | 4 | #include "math.h" |
lion152 | 0:5dd225e2621d | 5 | #include "Platform.h" |
lion152 | 0:5dd225e2621d | 6 | //Serial pc(USBTX, USBRX); |
lion152 | 0:5dd225e2621d | 7 | |
lion152 | 0:5dd225e2621d | 8 | Enemy::Enemy(int x, int y) |
lion152 | 0:5dd225e2621d | 9 | { |
lion152 | 0:5dd225e2621d | 10 | this->x=x; |
lion152 | 0:5dd225e2621d | 11 | this->y=y; |
lion152 | 0:5dd225e2621d | 12 | width=8; |
lion152 | 0:5dd225e2621d | 13 | height=7; |
lion152 | 0:5dd225e2621d | 14 | force=0.0f; |
lion152 | 0:5dd225e2621d | 15 | floatY=0.0f; |
lion152 | 0:5dd225e2621d | 16 | directionW=true; |
lion152 | 0:5dd225e2621d | 17 | spawned=false; |
lion152 | 0:5dd225e2621d | 18 | } |
lion152 | 0:5dd225e2621d | 19 | |
lion152 | 0:5dd225e2621d | 20 | Enemy::~Enemy() |
lion152 | 0:5dd225e2621d | 21 | { |
lion152 | 0:5dd225e2621d | 22 | |
lion152 | 0:5dd225e2621d | 23 | } |
lion152 | 0:5dd225e2621d | 24 | |
lion152 | 0:5dd225e2621d | 25 | //////////////DRAW - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 26 | /** |
lion152 | 0:5dd225e2621d | 27 | @details Handles enemy drawing on the screen |
lion152 | 0:5dd225e2621d | 28 | */ |
lion152 | 0:5dd225e2621d | 29 | void Enemy::draw(N5110 &lcd, int absoluteCoord, bool white ) |
lion152 | 0:5dd225e2621d | 30 | { |
lion152 | 0:5dd225e2621d | 31 | white = !white; |
lion152 | 0:5dd225e2621d | 32 | //pc.printf("%d\n",x); |
lion152 | 0:5dd225e2621d | 33 | //pc.printf("%d\n",y); |
lion152 | 0:5dd225e2621d | 34 | //1st row |
lion152 | 0:5dd225e2621d | 35 | lcd.setPixel(x-absoluteCoord+2,y-6, white); |
lion152 | 0:5dd225e2621d | 36 | lcd.setPixel(x-absoluteCoord+3,y-6, white); |
lion152 | 0:5dd225e2621d | 37 | lcd.setPixel(x-absoluteCoord+4,y-6, white); |
lion152 | 0:5dd225e2621d | 38 | lcd.setPixel(x-absoluteCoord+5,y-6, white); |
lion152 | 0:5dd225e2621d | 39 | //2nd row |
lion152 | 0:5dd225e2621d | 40 | lcd.setPixel(x-absoluteCoord+1,y-5, white); |
lion152 | 0:5dd225e2621d | 41 | lcd.setPixel(x-absoluteCoord+2,y-5, white); |
lion152 | 0:5dd225e2621d | 42 | lcd.setPixel(x-absoluteCoord+3,y-5, white); |
lion152 | 0:5dd225e2621d | 43 | lcd.setPixel(x-absoluteCoord+4,y-5, white); |
lion152 | 0:5dd225e2621d | 44 | lcd.setPixel(x-absoluteCoord+5,y-5, white); |
lion152 | 0:5dd225e2621d | 45 | lcd.setPixel(x-absoluteCoord+6,y-5, white); |
lion152 | 0:5dd225e2621d | 46 | //3rd row |
lion152 | 0:5dd225e2621d | 47 | lcd.setPixel(x-absoluteCoord,y-4, white); |
lion152 | 0:5dd225e2621d | 48 | lcd.setPixel(x-absoluteCoord+1,y-4, white); |
lion152 | 0:5dd225e2621d | 49 | |
lion152 | 0:5dd225e2621d | 50 | lcd.setPixel(x-absoluteCoord+3,y-4, white); |
lion152 | 0:5dd225e2621d | 51 | lcd.setPixel(x-absoluteCoord+4,y-4, white); |
lion152 | 0:5dd225e2621d | 52 | |
lion152 | 0:5dd225e2621d | 53 | lcd.setPixel(x-absoluteCoord+6,y-4, white); |
lion152 | 0:5dd225e2621d | 54 | lcd.setPixel(x-absoluteCoord+7,y-4, white); |
lion152 | 0:5dd225e2621d | 55 | |
lion152 | 0:5dd225e2621d | 56 | //4th row |
lion152 | 0:5dd225e2621d | 57 | lcd.setPixel(x-absoluteCoord,y-3, white); |
lion152 | 0:5dd225e2621d | 58 | |
lion152 | 0:5dd225e2621d | 59 | lcd.setPixel(x-absoluteCoord+2,y-3, white); |
lion152 | 0:5dd225e2621d | 60 | lcd.setPixel(x-absoluteCoord+3,y-3, white); |
lion152 | 0:5dd225e2621d | 61 | lcd.setPixel(x-absoluteCoord+4,y-3, white); |
lion152 | 0:5dd225e2621d | 62 | lcd.setPixel(x-absoluteCoord+5,y-3, white); |
lion152 | 0:5dd225e2621d | 63 | |
lion152 | 0:5dd225e2621d | 64 | lcd.setPixel(x-absoluteCoord+7,y-3, white); |
lion152 | 0:5dd225e2621d | 65 | //5th row |
lion152 | 0:5dd225e2621d | 66 | lcd.setPixel(x-absoluteCoord,y-2, white); |
lion152 | 0:5dd225e2621d | 67 | lcd.setPixel(x-absoluteCoord+1,y-2, white); |
lion152 | 0:5dd225e2621d | 68 | lcd.setPixel(x-absoluteCoord+2,y-2, white); |
lion152 | 0:5dd225e2621d | 69 | lcd.setPixel(x-absoluteCoord+3,y-2, white); |
lion152 | 0:5dd225e2621d | 70 | lcd.setPixel(x-absoluteCoord+4,y-2, white); |
lion152 | 0:5dd225e2621d | 71 | lcd.setPixel(x-absoluteCoord+5,y-2, white); |
lion152 | 0:5dd225e2621d | 72 | lcd.setPixel(x-absoluteCoord+6,y-2, white); |
lion152 | 0:5dd225e2621d | 73 | lcd.setPixel(x-absoluteCoord+7,y-2, white); |
lion152 | 0:5dd225e2621d | 74 | //6th row |
lion152 | 0:5dd225e2621d | 75 | |
lion152 | 0:5dd225e2621d | 76 | lcd.setPixel(x-absoluteCoord+1,y-1, white); |
lion152 | 0:5dd225e2621d | 77 | lcd.setPixel(x-absoluteCoord+2,y-1, white); |
lion152 | 0:5dd225e2621d | 78 | |
lion152 | 0:5dd225e2621d | 79 | lcd.setPixel(x-absoluteCoord+4,y-1, white); |
lion152 | 0:5dd225e2621d | 80 | lcd.setPixel(x-absoluteCoord+5,y-1, white); |
lion152 | 0:5dd225e2621d | 81 | |
lion152 | 0:5dd225e2621d | 82 | //7th row |
lion152 | 0:5dd225e2621d | 83 | lcd.setPixel(x-absoluteCoord,y, white); |
lion152 | 0:5dd225e2621d | 84 | |
lion152 | 0:5dd225e2621d | 85 | |
lion152 | 0:5dd225e2621d | 86 | |
lion152 | 0:5dd225e2621d | 87 | |
lion152 | 0:5dd225e2621d | 88 | |
lion152 | 0:5dd225e2621d | 89 | |
lion152 | 0:5dd225e2621d | 90 | lcd.setPixel(x-absoluteCoord+7,y, white); |
lion152 | 0:5dd225e2621d | 91 | } |
lion152 | 0:5dd225e2621d | 92 | |
lion152 | 0:5dd225e2621d | 93 | //////////////MOVEMENT - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 94 | /** |
lion152 | 0:5dd225e2621d | 95 | @details Handles enemy movement on the screen |
lion152 | 0:5dd225e2621d | 96 | */ |
lion152 | 0:5dd225e2621d | 97 | bool Enemy::movement(int absoluteCoord, deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 98 | { |
lion152 | 0:5dd225e2621d | 99 | if(directionW) |
lion152 | 0:5dd225e2621d | 100 | { |
lion152 | 0:5dd225e2621d | 101 | if(collisionPlatformW(levelMap)) |
lion152 | 0:5dd225e2621d | 102 | { |
lion152 | 0:5dd225e2621d | 103 | directionW=false; |
lion152 | 0:5dd225e2621d | 104 | } |
lion152 | 0:5dd225e2621d | 105 | else |
lion152 | 0:5dd225e2621d | 106 | { |
lion152 | 0:5dd225e2621d | 107 | x--; |
lion152 | 0:5dd225e2621d | 108 | } |
lion152 | 0:5dd225e2621d | 109 | } |
lion152 | 0:5dd225e2621d | 110 | else |
lion152 | 0:5dd225e2621d | 111 | { |
lion152 | 0:5dd225e2621d | 112 | if(collisionPlatformE(levelMap)) |
lion152 | 0:5dd225e2621d | 113 | { |
lion152 | 0:5dd225e2621d | 114 | directionW=true; |
lion152 | 0:5dd225e2621d | 115 | } |
lion152 | 0:5dd225e2621d | 116 | else |
lion152 | 0:5dd225e2621d | 117 | { |
lion152 | 0:5dd225e2621d | 118 | x++; |
lion152 | 0:5dd225e2621d | 119 | } |
lion152 | 0:5dd225e2621d | 120 | } |
lion152 | 0:5dd225e2621d | 121 | noPlatformFall(levelMap); |
lion152 | 0:5dd225e2621d | 122 | fall(levelMap); |
lion152 | 0:5dd225e2621d | 123 | |
lion152 | 0:5dd225e2621d | 124 | if(y>(47+height)) |
lion152 | 0:5dd225e2621d | 125 | { |
lion152 | 0:5dd225e2621d | 126 | return true; |
lion152 | 0:5dd225e2621d | 127 | } |
lion152 | 0:5dd225e2621d | 128 | return false; |
lion152 | 0:5dd225e2621d | 129 | } |
lion152 | 0:5dd225e2621d | 130 | |
lion152 | 0:5dd225e2621d | 131 | //////////////NOPLATFORMFALL - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 132 | /** |
lion152 | 0:5dd225e2621d | 133 | @details implements falling donw when enemy walks off the platform |
lion152 | 0:5dd225e2621d | 134 | */ |
lion152 | 0:5dd225e2621d | 135 | void Enemy::noPlatformFall(deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 136 | { |
lion152 | 0:5dd225e2621d | 137 | if((!collisionPlatformS(levelMap)) && (force==0.0f)) |
lion152 | 0:5dd225e2621d | 138 | { |
lion152 | 0:5dd225e2621d | 139 | force=-0.04f; |
lion152 | 0:5dd225e2621d | 140 | floatY=y; |
lion152 | 0:5dd225e2621d | 141 | } |
lion152 | 0:5dd225e2621d | 142 | } |
lion152 | 0:5dd225e2621d | 143 | |
lion152 | 0:5dd225e2621d | 144 | //////////////FAll - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 145 | /** |
lion152 | 0:5dd225e2621d | 146 | @details Handles enemy falling gravity aspect |
lion152 | 0:5dd225e2621d | 147 | */ |
lion152 | 0:5dd225e2621d | 148 | void Enemy::fall(deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 149 | { |
lion152 | 0:5dd225e2621d | 150 | if (collisionPlatformS(levelMap)) |
lion152 | 0:5dd225e2621d | 151 | { |
lion152 | 0:5dd225e2621d | 152 | force=0.0f; |
lion152 | 0:5dd225e2621d | 153 | } |
lion152 | 0:5dd225e2621d | 154 | if(force<0.0f) |
lion152 | 0:5dd225e2621d | 155 | { |
lion152 | 0:5dd225e2621d | 156 | floatY-=force; |
lion152 | 0:5dd225e2621d | 157 | if(force>-1) |
lion152 | 0:5dd225e2621d | 158 | { |
lion152 | 0:5dd225e2621d | 159 | force-=0.11f; |
lion152 | 0:5dd225e2621d | 160 | } |
lion152 | 0:5dd225e2621d | 161 | y=floor(floatY+0.5f); |
lion152 | 0:5dd225e2621d | 162 | } |
lion152 | 0:5dd225e2621d | 163 | } |
lion152 | 0:5dd225e2621d | 164 | |
lion152 | 0:5dd225e2621d | 165 | //////////////COLLISIONPLATFORME - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 166 | /** |
lion152 | 0:5dd225e2621d | 167 | @details Handles enemy collision with platform to the right |
lion152 | 0:5dd225e2621d | 168 | */ |
lion152 | 0:5dd225e2621d | 169 | bool Enemy::collisionPlatformE(deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 170 | { |
lion152 | 0:5dd225e2621d | 171 | for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();) |
lion152 | 0:5dd225e2621d | 172 | { |
lion152 | 0:5dd225e2621d | 173 | Platform* p=*it; |
lion152 | 0:5dd225e2621d | 174 | if (collisionLeftUpE(*p)) |
lion152 | 0:5dd225e2621d | 175 | { |
lion152 | 0:5dd225e2621d | 176 | return true; |
lion152 | 0:5dd225e2621d | 177 | } |
lion152 | 0:5dd225e2621d | 178 | it++; |
lion152 | 0:5dd225e2621d | 179 | } |
lion152 | 0:5dd225e2621d | 180 | return false; |
lion152 | 0:5dd225e2621d | 181 | } |
lion152 | 0:5dd225e2621d | 182 | |
lion152 | 0:5dd225e2621d | 183 | //////////////COLLISIONPLATFORMW - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 184 | /** |
lion152 | 0:5dd225e2621d | 185 | @details Handles enemy collision with platform to the left |
lion152 | 0:5dd225e2621d | 186 | */ |
lion152 | 0:5dd225e2621d | 187 | bool Enemy::collisionPlatformW(deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 188 | { |
lion152 | 0:5dd225e2621d | 189 | for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();) |
lion152 | 0:5dd225e2621d | 190 | { |
lion152 | 0:5dd225e2621d | 191 | Platform* p=*it; |
lion152 | 0:5dd225e2621d | 192 | if (collisionLeftUpW(*p)) |
lion152 | 0:5dd225e2621d | 193 | { |
lion152 | 0:5dd225e2621d | 194 | return true; |
lion152 | 0:5dd225e2621d | 195 | } |
lion152 | 0:5dd225e2621d | 196 | it++; |
lion152 | 0:5dd225e2621d | 197 | } |
lion152 | 0:5dd225e2621d | 198 | return false; |
lion152 | 0:5dd225e2621d | 199 | } |
lion152 | 0:5dd225e2621d | 200 | |
lion152 | 0:5dd225e2621d | 201 | //////////////COLLISIONPLATFORMS - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 202 | /** |
lion152 | 0:5dd225e2621d | 203 | @details Handles enemy collision with platform bellow |
lion152 | 0:5dd225e2621d | 204 | */ |
lion152 | 0:5dd225e2621d | 205 | bool Enemy::collisionPlatformS(deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 206 | { |
lion152 | 0:5dd225e2621d | 207 | for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();) |
lion152 | 0:5dd225e2621d | 208 | { |
lion152 | 0:5dd225e2621d | 209 | Platform* p=*it; |
lion152 | 0:5dd225e2621d | 210 | if (collisionLeftUpS(*p)) |
lion152 | 0:5dd225e2621d | 211 | { |
lion152 | 0:5dd225e2621d | 212 | //pc.printf("ychar - %d\n", y); |
lion152 | 0:5dd225e2621d | 213 | //pc.printf("y-heightplatf - %d", p->getY() - p->getHeight()); |
lion152 | 0:5dd225e2621d | 214 | return true; |
lion152 | 0:5dd225e2621d | 215 | } |
lion152 | 0:5dd225e2621d | 216 | it++; |
lion152 | 0:5dd225e2621d | 217 | } |
lion152 | 0:5dd225e2621d | 218 | return false; |
lion152 | 0:5dd225e2621d | 219 | } |
lion152 | 0:5dd225e2621d | 220 | |
lion152 | 0:5dd225e2621d | 221 | //////////////COLLISIONPLATFORMN - ENEMY////////////////////////////////////////////////// |
lion152 | 0:5dd225e2621d | 222 | /** |
lion152 | 0:5dd225e2621d | 223 | @details Handles enemy collision with platform above |
lion152 | 0:5dd225e2621d | 224 | */ |
lion152 | 0:5dd225e2621d | 225 | bool Enemy::collisionPlatformN(deque<Platform*>* levelMap) |
lion152 | 0:5dd225e2621d | 226 | { |
lion152 | 0:5dd225e2621d | 227 | for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();) |
lion152 | 0:5dd225e2621d | 228 | { |
lion152 | 0:5dd225e2621d | 229 | Platform* p=*it; |
lion152 | 0:5dd225e2621d | 230 | if (collisionLeftUpN(*p)) |
lion152 | 0:5dd225e2621d | 231 | { |
lion152 | 0:5dd225e2621d | 232 | return true; |
lion152 | 0:5dd225e2621d | 233 | } |
lion152 | 0:5dd225e2621d | 234 | it++; |
lion152 | 0:5dd225e2621d | 235 | } |
lion152 | 0:5dd225e2621d | 236 | return false; |
lion152 | 0:5dd225e2621d | 237 | } |
lion152 | 0:5dd225e2621d | 238 | |
lion152 | 0:5dd225e2621d | 239 | bool Enemy::getSpawned() |
lion152 | 0:5dd225e2621d | 240 | { |
lion152 | 0:5dd225e2621d | 241 | return spawned; |
lion152 | 0:5dd225e2621d | 242 | } |
lion152 | 0:5dd225e2621d | 243 | |
lion152 | 0:5dd225e2621d | 244 | void Enemy::setSpawned(bool spawned) |
lion152 | 0:5dd225e2621d | 245 | { |
lion152 | 0:5dd225e2621d | 246 | this->spawned=spawned; |
lion152 | 0:5dd225e2621d | 247 | } |