|
BWAPI
|
#include <EnhancedSide.h>

Public Types | |
| enum | Orientation { left, top, right, bottom } |
Public Member Functions | |
| EnhancedSide (pair< BWAPI::Position, BWAPI::Position > endPoints, Orientation orientation) | |
| ~EnhancedSide (void) | |
| pair< BWAPI::Position, BWAPI::Position > | getEndPoints (void) |
| vector< BWAPI::TilePosition > | getTilePositions (void) |
| Orientation | getOrientation (void) |
| bool | isHorizontal (void) |
| int | checkCoverage (EnhancedSide coveringSide, vector< EnhancedSide > *sidesNotCovered) |
| int | checkGap (void) |
| void | drawSide (BWAPI::Color color) |
| void | drawTiles (BWAPI::Color color) |
Private Attributes | |
| Orientation | orientation |
| pair< BWAPI::Position, BWAPI::Position > | endPoints |
| pair< BWAPI::TilePosition, BWAPI::TilePosition > | endTilePositions |
| vector< BWAPI::TilePosition > | tilePositions |
| bool | horizontal |
Definition at line 15 of file EnhancedSide.h.
| EnhancedSide::EnhancedSide | ( | pair< BWAPI::Position, BWAPI::Position > | endPoints, |
| Orientation | orientation | ||
| ) |
Definition at line 15 of file EnhancedSide.cpp.
References bottom, endPoints, endTilePositions, horizontal, orientation, right, tilePositions, and top.
Referenced by checkCoverage().
{
bool xMatch, yMatch;
bool down, right;
BWAPI::TilePosition * startTile, * endTile;
BWAPI::TilePosition currTile;
down = right = false;
xMatch = (endPoints.first.x() == endPoints.second.x());
yMatch = (endPoints.first.y() == endPoints.second.y());
/* ensure points share an x or y value */
assert( xMatch || yMatch );
/* set our endPoints */
this->endPoints = endPoints;
this->orientation = orientation;
if (orientation == top || orientation == bottom) {
horizontal = true;
}
else {
horizontal = false;
}
/* get the end point tile positions */
endTilePositions.first = BWAPI::TilePosition(endPoints.first);
endTilePositions.second = BWAPI::TilePosition(endPoints.second);
/* check to see if same tile, this is OK */
if (endTilePositions.first == endTilePositions.second) {
tilePositions.push_back(endTilePositions.first);
/* nothing else to do */
return;
}
/* establish the start tile position and move down or right */
if (yMatch) { // move on x
right = true;
if (endTilePositions.first.x() < endTilePositions.second.x()) {
startTile = &endTilePositions.first;
endTile = &endTilePositions.second;
}
else {
startTile = &endTilePositions.second;
endTile = &endTilePositions.first;
}
}
else { // move on y
down = true;
if (endTilePositions.first.y() < endTilePositions.second.y()) {
startTile = &endTilePositions.first;
endTile = &endTilePositions.second;
}
else {
startTile = &endTilePositions.second;
endTile = &endTilePositions.first;
}
}
/* add tiles in order */
tilePositions.push_back(*startTile);
currTile = *startTile;
while (currTile != *endTile) {
if (right) {
currTile.x() += 1;
}
else {
currTile.y() += 1;
}
tilePositions.push_back(currTile);
}
/* endTile will already be added, don't add again! */
}

| EnhancedSide::~EnhancedSide | ( | void | ) |
Definition at line 98 of file EnhancedSide.cpp.
{
}
| int EnhancedSide::checkCoverage | ( | EnhancedSide | coveringSide, |
| vector< EnhancedSide > * | sidesNotCovered | ||
| ) |
Definition at line 121 of file EnhancedSide.cpp.
References endPoints, EnhancedSide(), horizontal, and orientation.
Referenced by TacticalBuildingPlacer::chokepointBuildPatternSearch().
{
int lengthNotCovered = 0;
int xLeft, xRight, xCovLeft, xCovRight;
int yTop, yBottom, yCovTop, yCovBottom;
int diff;
pair<BWAPI::Position, BWAPI::Position> newEndPoints;
bool getSides;
// must be parallel
if (coveringSide.horizontal != horizontal) {
return -1;
}
getSides = true;
if (sidesNotCovered == NULL) {
getSides = false;
}
xLeft = endPoints.first.x();
xRight = endPoints.second.x();
xCovLeft = coveringSide.endPoints.first.x();
xCovRight = coveringSide.endPoints.second.x();
yTop = endPoints.first.y();
yBottom = endPoints.second.y();
yCovTop = coveringSide.endPoints.first.y();
yCovBottom = coveringSide.endPoints.second.x();
// if horizontal compare x
if (horizontal) {
// check left end
if (xCovLeft > xLeft) {
diff = xCovLeft - xLeft;
lengthNotCovered += diff;
if (getSides) {
newEndPoints.first.x() = xLeft;
newEndPoints.second.x() = xCovLeft;
// use y val and orientation of the side trying to cover
newEndPoints.first.y() = yTop;
newEndPoints.second.y() = yTop;
sidesNotCovered->push_back(EnhancedSide(newEndPoints, orientation));
}
}
// check right end
if (xCovRight < xRight) {
diff = xRight - xCovRight;
lengthNotCovered += diff;
if (getSides) {
newEndPoints.first.x() = xCovRight;
newEndPoints.second.x() = xRight;
// use y val and orientation of the side trying to cover
newEndPoints.first.y() = yTop;
newEndPoints.second.y() = yTop;
sidesNotCovered->push_back(EnhancedSide(newEndPoints, orientation));
}
}
}
// if vertical compare y
else {
// check top end
if (yCovTop > yTop) {
diff = yCovTop - yTop;
lengthNotCovered += diff;
if (getSides) {
newEndPoints.first.y() = yTop;
newEndPoints.second.y() = yCovTop;
// use x val and orientation of the side trying to cover
newEndPoints.first.x() = xLeft;
newEndPoints.second.x() = xLeft;
sidesNotCovered->push_back(EnhancedSide(newEndPoints, orientation));
}
}
// check bottom end
if (yCovBottom < yBottom) {
diff = yBottom - yCovBottom;
lengthNotCovered += diff;
if (getSides) {
newEndPoints.first.y() = yCovBottom;
newEndPoints.second.y() = yBottom;
// use x val and orientation of the side trying to cover
newEndPoints.first.x() = xLeft;
newEndPoints.second.x() = xLeft;
sidesNotCovered->push_back(EnhancedSide(newEndPoints, orientation));
}
}
}
return lengthNotCovered;
}


