本文整理汇总了C++中TilePosition类的典型用法代码示例。如果您正苦于以下问题:C++ TilePosition类的具体用法?C++ TilePosition怎么用?C++ TilePosition使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TilePosition类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getRegion
bool Commander::isOccupied(BWTA::Region* region)
{
BWTA::Polygon p = region->getPolygon();
vector<BaseAgent*> agents = AgentManager::getInstance()->getAgents();
for (int i = 0; i < (int)agents.size(); i++)
{
BaseAgent* agent = agents.at(i);
if (agent->isAlive() && agent->getUnitType().isResourceDepot())
{
BWTA::Region* aRegion = getRegion(agents.at(i)->getUnit()->getTilePosition());
Position c1 = region->getCenter();
Position c2 = aRegion->getCenter();
if (c2.x() == c1.x() && c2.y() == c1.y())
{
return true;
}
}
}
//Check expansion site
TilePosition expansionSite = ExplorationManager::getInstance()->getExpansionSite();
TilePosition center = TilePosition(region->getCenter());
if (expansionSite.x() >= 0)
{
double dist = expansionSite.getDistance(center);
if (dist <= 15)
{
return true;
}
}
return false;
}
示例2: moveToGoal
bool PFManager::moveToGoal(BaseAgent* agent, TilePosition checkpoint, TilePosition goal)
{
if (checkpoint.x() == -1 || goal.x() == -1) return false;
Unit* unit = agent->getUnit();
if (unit->isStartingAttack() || unit->isAttacking())
{
return false;
}
Position toReach = Position(checkpoint);
double distToReach = toReach.getDistance(unit->getPosition());
int engageDist = unit->getType().groundWeapon().maxRange();
if (agent->isOfType(UnitTypes::Terran_Medic))
{
engageDist = 6 * 32;
}
if (engageDist <= 64)
{
engageDist = 64;
}
if (distToReach <= engageDist)
{
if (unit->isMoving()) unit->stop();
return true;
}
//Move
if (!unit->isMoving()) return unit->attack(toReach);
else return true;
}
示例3: TilePosition
TilePosition CoverMap::findExpansionSite()
{
UnitType baseType = Broodwar->self()->getRace().getCenter();
double bestDist = 100000;
TilePosition bestPos = TilePosition(-1, -1);
//Iterate through all base locations
for(set<BWTA::BaseLocation*>::const_iterator i=BWTA::getBaseLocations().begin(); i!= BWTA::getBaseLocations().end(); i++)
{
TilePosition pos = (*i)->getTilePosition();
bool taken = false;
//Check if own buildings are close
vector<BaseAgent*> agents = AgentManager::getInstance()->getAgents();
int noBases = 0;
for (int i = 0; i < (int)agents.size(); i++)
{
BaseAgent* agent = agents.at(i);
if (agent->isAlive() && agent->getUnitType().isResourceDepot())
{
double dist = pos.getDistance(agent->getUnit()->getTilePosition());
if (dist <= 12)
{
noBases++;
}
}
}
if (BuildPlanner::isZerg())
{
if (noBases >= 2) taken = true;
}
else
{
if (noBases >= 1) taken = true;
}
//Check if enemy buildings are close
int eCnt = ExplorationManager::getInstance()->spottedBuildingsWithinRange(pos, 20);
if (eCnt > 0)
{
taken = true;
}
//Not taken, calculate ground distance
if (!taken)
{
if (ExplorationManager::canReach(Broodwar->self()->getStartLocation(), pos))
{
double dist = mapData.getDistance(Broodwar->self()->getStartLocation(), pos);
if (dist <= bestDist)
{
bestDist = dist;
bestPos = pos;
}
}
}
}
return bestPos;
}
示例4: findClosestMineral
Unit BuildingPlacer::findClosestMineral(TilePosition workerPos)
{
Unit mineral = NULL;
double bestDist = 10000;
for(BaseLocation* base : getBaseLocations())
{
TilePosition pos = base->getTilePosition();
double cDist = pos.getDistance(workerPos);
if (cDist < bestDist)
{
//Find closest base
BaseAgent* base = AgentManager::getInstance()->getClosestBase(pos);
if (base != NULL)
{
double dist = pos.getDistance(base->getUnit()->getTilePosition());
if (dist <= 12)
{
//We have a base near this base location
//Check if we have minerals available
Unit cMineral = hasMineralNear(pos);
if (cMineral != NULL)
{
mineral = cMineral;
bestDist = cDist;
}
}
}
}
}
//We have no base with minerals, do nothing
return mineral;
}
示例5: targetPosition
void UnitClass::build(TilePosition target, BWAPI::UnitType type)
{
if(exists())
{
const Position targetPosition(target.x()*32+type.tileWidth()*16, target.y()*32+type.tileHeight()*16);
if(getDistance(type, targetPosition) > 48 || !MapHelper::isAllVisible(target, type))
{
move(targetPosition, 0);
return;
}
if(mUnit->getOrder() == BWAPI::Orders::PlaceBuilding)
{
if(mUnit->getBuildType() == type && mUnit->getOrderTargetPosition() == targetPosition)
return;
}
if(mUnit->getLastCommand().getType() == BWAPI::UnitCommandTypes::Build && mUnit->getLastCommand().getUnitType() == type && mUnit->getLastCommand().getTargetTilePosition() == target)
{
if(mLastOrderExecuteTime >= BWAPI::Broodwar->getFrameCount())
return;
}
if(mUnit->build(target, type))
mLastOrderExecuteTime = BWAPI::Broodwar->getFrameCount() + BWAPI::Broodwar->getRemainingLatencyFrames();
else
move(targetPosition, 0);
}
}
示例6: removeMember
void Squad::removeMember(BaseAgent* agent)
{
//Step 1. Remove the agent instance
for (int i = 0; i < (int)agents.size(); i++)
{
if (agents.at(i)->getUnitID() == agent->getUnitID())
{
agents.at(i)->setSquadID(-1);
agents.at(i)->assignToDefend();
agents.erase(agents.begin() + i);
break;
}
}
//Step 2. Update the setup list
for (int i = 0; i < (int)setup.size(); i++)
{
if (setup.at(i).equals(agent->getUnitType()))
{
setup.at(i).current--;
}
}
//Step 3. If Explorer, set destination as explored (to avoid being killed at the same
//place over and over again).
if (isExplorer())
{
TilePosition goal = agent->getGoal();
if (goal.x() >= 0)
{
ExplorationManager::Instance().setExplored(goal);
}
}
}
示例7: getNextExpansionLocation
BWAPI::TilePosition getNextExpansionLocation(TilePosition currentExpo)
{
//remove the current expo from the list
//loop through expos and find the nearest one
std::set<BWTA::BaseLocation*> bases;
for (auto &u : allBases)
{
//make sure we delete the current expansion
if (u->getTilePosition() == currentExpo)
{
allBases.erase(u);
}
}
BWTA::BaseLocation *ret = *allBases.begin();
int minDistance = currentExpo.getApproxDistance(ret->getTilePosition());
//make sure we dont accidently find current expansion
for (auto &u : allBases)
{
int tempDistance = currentExpo.getApproxDistance(u->getTilePosition());
if (tempDistance < minDistance && tempDistance > 10)
{
//found a closer base
minDistance = tempDistance;
ret = u;
}
}
return ret->getTilePosition();
}
示例8: isVisible
bool Squad::isVisible(TilePosition pos)
{
if (!ExplorationManager::canReach(Broodwar->self()->getStartLocation(), pos))
{
return true;
}
if (Broodwar->isVisible(pos))
{
return true;
}
if (getCenter().getDistance(pos) <= 3)
{
return true;
}
for (int i = 0; i < (int)hasVisited.size(); i++)
{
TilePosition vPos = hasVisited.at(i);
if (vPos.x() == pos.x() && vPos.y() == pos.y())
{
return true;
}
}
return false;
}
示例9: findClosestMineral
Unit* CoverMap::findClosestMineral(TilePosition workerPos)
{
Unit* mineral = NULL;
double bestDist = 10000;
for(set<BWTA::BaseLocation*>::const_iterator i=BWTA::getBaseLocations().begin(); i!= BWTA::getBaseLocations().end(); i++)
{
TilePosition pos = (*i)->getTilePosition();
double cDist = pos.getDistance(workerPos);
if (cDist < bestDist)
{
//Find closest base
BaseAgent* base = AgentManager::getInstance()->getClosestBase(pos);
double dist = pos.getDistance(base->getUnit()->getTilePosition());
if (dist <= 12)
{
//We have a base near this base location
//Check if we have minerals available
Unit* cMineral = hasMineralNear(pos);
if (cMineral != NULL)
{
mineral = cMineral;
bestDist = cDist;
}
}
}
}
//We have no base with minerals, do nothing
return mineral;
}
示例10: checkMinerals
/*
if the mineral fields at our base are getting low then construct a new base
*/
void ProductionManager::checkMinerals()
{
if(!expansionQueued)
{
Unit* closestMineral = NULL;
TilePosition home;
//find main
for(std::set<Unit*>::const_iterator i=Broodwar->self()->getUnits().begin();i!=Broodwar->self()->getUnits().end();i++)
{
if ((*i)->getType().isResourceDepot())
{
home = (*i)->getTilePosition();
for(std::set<BWAPI::Unit*>::iterator m = Broodwar->getMinerals().begin(); m != Broodwar->getMinerals().end(); m++)
{
if (closestMineral==NULL || home.getDistance((*m)->getTilePosition()) < home.getDistance(closestMineral->getTilePosition()))
closestMineral=*m;
}
if (closestMineral!=NULL)
{
if(closestMineral->getResources() < 150)
{
production.queueAsHighestPriority(MetaType(Broodwar->self()->getRace().getCenter()), true);
expansionQueued = true;
}
}
}
}
}
}
示例11: TilePosition
TilePosition ExplorationManager::scanForVulnerableBase()
{
TilePosition spot = TilePosition(-1, -1);
for (int i = 0; i < (int)spottedBuildings.size(); i++)
{
if (spottedBuildings.at(i)->isActive())
{
SpottedObject* obj = spottedBuildings.at(i);
if (obj->getType().isResourceDepot())
{
if (!isDetectorCovering(obj->getTilePosition()))
{
//Broodwar->printf("Found probable vulnerable base at (%d,%d)", obj->getTilePosition().x(), obj->getTilePosition().y());
spot = obj->getTilePosition();
}
}
}
}
if (spot.x() < 0)
{
//Broodwar->printf("Scan: No vulnerable base found");
}
return spot;
}
示例12: getTilePosition
void UnitClass::drawUnitTilePosition()
{
TilePosition tile = getTilePosition();
BWAPI::UnitType type = getType();
Player player = getPlayer();
BWAPI::Broodwar->drawBox(BWAPI::CoordinateType::Map, tile.x()*32, tile.y()*32, (tile.x()+type.tileWidth())*32, (tile.y()+type.tileHeight())*32, player->getColor());
}
示例13: positionFree
bool CoverMap::positionFree(TilePosition pos)
{
if (cover_map[pos.x()][pos.y()] == BUILDABLE)
{
return true;
}
return false;
}
示例14: blockPosition
void CoverMap::blockPosition(TilePosition buildSpot)
{
if (buildSpot.x() == -1)
{
//Error check
return;
}
cover_map[buildSpot.x()][buildSpot.y()] = BLOCKED;
}
示例15: matches
bool PathObj::matches(TilePosition cStart, TilePosition cEnd)
{
//Check if end almost matches
double dist = cEnd.getDistance(end);
if (dist > 3) return false;
//Check if start almost matches.
dist = cStart.getDistance(start);
if (dist > 5) return false;
return true;
}