My platformer project
Dependencies: Finalproject N5110 mbed
Map/Map.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 "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 | } |