BWAPI
Public Member Functions | Private Attributes
AOEThreatTrackerClass Class Reference

#include <AOEThreatTracker.h>

List of all members.

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< AOEThreatmAllThreats
std::map< Unit, AOEThreatmUnitThreats
std::map< BWAPI::Bullet
*, AOEThreat
mBulletThreats

Detailed Description

Definition at line 8 of file AOEThreatTracker.h.


Member Function Documentation

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;
}

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;
}

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;
}

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;
}

Definition at line 120 of file AOEThreatTracker.cpp.

References mAllThreats.

{
        for each(AOEThreat threat in mAllThreats)
        {
                if(threat->getTarget() == unit)
                        return true;
        }

        return false;
}

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;
                }
        }
}

Here is the call graph for this function:


Member Data Documentation

Definition at line 23 of file AOEThreatTracker.h.

Referenced by update().

Definition at line 22 of file AOEThreatTracker.h.

Referenced by update().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines