void Grid::rebuildGrid() { cells.clear(); globalCell = SharedCell(new Cell()); calculateTranslationMatrix(); for (boost::unordered_map<int, Item::SharedArea>::iterator a = core->getData()->areas.begin(); a != core->getData()->areas.end(); ++a) { addArea(a->second); } for (boost::unordered_map<int, Item::SharedCheckpoint>::iterator c = core->getData()->checkpoints.begin(); c != core->getData()->checkpoints.end(); ++c) { addCheckpoint(c->second); } for (boost::unordered_map<int, Item::SharedMapIcon>::iterator m = core->getData()->mapIcons.begin(); m != core->getData()->mapIcons.end(); ++m) { addMapIcon(m->second); } for (boost::unordered_map<int, Item::SharedObject>::iterator o = core->getData()->objects.begin(); o != core->getData()->objects.end(); ++o) { addObject(o->second); } for (boost::unordered_map<int, Item::SharedPickup>::iterator p = core->getData()->pickups.begin(); p != core->getData()->pickups.end(); ++p) { addPickup(p->second); } for (boost::unordered_map<int, Item::SharedRaceCheckpoint>::iterator r = core->getData()->raceCheckpoints.begin(); r != core->getData()->raceCheckpoints.end(); ++r) { addRaceCheckpoint(r->second); } for (boost::unordered_map<int, Item::SharedTextLabel>::iterator t = core->getData()->textLabels.begin(); t != core->getData()->textLabels.end(); ++t) { addTextLabel(t->second); } }
void Grid::removePickup(const Item::SharedPickup &pickup, bool reassign) { bool found = false; if (pickup->cell) { boost::unordered_map<CellID, SharedCell>::iterator c = cells.find(pickup->cell->cellID); if (c != cells.end()) { boost::unordered_map<int, Item::SharedPickup>::iterator p = c->second->pickups.find(pickup->pickupID); if (p != c->second->pickups.end()) { c->second->pickups.quick_erase(p); eraseCellIfEmpty(c->second); found = true; } } } else { boost::unordered_map<int, Item::SharedPickup>::iterator p = globalCell->pickups.find(pickup->pickupID); if (p != globalCell->pickups.end()) { globalCell->pickups.quick_erase(p); found = true; } } if (found) { if (reassign) { addPickup(pickup); } } }
void GameEngine::onPlayerTurn(bool b, Point p) { if (b) { //Increment turn log.incTurn(); //Restore some mana if (turns % 3 == 0) hero->changeMana(1); //Move Player Point d = p; p = p + screenOrientation; if (moveableCell(p)) { screenOrientation = p; hero->setLoc(hero->getLoc() + d); int mapCellType = map[p.x()][p.y()].getCellType(); if (mapCellType == 5) log.registerEvent("Press enter to descend stairs"); else if (mapCellType == 6) log.registerEvent("Press enter to use Shop"); else if (mapCellType == 7) log.registerEvent("A mysterious cave...press enter to descend"); else if (mapCellType == 8) log.registerEvent("Press enter to ascend up the stairs"); if (map[p.x()][p.y()].getPickup() != NULL) addPickup(p); } else if (map[p.x()][p.y()].getActor() != NULL) doBattle(hero, map[p.x()][p.y()].getActor()); //Move AI if (!inBossRoom) { for (unsigned int i = 0; i < monsters.size(); i++) { Point mLoc = monsters[i]->getLoc(); Actor* m = map[mLoc.x()][mLoc.y()].getActor(); if (moveAI(m)) doBattle(m, hero); } } turns++; } }