Example #1
0
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);
    }
}
Example #2
0
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++;
	}
}