|
BWAPI
|
#include <AOEThreatTracker.h>
Public Member Functions | |
| void | update () |
| AOEThreat | getClosestGroundThreat (const Position &pos) const |
| AOEThreat | getClosestAirThreat (const Position &pos) const |
| AOEThreat | getClosestEnergyThreat (const Position &pos) const |
| AOEThreat | getClosestThreat (Unit unit) const |
| bool | isTargetOfThreat (Unit unit) const |
Private Attributes | |
| std::set< AOEThreat > | mAllThreats |
| std::map< Unit, AOEThreat > | mUnitThreats |
| std::map< BWAPI::Bullet *, AOEThreat > | mBulletThreats |
Definition at line 8 of file AOEThreatTracker.h.
| AOEThreat AOEThreatTrackerClass::getClosestAirThreat | ( | const Position & | pos | ) | const |
Definition at line 78 of file AOEThreatTracker.cpp.
References mAllThreats.
{
int closestDistance = std::numeric_limits<int>::max();
AOEThreat closestThreat;
for each(AOEThreat threat in mAllThreats)
{
if(!threat->isAirThreat())
continue;
int distance = pos.getApproxDistance(threat->getPosition()) - threat->getRadius();
if(distance < closestDistance)
{
closestDistance = distance;
closestThreat = threat;
}
}
return closestThreat;
}
| AOEThreat AOEThreatTrackerClass::getClosestEnergyThreat | ( | const Position & | pos | ) | const |
Definition at line 99 of file AOEThreatTracker.cpp.
References mAllThreats.
{
int closestDistance = std::numeric_limits<int>::max();
AOEThreat closestThreat;
for each(AOEThreat threat in mAllThreats)
{
if(!threat->isEnergyThreat())
continue;
int distance = pos.getApproxDistance(threat->getPosition()) - threat->getRadius();
if(distance < closestDistance)
{
closestDistance = distance;
closestThreat = threat;
}
}
return closestThreat;
}
| AOEThreat AOEThreatTrackerClass::getClosestGroundThreat | ( | const Position & | pos | ) | const |
Definition at line 56 of file AOEThreatTracker.cpp.
References mAllThreats.
{
int closestDistance = std::numeric_limits<int>::max();
AOEThreat closestThreat;
for each(AOEThreat threat in mAllThreats)
{
if(!threat->isGroundThreat())
continue;
int distance = pos.getApproxDistance(threat->getPosition()) - threat->getRadius();
if(distance < closestDistance)
{
closestDistance = distance;
closestThreat = threat;
}
}
return closestThreat;
}
| AOEThreat AOEThreatTrackerClass::getClosestThreat | ( | Unit | unit | ) | const |
Definition at line 131 of file AOEThreatTracker.cpp.
References mAllThreats.
{
const bool isInAir = unit->getType().isFlyer() || unit->isLifted();
const bool usesEnergy = unit->getType().maxEnergy() > 0;
int closestDistance = std::numeric_limits<int>::max();
AOEThreat closestThreat;
for each(AOEThreat threat in mAllThreats)
{
if(threat->isEnergyThreat())
{
if(!usesEnergy)
continue;
}
else if(threat->isAirThreat())
{
if(!isInAir)
continue;
}
else if(threat->isGroundThreat())
{
if(isInAir)
continue;
}
const int distance = unit->getDistance(threat->getPosition()) - threat->getRadius();
if(distance < closestDistance)
{
closestDistance = distance;
closestThreat = threat;
}
}
return closestThreat;
}| bool AOEThreatTrackerClass::isTargetOfThreat | ( | Unit | unit | ) | const |
Definition at line 120 of file AOEThreatTracker.cpp.
References mAllThreats.
{
for each(AOEThreat threat in mAllThreats)
{
if(threat->getTarget() == unit)
return true;
}
return false;
}
| void AOEThreatTrackerClass::update | ( | ) |
Definition at line 7 of file AOEThreatTracker.cpp.
References BWAPI::Broodwar, BWAPI::BulletTypes::EMP_Missile, BWAPI::Bullet::getType(), Singleton< T >::Instance(), mAllThreats, mBulletThreats, mUnitThreats, BWAPI::UnitTypes::Protoss_Scarab, BWAPI::BulletTypes::Psionic_Storm, and BWAPI::UnitTypes::Terran_Vulture_Spider_Mine.
{
for(std::map<Unit, AOEThreat>::iterator it = mUnitThreats.begin(); it != mUnitThreats.end();)
{
if(it->second->hasGone())
mUnitThreats.erase(it++);
else
++it;
}
for(std::map<BWAPI::Bullet*, AOEThreat>::iterator it = mBulletThreats.begin(); it != mBulletThreats.end();)
{
if(it->second->hasGone())
mBulletThreats.erase(it++);
else
++it;
}
for(std::set<AOEThreat>::iterator it = mAllThreats.begin(); it != mAllThreats.end();)
{
if((*it)->hasGone())
mAllThreats.erase(it++);
else
++it;
}
for each(Unit unit in UnitTracker::Instance().selectAllEnemy())
{
const BWAPI::UnitType &type = unit->getType();
if((type == BWAPI::UnitTypes::Protoss_Scarab || type == BWAPI::UnitTypes::Terran_Vulture_Spider_Mine) && mUnitThreats.count(unit) == 0)
{
AOEThreat newThreat = AOEThreat(new AOEThreatClass(unit));
mAllThreats.insert(newThreat);
mUnitThreats[unit] = newThreat;
}
}
for each(BWAPI::Bullet* bullet in BWAPI::Broodwar->getBullets())
{
const BWAPI::BulletType &type = bullet->getType();
if((type == BWAPI::BulletTypes::Psionic_Storm || type == BWAPI::BulletTypes::EMP_Missile) && mBulletThreats.count(bullet) == 0)
{
AOEThreat newThreat = AOEThreat(new AOEThreatClass(bullet));
mAllThreats.insert(newThreat);
mBulletThreats[bullet] = newThreat;
}
}
}
std::set<AOEThreat> AOEThreatTrackerClass::mAllThreats [private] |
Definition at line 21 of file AOEThreatTracker.h.
Referenced by getClosestAirThreat(), getClosestEnergyThreat(), getClosestGroundThreat(), getClosestThreat(), isTargetOfThreat(), and update().
std::map<BWAPI::Bullet*, AOEThreat> AOEThreatTrackerClass::mBulletThreats [private] |
Definition at line 23 of file AOEThreatTracker.h.
Referenced by update().
std::map<Unit, AOEThreat> AOEThreatTrackerClass::mUnitThreats [private] |
Definition at line 22 of file AOEThreatTracker.h.
Referenced by update().
1.7.6.1