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