BWAPI
|
#include <WallTracker.h>
Public Member Functions | |
WallTrackerClass () | |
void | onBegin () |
TilePosition | getWallPosition (BWAPI::UnitType type) |
bool | canForgeExpand () |
std::map< TilePosition, BWAPI::UnitType > | getWallTiles () |
Private Attributes | |
std::map< BWAPI::UnitType, std::list< TilePosition > > | mWallPositions |
Definition at line 7 of file WallTracker.h.
WallTrackerClass::WallTrackerClass | ( | ) | [inline] |
Definition at line 10 of file WallTracker.h.
{}
bool WallTrackerClass::canForgeExpand | ( | ) |
Definition at line 237 of file WallTracker.cpp.
References mWallPositions.
{ return !mWallPositions.empty(); }
Definition at line 216 of file WallTracker.cpp.
References Singleton< T >::Instance(), mWallPositions, BWAPI::BulletTypes::None, BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
{ for each(TilePosition tile in mWallPositions[type]) { if(BuildingPlacer::Instance().isReserved(tile)) continue; int isUsed = false; for each(Unit unit in UnitTracker::Instance().getUnitsOnTile(tile.x(), tile.y())) { if(unit->getType().isBuilding()) isUsed = true; } if(!isUsed) return tile; } return BWAPI::TilePositions::None; }
std::map< TilePosition, BWAPI::UnitType > WallTrackerClass::getWallTiles | ( | ) |
Definition at line 242 of file WallTracker.cpp.
References mWallPositions, BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
{ std::map<TilePosition, BWAPI::UnitType> tiles; for each(std::pair<BWAPI::UnitType, std::list<TilePosition>> wallPair in mWallPositions) { for each(TilePosition tile in wallPair.second) { for(int x = tile.x(); x < tile.x()+wallPair.first.tileWidth(); ++x) for(int y = tile.y(); y < tile.y()+wallPair.first.tileHeight(); ++y) tiles[TilePosition(x, y)] = wallPair.first; } } return tiles; }
void WallTrackerClass::onBegin | ( | ) |
Definition at line 11 of file WallTracker.cpp.
References BWAPI::Broodwar, BWAPI::Races::getRace(), Singleton< T >::Instance(), LOGMESSAGE, MapHelper::mapIs(), mWallPositions, BWAPI::Races::Protoss, BWAPI::UnitTypes::Protoss_Forge, BWAPI::UnitTypes::Protoss_Gateway, BWAPI::UnitTypes::Protoss_Photon_Cannon, and BWAPI::UnitTypes::Protoss_Pylon.
{ if(BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Protoss) { if(MapHelper::mapIs("Python")) { LOGMESSAGE("Python Detected"); if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(83, 6))//12 o'clock { LOGMESSAGE("12 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(58, 12)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(57, 14)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(54, 11)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(51, 10)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(58, 10)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(116, 40))//3 o'clock { LOGMESSAGE("3 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(114, 62)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(111, 62)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(108, 59)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(117, 64)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(112, 60)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(42, 119))//6 o'clock { LOGMESSAGE("6 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(73, 117)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(66, 116)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(68, 113)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(69, 116)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(73, 119)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(8, 85))//9 o'clock { LOGMESSAGE("9 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(7, 63)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(12, 65)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(11, 62)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(9, 60)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(11, 59)); } else { LOGMESSAGE("Error 1"); } } else if(MapHelper::mapIs("Destination")) { LOGMESSAGE("Destination Detected"); if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(31, 7))//11 o'clock { LOGMESSAGE("11 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(60, 18)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(59, 22)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(56, 19)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(64, 17)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(60, 20)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(64, 118))//5 o'clock { LOGMESSAGE("5 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(35, 110)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(39, 110)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(36, 107)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(31, 110)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(37, 110)); } else { LOGMESSAGE("Error 1"); } } else if(MapHelper::mapIs("Heartbreak")) { LOGMESSAGE("Heartbreak Ridge Detected"); if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 56))//2 o'clock { LOGMESSAGE("2 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(108, 29)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(104, 27)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(106, 24)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(108, 31)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(107, 27)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 37))//8 o'clock { LOGMESSAGE("8 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(18, 66)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(18, 70)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(20, 67)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(18, 64)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(18, 68)); } else { LOGMESSAGE("Error 1"); } } else if(MapHelper::mapIs("Tau")) { LOGMESSAGE("Tau Cross Detected"); if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 9))//2 o'clock { LOGMESSAGE("2 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(102, 43)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(104, 44)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(108, 43)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(105, 42)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(108, 41)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(93, 118))//5 o'clock { LOGMESSAGE("5 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(55, 108)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(50, 108)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(52, 105)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(53, 108)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(55, 110)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 44))//10 o'clock { LOGMESSAGE("10 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(24, 15)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(26, 19)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(26, 16)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(24, 17)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 15)); } else { LOGMESSAGE("Error 1"); } } else if(MapHelper::mapIs("Andromeda")) { LOGMESSAGE("Andromeda Detected"); if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 7))//1 o'clock { LOGMESSAGE("1 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(98, 28)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(103, 31)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(100, 28)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(104, 29)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(103, 24)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 119))//5 o'clock { LOGMESSAGE("5 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(99, 100)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(101, 99)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(102, 96)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(104, 99)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(104, 103)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 118))//7 o'clock { LOGMESSAGE("7 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(27, 100)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(24, 99)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(22, 96)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 99)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 103)); } else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 6))//11 o'clock { LOGMESSAGE("11 o'clock"); mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(28, 28)); mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(22, 31)); mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(24, 28)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 29)); mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(23, 24)); } else { LOGMESSAGE("Error 1"); } } else { LOGMESSAGE("Error 2"); } if(!mWallPositions.empty()) { bool oneHasFailed = false; for(std::map<BWAPI::UnitType, std::list<TilePosition>>::iterator it = mWallPositions.begin(); it != mWallPositions.end(); ++it) { for(std::list<TilePosition>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) { if(!BuildingPlacer::Instance().isTileBuildable(*it2, it->first, true)) oneHasFailed = true; } } if(oneHasFailed) { LOGMESSAGE("Error 3"); mWallPositions.clear(); } } } }
std::map<BWAPI::UnitType, std::list<TilePosition> > WallTrackerClass::mWallPositions [private] |
Definition at line 20 of file WallTracker.h.
Referenced by canForgeExpand(), getWallPosition(), getWallTiles(), and onBegin().