|
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().
1.7.6.1