|
BWAPI
|
Functions | |
| TilePosition | spiralSearch (TilePosition startLocation, std::tr1::function< bool(TilePosition)> testFunction, int maxRadius=0) |
| std::set< TilePosition > | floodFill (TilePosition start, std::tr1::function< bool(TilePosition)> testFunction, std::set< TilePosition > targets=std::set< TilePosition >(), std::set< TilePosition > ignoreTiles=std::set< TilePosition >()) |
| std::map< WalkPosition, int > | walkSearch (WalkPosition start, std::tr1::function< bool(WalkPosition)> testFunction, std::set< WalkPosition > targets=std::set< WalkPosition >(), std::set< WalkPosition > ignoreTiles=std::set< WalkPosition >()) |
| bool | isAnyVisible (TilePosition location, BWAPI::UnitType type) |
| bool | isAllVisible (TilePosition location, BWAPI::UnitType type) |
| bool | isTileWalkable (TilePosition location) |
| bool | isTileWalkable (int x, int y) |
| bool | mapIs (std::string name) |
| int | getGroundDistance (Position start, Position end) |
| std::set< TilePosition > MapHelper::floodFill | ( | TilePosition | start, |
| std::tr1::function< bool(TilePosition)> | testFunction, | ||
| std::set< TilePosition > | targets = std::set<TilePosition>(), |
||
| std::set< TilePosition > | ignoreTiles = std::set<TilePosition>() |
||
| ) |
Definition at line 68 of file MapHelper.cpp.
References BWAPI::TilePosition::isValid(), BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
Referenced by BuildingPlacerClass::isLocationNonBlocking().
{
bool noTargets = targets.empty();
std::set<TilePosition> remainingTiles;
remainingTiles.insert(start);
while(!remainingTiles.empty())
{
if(!noTargets && targets.empty())
return targets;
TilePosition tile = *remainingTiles.begin();
ignoreTiles.insert(tile);
remainingTiles.erase(tile);
if(!tile.isValid())
continue;
if(!testFunction(tile))
continue;
if(noTargets)
targets.insert(tile);
else
targets.erase(tile);
if(ignoreTiles.count(TilePosition(tile.x() + 1, tile.y())) == 0)
remainingTiles.insert(TilePosition(tile.x() + 1, tile.y()));
if(ignoreTiles.count(TilePosition(tile.x() - 1, tile.y())) == 0)
remainingTiles.insert(TilePosition(tile.x() - 1, tile.y()));
if(ignoreTiles.count(TilePosition(tile.x(), tile.y() + 1)) == 0)
remainingTiles.insert(TilePosition(tile.x(), tile.y() + 1));
if(ignoreTiles.count(TilePosition(tile.x(), tile.y() - 1)) == 0)
remainingTiles.insert(TilePosition(tile.x(), tile.y() - 1));
}
return targets;
}


| int MapHelper::getGroundDistance | ( | Position | start, |
| Position | end | ||
| ) |
Definition at line 225 of file MapHelper.cpp.
References BWAPI::Broodwar, BWAPI::Position::getApproxDistance(), and Singleton< T >::Instance().
Referenced by ScoutManagerClass::onBegin(), and BuildingPlacerClass::rememberBestExpandLocation().
{
if(!BWAPI::Broodwar->hasPath(start, end))
return std::numeric_limits<int>::max();
int groundDistance = PathFinder::Instance().CreateCheapWalkPath(start, end).getLength();
int linearDistance = start.getApproxDistance(end);
if(groundDistance < linearDistance)
return linearDistance;
return groundDistance;
}

| bool MapHelper::isAllVisible | ( | TilePosition | location, |
| BWAPI::UnitType | type | ||
| ) |
Definition at line 179 of file MapHelper.cpp.
References BWAPI::Broodwar, BWAPI::UnitType::tileHeight(), BWAPI::UnitType::tileWidth(), BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
Referenced by UnitClass::build().
{
for(int x = location.x(); x < location.x() + type.tileWidth(); ++x)
{
for(int y = location.y(); y < location.y() + type.tileHeight(); ++y)
{
if(!BWAPI::Broodwar->isVisible(x, y))
return false;
}
}
return true;
}


| bool MapHelper::isAnyVisible | ( | TilePosition | location, |
| BWAPI::UnitType | type | ||
| ) |
Definition at line 165 of file MapHelper.cpp.
References BWAPI::Broodwar, BWAPI::UnitType::tileHeight(), BWAPI::UnitType::tileWidth(), BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
Referenced by UnitClass::accessibility(), ScoutDataClass::checkPositions(), and WorkerScoutTask::preUpdate().
{
for(int x = location.x(); x < location.x() + type.tileWidth(); ++x)
{
for(int y = location.y(); y < location.y() + type.tileHeight(); ++y)
{
if(BWAPI::Broodwar->isVisible(x, y))
return true;
}
}
return false;
}


| bool MapHelper::isTileWalkable | ( | TilePosition | location | ) |
Definition at line 193 of file MapHelper.cpp.
References BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
Referenced by BuildTilePath::isStillValid(), BuildingPlacerClass::isTileWalkable(), and FleeTileTest::operator()().
{
return isTileWalkable(location.x(), location.y());
}


