TilePosition Commander::findChokePoint() { const Chokepoint* bestChoke = MapManager::getInstance()->getDefenseLocation(); TilePosition guardPos = Broodwar->self()->getStartLocation(); if (bestChoke != NULL) { guardPos = findDefensePos(bestChoke); } return guardPos; }
TilePosition Commander::findChokePoint() { //First, check the DefenseLocator //for a stored defense position. DefenseLocator* df = DefenseLocator::getInstance(); TilePosition storedPos = df->getBaseDefensePos(Broodwar->mapHash()); if (storedPos.x() != -1) return storedPos; double bestPrio = -1; Chokepoint* bestChoke = NULL; for(set<BWTA::Region*>::const_iterator i=getRegions().begin();i!=getRegions().end();i++) { if (isOccupied((*i))) { for(set<Chokepoint*>::const_iterator c=(*i)->getChokepoints().begin();c!=(*i)->getChokepoints().end();c++) { if (isEdgeChokepoint((*c))) { double cPrio = getChokepointPrio(TilePosition((*c)->getCenter())); if (cPrio > bestPrio) { bestPrio = cPrio; bestChoke = (*c); } } } } } TilePosition guardPos = Broodwar->self()->getStartLocation(); if (bestChoke != NULL) { guardPos = findDefensePos(bestChoke); //guardPos = TilePosition(bestChoke->getCenter()); //Pre-calculate path TilePosition b = ExplorationManager::getInstance()->getClosestSpottedBuilding(guardPos); if (b.x() >= 0) { Pathfinder::getInstance()->requestPath(guardPos, b); } } return guardPos; }