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 "Map.h"
lion152 0:5dd225e2621d 2 #include <deque>
lion152 0:5dd225e2621d 3 #include "Gamepad.h"
lion152 0:5dd225e2621d 4 #include "Platform.h"
lion152 0:5dd225e2621d 5 #include "Enemy.h"
lion152 0:5dd225e2621d 6 #include "Character.h"
lion152 0:5dd225e2621d 7 #include "N5110.h"
lion152 0:5dd225e2621d 8 Serial pc(USBTX, USBRX);
lion152 0:5dd225e2621d 9
lion152 0:5dd225e2621d 10 //constructor
lion152 0:5dd225e2621d 11 Map::Map(deque<Platform*>* levelMap, deque<Enemy*>* enemyMap, Character* character)
lion152 0:5dd225e2621d 12 :levelMap(levelMap), enemyMap(enemyMap), character(character)
lion152 0:5dd225e2621d 13 {
lion152 0:5dd225e2621d 14 absoluteCoord = 0;
lion152 0:5dd225e2621d 15 }
lion152 0:5dd225e2621d 16
lion152 0:5dd225e2621d 17 Map::~Map() //destructor
lion152 0:5dd225e2621d 18 {
lion152 0:5dd225e2621d 19
lion152 0:5dd225e2621d 20 }
lion152 0:5dd225e2621d 21
lion152 0:5dd225e2621d 22 ///////////////DRAW - MAP///////////////////////////////////////////////////////
lion152 0:5dd225e2621d 23 /**
lion152 0:5dd225e2621d 24 *@details handles drawing of platforms, characters and enemies based on changing coordinates,
lion152 0:5dd225e2621d 25 *in addition deletes platofrms, and enemies that are unreachable
lion152 0:5dd225e2621d 26 *(map doesn't scroll left)
lion152 0:5dd225e2621d 27 */
lion152 0:5dd225e2621d 28 void Map::draw(N5110 &lcd, bool white)
lion152 0:5dd225e2621d 29 {
lion152 0:5dd225e2621d 30 //pc.printf("%d\n", absoluteCoord)
lion152 0:5dd225e2621d 31 //pc.printf("drawing started");
lion152 0:5dd225e2621d 32 character->draw(lcd, absoluteCoord, white);
lion152 0:5dd225e2621d 33 //pc.printf("character finished drawing");
lion152 0:5dd225e2621d 34 for(deque<Platform*>::iterator it=levelMap->begin(); it !=levelMap->end();)
lion152 0:5dd225e2621d 35 {
lion152 0:5dd225e2621d 36 Platform* p=*it;
lion152 0:5dd225e2621d 37 if (((p->getX()+p->getWidth()-1-absoluteCoord)>=0)&&((p->getX()-absoluteCoord)<84))
lion152 0:5dd225e2621d 38 {
lion152 0:5dd225e2621d 39 p->draw(lcd, absoluteCoord, white);
lion152 0:5dd225e2621d 40 it++;
lion152 0:5dd225e2621d 41 }
lion152 0:5dd225e2621d 42 else if ((p->getX()+p->getWidth()-1-absoluteCoord)<0)
lion152 0:5dd225e2621d 43 {
lion152 0:5dd225e2621d 44 levelMap->erase(it);
lion152 0:5dd225e2621d 45 it=levelMap->begin();
lion152 0:5dd225e2621d 46 }
lion152 0:5dd225e2621d 47 else
lion152 0:5dd225e2621d 48 {
lion152 0:5dd225e2621d 49 it++;
lion152 0:5dd225e2621d 50 }
lion152 0:5dd225e2621d 51 }
lion152 0:5dd225e2621d 52 //pc.printf("Pre-cycle!");
lion152 0:5dd225e2621d 53 for(deque<Enemy*>::iterator it=enemyMap->begin(); it !=enemyMap->end();)
lion152 0:5dd225e2621d 54 {
lion152 0:5dd225e2621d 55 Enemy* e=*it;
lion152 0:5dd225e2621d 56 //pc.printf("Inside cycle! %d\n", it);
lion152 0:5dd225e2621d 57 if (((e->getX()+e->getWidth()-1-absoluteCoord)>=0)&&((e->getX()-absoluteCoord)<84))
lion152 0:5dd225e2621d 58 {
lion152 0:5dd225e2621d 59 e->setSpawned(true);
lion152 0:5dd225e2621d 60 //pc.printf("Drawing enemy!");
lion152 0:5dd225e2621d 61 e->draw(lcd, absoluteCoord, white);
lion152 0:5dd225e2621d 62 it++;
lion152 0:5dd225e2621d 63 }
lion152 0:5dd225e2621d 64 else if ((e->getX()+e->getWidth()-1-absoluteCoord)<0)
lion152 0:5dd225e2621d 65 {
lion152 0:5dd225e2621d 66 //pc.printf("Deleting enemy!");
lion152 0:5dd225e2621d 67 enemyMap->erase(it);
lion152 0:5dd225e2621d 68 it=enemyMap->begin();
lion152 0:5dd225e2621d 69 }
lion152 0:5dd225e2621d 70 else
lion152 0:5dd225e2621d 71 {
lion152 0:5dd225e2621d 72 it++;
lion152 0:5dd225e2621d 73 }
lion152 0:5dd225e2621d 74 }
lion152 0:5dd225e2621d 75 //pc.printf("Past cycle!");
lion152 0:5dd225e2621d 76 }
lion152 0:5dd225e2621d 77 ///////////////MOVEENEMIES - MAP///////////////////////////////////////////////////////
lion152 0:5dd225e2621d 78 /**
lion152 0:5dd225e2621d 79 *@details function that handles enemy movement
lion152 0:5dd225e2621d 80 */
lion152 0:5dd225e2621d 81 void Map::moveEnemies()
lion152 0:5dd225e2621d 82 {
lion152 0:5dd225e2621d 83 for(deque<Enemy*>::iterator it=enemyMap->begin(); it !=enemyMap->end();)
lion152 0:5dd225e2621d 84 {
lion152 0:5dd225e2621d 85 Enemy* e=*it;
lion152 0:5dd225e2621d 86 if(e->getSpawned())
lion152 0:5dd225e2621d 87 {
lion152 0:5dd225e2621d 88 if(e->movement(absoluteCoord, levelMap))
lion152 0:5dd225e2621d 89 {
lion152 0:5dd225e2621d 90 enemyMap->erase(it);
lion152 0:5dd225e2621d 91 it=enemyMap->begin();
lion152 0:5dd225e2621d 92 }
lion152 0:5dd225e2621d 93 else
lion152 0:5dd225e2621d 94 {
lion152 0:5dd225e2621d 95 it++;
lion152 0:5dd225e2621d 96 }
lion152 0:5dd225e2621d 97 }
lion152 0:5dd225e2621d 98 else
lion152 0:5dd225e2621d 99 {
lion152 0:5dd225e2621d 100 it++;
lion152 0:5dd225e2621d 101 }
lion152 0:5dd225e2621d 102 }
lion152 0:5dd225e2621d 103 }
lion152 0:5dd225e2621d 104
lion152 0:5dd225e2621d 105 int* Map::getAbsoluteCoord()
lion152 0:5dd225e2621d 106 {
lion152 0:5dd225e2621d 107 return &absoluteCoord;
lion152 0:5dd225e2621d 108 }
lion152 0:5dd225e2621d 109
lion152 0:5dd225e2621d 110 Character* Map::getCharacter()
lion152 0:5dd225e2621d 111 {
lion152 0:5dd225e2621d 112 return character;
lion152 0:5dd225e2621d 113 }
lion152 0:5dd225e2621d 114
lion152 0:5dd225e2621d 115 deque<Platform*>* Map::getLevelMap()
lion152 0:5dd225e2621d 116 {
lion152 0:5dd225e2621d 117 return levelMap;
lion152 0:5dd225e2621d 118 }
lion152 0:5dd225e2621d 119
lion152 0:5dd225e2621d 120 deque<Enemy*>* Map::getEnemyMap()
lion152 0:5dd225e2621d 121 {
lion152 0:5dd225e2621d 122 return enemyMap;
lion152 0:5dd225e2621d 123 }