BWAPI
|
#include <PylonPowerTracker.h>
Public Member Functions | |
PylonPowerTrackerClass () | |
void | update () |
void | onDiscover (Unit unit) |
void | onMorphRenegade (Unit unit, Player previousPlayer, BWAPI::UnitType previousType) |
void | onDestroy (Unit unit) |
bool | hasPower (TilePosition tile, BWAPI::UnitType unit) |
Private Member Functions | |
void | onAddPylon (Unit unit) |
void | onRemovePylon (Unit unit) |
void | addToPowerField (Unit unit) |
void | removeFromPowerField (Unit unit) |
Private Attributes | |
UnitGroup | mPylons |
UnitGroup | mLiftedBuildings |
std::map< Unit, std::set < TilePosition > > | mPylonSmallPowerSites |
std::map< Unit, std::set < TilePosition > > | mPylonMediumPowerSites |
std::map< Unit, std::set < TilePosition > > | mPylonLargePowerSites |
std::map< TilePosition, int > | mSmallPowerSites |
std::map< TilePosition, int > | mMediumPowerSites |
std::map< TilePosition, int > | mLargePowerSites |
Definition at line 8 of file PylonPowerTracker.h.
PylonPowerTrackerClass::PylonPowerTrackerClass | ( | ) | [inline] |
Definition at line 11 of file PylonPowerTracker.h.
{}
void PylonPowerTrackerClass::addToPowerField | ( | Unit | unit | ) | [private] |
Definition at line 54 of file PylonPowerTracker.cpp.
References mLargePowerSites, mMediumPowerSites, mPylonLargePowerSites, mPylonMediumPowerSites, mPylonSmallPowerSites, mSmallPowerSites, BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().
Referenced by onAddPylon(), and update().
{ const TilePosition &pylonTile = unit->getTilePosition(); for(int x = 0; x <= 15; ++x) { for(int y = 0; y <= 9; ++y) { bool inRangeSmall = false; bool inRangeMedium = false; bool inRangeLarge = false; switch(y) { case 0: if(x >= 4 && x <= 9) inRangeLarge = true; break; case 1: case 8: if(x >= 2 && x <= 13) { inRangeSmall = true; inRangeMedium = true; } if(x >= 1 && x <= 12) inRangeLarge = true; break; case 2: case 7: if(x >= 1 && x <= 14) { inRangeSmall = true; inRangeMedium = true; } if(x <= 13) inRangeLarge = true; break; case 3: case 4: case 5: case 6: if(x >= 1) inRangeSmall = true; inRangeMedium = true; if(x <= 14) inRangeLarge = true; break; case 9: if(x >= 5 && x <= 10) { inRangeSmall = true; inRangeMedium = true; } if(x >= 4 && x <= 9) inRangeLarge = true; break; } const TilePosition tile(pylonTile.x() + x - 8, pylonTile.y() + y - 5); if(inRangeSmall) { mSmallPowerSites[tile]++; mPylonSmallPowerSites[unit].insert(tile); } if(inRangeMedium) { mMediumPowerSites[tile]++; mPylonMediumPowerSites[unit].insert(tile); } if(inRangeLarge) { mLargePowerSites[tile]++; mPylonLargePowerSites[unit].insert(tile); } } } }
bool PylonPowerTrackerClass::hasPower | ( | TilePosition | tile, |
BWAPI::UnitType | unit | ||
) |
Definition at line 168 of file PylonPowerTracker.cpp.
References mLargePowerSites, mMediumPowerSites, mSmallPowerSites, BWAPI::UnitType::tileHeight(), and BWAPI::UnitType::tileWidth().
{ if(unit.tileHeight() == 2 && unit.tileWidth() == 2) return mSmallPowerSites.count(tile) != 0; else if(unit.tileHeight() == 2 && unit.tileWidth() == 3) return mMediumPowerSites.count(tile) != 0; else if(unit.tileHeight() == 3 && unit.tileWidth() == 4) return mLargePowerSites.count(tile) != 0; return false; }
void PylonPowerTrackerClass::onAddPylon | ( | Unit | unit | ) | [private] |
Definition at line 33 of file PylonPowerTracker.cpp.
References addToPowerField(), UnitGroup::count(), UnitGroup::insert(), and mPylons.
Referenced by onDiscover().
{ if(mPylons.count(unit) != 0) return; mPylons.insert(unit); if(unit->isCompleted()) addToPowerField(unit); }
void PylonPowerTrackerClass::onDestroy | ( | Unit | unit | ) |
Definition at line 28 of file PylonPowerTracker.cpp.
References onRemovePylon().
{ onRemovePylon(unit); }
void PylonPowerTrackerClass::onDiscover | ( | Unit | unit | ) |
Definition at line 17 of file PylonPowerTracker.cpp.
References BWAPI::Broodwar, BWAPI::Player::getType(), onAddPylon(), BWAPI::UnitTypes::Protoss_Pylon, and BWAPI::Game::self().
{ if(unit->getPlayer() == BWAPI::Broodwar->self() && unit->getType() == BWAPI::UnitTypes::Protoss_Pylon) onAddPylon(unit); }
void PylonPowerTrackerClass::onMorphRenegade | ( | Unit | unit, |
Player | previousPlayer, | ||
BWAPI::UnitType | previousType | ||
) |
Definition at line 23 of file PylonPowerTracker.cpp.
References onRemovePylon().
{ onRemovePylon(unit); }
void PylonPowerTrackerClass::onRemovePylon | ( | Unit | unit | ) | [private] |
Definition at line 44 of file PylonPowerTracker.cpp.
References UnitGroup::count(), UnitGroup::erase(), mPylons, and removeFromPowerField().
Referenced by onDestroy(), and onMorphRenegade().
{ if(mPylons.count(unit) == 0) return; mPylons.erase(unit); removeFromPowerField(unit); }
void PylonPowerTrackerClass::removeFromPowerField | ( | Unit | unit | ) | [private] |
Definition at line 135 of file PylonPowerTracker.cpp.
References mLargePowerSites, mMediumPowerSites, mPylonLargePowerSites, mPylonMediumPowerSites, mPylonSmallPowerSites, and mSmallPowerSites.
Referenced by onRemovePylon().
{ for each(TilePosition tile in mPylonSmallPowerSites[unit]) { std::map<TilePosition, int>::iterator it = mSmallPowerSites.find(tile); --it->second; if(it->second == 0) mSmallPowerSites.erase(it); } mPylonSmallPowerSites.erase(unit); for each(TilePosition tile in mPylonMediumPowerSites[unit]) { std::map<TilePosition, int>::iterator it = mMediumPowerSites.find(tile); --it->second; if(it->second == 0) mMediumPowerSites.erase(it); } mPylonMediumPowerSites.erase(unit); for each(TilePosition tile in mPylonLargePowerSites[unit]) { std::map<TilePosition, int>::iterator it = mLargePowerSites.find(tile); --it->second; if(it->second == 0) mLargePowerSites.erase(it); } mPylonLargePowerSites.erase(unit); }
void PylonPowerTrackerClass::update | ( | ) |
Definition at line 5 of file PylonPowerTracker.cpp.
References addToPowerField(), UnitGroup::empty(), mPylons, and mPylonSmallPowerSites.
{ if(mPylons.empty()) return; for each(Unit pylon in mPylons) { if(pylon->isCompleted() && mPylonSmallPowerSites.count(pylon) == 0) addToPowerField(pylon); } }
std::map<TilePosition, int> PylonPowerTrackerClass::mLargePowerSites [private] |
Definition at line 32 of file PylonPowerTracker.h.
Referenced by addToPowerField(), hasPower(), and removeFromPowerField().
Definition at line 24 of file PylonPowerTracker.h.
std::map<TilePosition, int> PylonPowerTrackerClass::mMediumPowerSites [private] |
Definition at line 31 of file PylonPowerTracker.h.
Referenced by addToPowerField(), hasPower(), and removeFromPowerField().
std::map<Unit, std::set<TilePosition> > PylonPowerTrackerClass::mPylonLargePowerSites [private] |
Definition at line 28 of file PylonPowerTracker.h.
Referenced by addToPowerField(), and removeFromPowerField().
std::map<Unit, std::set<TilePosition> > PylonPowerTrackerClass::mPylonMediumPowerSites [private] |
Definition at line 27 of file PylonPowerTracker.h.
Referenced by addToPowerField(), and removeFromPowerField().
UnitGroup PylonPowerTrackerClass::mPylons [private] |
Definition at line 22 of file PylonPowerTracker.h.
Referenced by onAddPylon(), onRemovePylon(), and update().
std::map<Unit, std::set<TilePosition> > PylonPowerTrackerClass::mPylonSmallPowerSites [private] |
Definition at line 26 of file PylonPowerTracker.h.
Referenced by addToPowerField(), removeFromPowerField(), and update().
std::map<TilePosition, int> PylonPowerTrackerClass::mSmallPowerSites [private] |
Definition at line 30 of file PylonPowerTracker.h.
Referenced by addToPowerField(), hasPower(), and removeFromPowerField().