BWAPI
Public Member Functions | Private Member Functions | Private Attributes
PylonPowerTrackerClass Class Reference

#include <PylonPowerTracker.h>

Collaboration diagram for PylonPowerTrackerClass:
Collaboration graph
[legend]

List of all members.

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

Detailed Description

Definition at line 8 of file PylonPowerTracker.h.


Constructor & Destructor Documentation

Definition at line 11 of file PylonPowerTracker.h.

{}

Member Function Documentation

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

Here is the call graph for this function:

Here is the caller graph for this function:

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

Here is the call graph for this function:

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

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 28 of file PylonPowerTracker.cpp.

References onRemovePylon().

{
        onRemovePylon(unit);
}

Here is the call graph for this function:

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

Here is the call graph for this function:

void PylonPowerTrackerClass::onMorphRenegade ( Unit  unit,
Player  previousPlayer,
BWAPI::UnitType  previousType 
)

Definition at line 23 of file PylonPowerTracker.cpp.

References onRemovePylon().

{
        onRemovePylon(unit);
}

Here is the call graph for this function:

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

Here is the call graph for this function:

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the call graph for this function:


Member Data Documentation

Definition at line 32 of file PylonPowerTracker.h.

Referenced by addToPowerField(), hasPower(), and removeFromPowerField().

Definition at line 24 of file PylonPowerTracker.h.

Definition at line 31 of file PylonPowerTracker.h.

Referenced by addToPowerField(), hasPower(), and removeFromPowerField().

Definition at line 28 of file PylonPowerTracker.h.

Referenced by addToPowerField(), and removeFromPowerField().

Definition at line 27 of file PylonPowerTracker.h.

Referenced by addToPowerField(), and removeFromPowerField().

Definition at line 22 of file PylonPowerTracker.h.

Referenced by onAddPylon(), onRemovePylon(), and update().

Definition at line 26 of file PylonPowerTracker.h.

Referenced by addToPowerField(), removeFromPowerField(), and update().

Definition at line 30 of file PylonPowerTracker.h.

Referenced by addToPowerField(), hasPower(), and removeFromPowerField().


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