| bool MapHelper::isTileWalkable | ( | int | x, |
| int | y | ||
| ) |
Definition at line 198 of file MapHelper.cpp.
References BWAPI::Broodwar.
{
for(int nx = x * 4; nx < x * 4 + 4; ++nx)
{
for(int ny = y * 4; ny < y * 4 + 4; ++ny)
{
if(!BWAPI::Broodwar->isWalkable(nx, ny))
return false;
}
}
return true;
}
| bool MapHelper::mapIs | ( | std::string | name | ) |
Definition at line 212 of file MapHelper.cpp.
References BWAPI::Broodwar, BWAPI::Game::mapFileName(), and BWAPI::Game::mapName().
Referenced by WallTrackerClass::onBegin(), and Condition::passesValue().
{
std::string mapName = BWAPI::Broodwar->mapName();
std::transform(mapName.begin(), mapName.end(), mapName.begin(), tolower);
std::string mapFileName = BWAPI::Broodwar->mapFileName();
std::transform(mapFileName.begin(), mapFileName.end(), mapFileName.begin(), tolower);
std::transform(name.begin(), name.end(), name.begin(), tolower);
return std::tr1::regex_search(mapName.begin(), mapName.end(), std::tr1::regex(name)) || std::tr1::regex_search(mapFileName.begin(), mapFileName.end(), std::tr1::regex(name));
}


| TilePosition MapHelper::spiralSearch | ( | TilePosition | startLocation, |
| std::tr1::function< bool(TilePosition)> | testFunction, | ||
| int | maxRadius = 0 |
||
| ) |
Definition at line 10 of file MapHelper.cpp.
References BWAPI::Broodwar, BWAPI::TilePositions::None, BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
Referenced by TerrainAnaysisClass::createBases(), TerrainAnaysisClass::finaliseConnectivity(), and BuildingPlacerClass::getBuildLocation().
{
int x = startLocation.x();
int y = startLocation.y();
int length = 1;
int j = 0;
bool first = true;
int dx = 0;
int dy = 1;
if(maxRadius == 0)
maxRadius = std::max(BWAPI::Broodwar->mapWidth(), BWAPI::Broodwar->mapHeight());
while(length < maxRadius)
{
if(x >= 0 && x < BWAPI::Broodwar->mapWidth() && y >= 0 && y < BWAPI::Broodwar->mapHeight())
{
TilePosition location(x, y);
if(testFunction(location))
return location;
}
x = x + dx;
y = y + dy;
//count how many steps we take in this direction
++j;
if(j == length) //if we've reached the end, its time to turn
{
//reset step counter
j = 0;
//Spiral out. Keep going.
if(!first)
++length; //increment step counter if needed
//first=true for every other turn so we spiral out at the right rate
first = !first;
//turn counter clockwise 90 degrees:
if (dx == 0)
{
dx = dy;
dy = 0;
}
else
{
dy = -dx;
dx = 0;
}
}
//Spiral out. Keep going.
}
return BWAPI::TilePositions::None;
}


| std::map< WalkPosition, int > MapHelper::walkSearch | ( | WalkPosition | start, |
| std::tr1::function< bool(WalkPosition)> | testFunction, | ||
| std::set< WalkPosition > | targets = std::set<WalkPosition>(), |
||
| std::set< WalkPosition > | ignoreTiles = std::set<WalkPosition>() |
||
| ) |
Definition at line 109 of file MapHelper.cpp.
References BWAPI::Broodwar, Heap< Key, Val >::empty(), BWAPI::Game::mapHeight(), BWAPI::Game::mapWidth(), Heap< Key, Val >::pop(), Heap< Key, Val >::push(), Heap< Key, Val >::set(), Heap< Key, Val >::top(), WalkPosition::x, and WalkPosition::y.
{
std::map<WalkPosition, int> returnDistances;
int mapWidth = BWAPI::Broodwar->mapWidth() * 4;
int mapHeight = BWAPI::Broodwar->mapHeight() * 4;
Heap<WalkPosition, int> openTiles(true);
std::map<WalkPosition, int> gmap;
std::set<WalkPosition> closedTiles;
openTiles.push(std::make_pair(start, 0));
gmap[start] = 0;
int maxhvalue = std::max(mapHeight, mapWidth);
while(!openTiles.empty())
{
WalkPosition p = openTiles.top().first;
int fvalue = openTiles.top().second;
int gvalue = gmap[p];
openTiles.pop();
closedTiles.insert(p);
returnDistances[p] = gvalue;
for(int i = 0; i < 4; ++i)
{
int x = i == 0 ? 1 : i == 1 ? -1 : 0;
int y = i == 2 ? 1 : i == 3 ? -1 : 0;
WalkPosition tile(p.x + x, p.y + y);
if(tile.x < 0 || tile.y < 0 || tile.x >= mapWidth || tile.y >= mapHeight)
continue;
if(closedTiles.find(tile) != closedTiles.end())
continue;
if(!testFunction(tile))
continue;
int g = gvalue + 1;
int f = g;
if(gmap.find(tile) == gmap.end() || gmap[tile] > g)
{
gmap[tile] = g;
openTiles.set(tile, f);
}
}
}
return returnDistances;
}

1.7.6.1