My platformer project

Dependencies:   Finalproject N5110 mbed

Committer:
lion152
Date:
Fri May 05 15:00:33 2017 +0000
Revision:
0:5dd225e2621d
Finished in one go

Who changed what in which revision?

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