| int EnhancedSide::checkGap | ( | void | ) |
Definition at line 223 of file EnhancedSide.cpp.
References bottom, BWAPI::Broodwar, getTilePositions(), left, orientation, right, and top.
Referenced by TacticalBuildingPlacer::chokepointBuildPatternSearch().
{
vector<BWAPI::TilePosition> tiles = this->getTilePositions();
BWAPI::TilePosition currentTile;
int tileLength = (int)tiles.size();
int xDir, yDir;
int currentNumTiles;
int minNumTiles = 0;
bool unbuildableTileNotFound;
// get xDir and yDir based on orientation
if (orientation == EnhancedSide::left) {
xDir = -1;
yDir = 0;
}
else if (orientation == EnhancedSide::top) {
xDir = 0;
yDir = -1;
}
else if (orientation == EnhancedSide::right) {
xDir = +1;
yDir = 0;
}
else if (orientation == EnhancedSide::bottom) {
xDir = 0;
yDir = +1;
}
for (int m = 0; m < tileLength; ++m) {
currentTile = tiles[m];
// reset
unbuildableTileNotFound = true;
currentNumTiles = 0;
while (unbuildableTileNotFound) {
// increment
currentTile.x() += xDir;
currentTile.y() += yDir;
// check tile
if (BWAPI::Broodwar->isBuildable(currentTile, true)) {
// add to this rounds gap
currentNumTiles++;
}
else {
// found the wall
unbuildableTileNotFound = false;
break;
}
}
// check for minimum
if (m == 0) {
minNumTiles = currentNumTiles;
}
else if (currentNumTiles < minNumTiles) {
minNumTiles = currentNumTiles;
}
}
return minNumTiles;
}


| void EnhancedSide::drawSide | ( | BWAPI::Color | color | ) |
Definition at line 286 of file EnhancedSide.cpp.
References BWAPI::Broodwar, and endPoints.
{
BWAPI::Broodwar->drawLineMap(endPoints.first.x(), endPoints.first.y(),
endPoints.second.x(), endPoints.second.y(), color);
}
| void EnhancedSide::drawTiles | ( | BWAPI::Color | color | ) |
Definition at line 292 of file EnhancedSide.cpp.
References EnhancedUI::drawTilePosition(), and tilePositions.
{
EnhancedUI * eui = new EnhancedUI();
for (int m = 0; m < (int) tilePositions.size(); ++m) {
eui->drawTilePosition(tilePositions[m], color);
}
delete(eui);
}
| pair< BWAPI::Position, BWAPI::Position > EnhancedSide::getEndPoints | ( | void | ) |
Definition at line 110 of file EnhancedSide.cpp.
References orientation.
Referenced by TacticalBuildingPlacer::chokepointBuildPatternSearch().
{
return orientation;
}

| vector< BWAPI::TilePosition > EnhancedSide::getTilePositions | ( | void | ) |
Definition at line 106 of file EnhancedSide.cpp.
References tilePositions.
Referenced by checkGap().
{
return tilePositions;
}

| bool EnhancedSide::isHorizontal | ( | void | ) |
Definition at line 114 of file EnhancedSide.cpp.
References horizontal.
Referenced by TacticalBuildingPlacer::chokepointBuildPatternSearch().
{
return horizontal;
}

pair<BWAPI::Position, BWAPI::Position> EnhancedSide::endPoints [private] |
Definition at line 36 of file EnhancedSide.h.
Referenced by checkCoverage(), drawSide(), EnhancedSide(), and getEndPoints().
pair<BWAPI::TilePosition, BWAPI::TilePosition> EnhancedSide::endTilePositions [private] |
Definition at line 37 of file EnhancedSide.h.
Referenced by EnhancedSide().
bool EnhancedSide::horizontal [private] |
Definition at line 40 of file EnhancedSide.h.
Referenced by checkCoverage(), EnhancedSide(), and isHorizontal().
Orientation EnhancedSide::orientation [private] |
Definition at line 35 of file EnhancedSide.h.
Referenced by checkCoverage(), checkGap(), EnhancedSide(), and getOrientation().
vector<BWAPI::TilePosition> EnhancedSide::tilePositions [private] |
Definition at line 38 of file EnhancedSide.h.
Referenced by drawTiles(), EnhancedSide(), and getTilePositions().
1.7.6.1