BWAPI
Public Member Functions | Private Attributes
WallTrackerClass Class Reference

#include <WallTracker.h>

List of all members.

Public Member Functions

 WallTrackerClass ()
void onBegin ()
TilePosition getWallPosition (BWAPI::UnitType type)
bool canForgeExpand ()
std::map< TilePosition,
BWAPI::UnitType
getWallTiles ()

Private Attributes

std::map< BWAPI::UnitType,
std::list< TilePosition > > 
mWallPositions

Detailed Description

Definition at line 7 of file WallTracker.h.


Constructor & Destructor Documentation

Definition at line 10 of file WallTracker.h.

{}

Member Function Documentation

Definition at line 237 of file WallTracker.cpp.

References mWallPositions.

{
        return !mWallPositions.empty();
}

Definition at line 216 of file WallTracker.cpp.

References Singleton< T >::Instance(), mWallPositions, BWAPI::BulletTypes::None, BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().

{
        for each(TilePosition tile in mWallPositions[type])
        {
                if(BuildingPlacer::Instance().isReserved(tile))
                        continue;

                int isUsed = false;
                for each(Unit unit in UnitTracker::Instance().getUnitsOnTile(tile.x(), tile.y()))
                {
                        if(unit->getType().isBuilding())
                                isUsed = true;
                }

                if(!isUsed)
                        return tile;
        }

        return BWAPI::TilePositions::None;
}

Here is the call graph for this function:

Definition at line 242 of file WallTracker.cpp.

References mWallPositions, BWAPI::TilePosition::x(), and BWAPI::TilePosition::y().

{
        std::map<TilePosition, BWAPI::UnitType> tiles;

        for each(std::pair<BWAPI::UnitType, std::list<TilePosition>> wallPair in mWallPositions)
        {
                for each(TilePosition tile in wallPair.second)
                {
                        for(int x = tile.x(); x < tile.x()+wallPair.first.tileWidth(); ++x)
                                for(int y = tile.y(); y < tile.y()+wallPair.first.tileHeight(); ++y)
                                        tiles[TilePosition(x, y)] = wallPair.first;
                }
        }

        return tiles;
}

Here is the call graph for this function:

Definition at line 11 of file WallTracker.cpp.

References BWAPI::Broodwar, BWAPI::Races::getRace(), Singleton< T >::Instance(), LOGMESSAGE, MapHelper::mapIs(), mWallPositions, BWAPI::Races::Protoss, BWAPI::UnitTypes::Protoss_Forge, BWAPI::UnitTypes::Protoss_Gateway, BWAPI::UnitTypes::Protoss_Photon_Cannon, and BWAPI::UnitTypes::Protoss_Pylon.

{
        if(BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Protoss)
        {
                if(MapHelper::mapIs("Python"))
                {
                        LOGMESSAGE("Python Detected");
                        if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(83, 6))//12 o'clock
                        {
                                LOGMESSAGE("12 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(58, 12));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(57, 14));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(54, 11));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(51, 10));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(58, 10));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(116, 40))//3 o'clock
                        {
                                LOGMESSAGE("3 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(114, 62));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(111, 62));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(108, 59));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(117, 64));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(112, 60));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(42, 119))//6 o'clock
                        {
                                LOGMESSAGE("6 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(73, 117));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(66, 116));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(68, 113));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(69, 116));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(73, 119));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(8, 85))//9 o'clock
                        {
                                LOGMESSAGE("9 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(7, 63));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(12, 65));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(11, 62));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(9, 60));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(11, 59));
                        }
                        else
                        {
                                LOGMESSAGE("Error 1");
                        }
                }
                else if(MapHelper::mapIs("Destination"))
                {
                        LOGMESSAGE("Destination Detected");
                        if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(31, 7))//11 o'clock
                        {
                                LOGMESSAGE("11 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(60, 18));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(59, 22));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(56, 19));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(64, 17));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(60, 20));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(64, 118))//5 o'clock
                        {
                                LOGMESSAGE("5 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(35, 110));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(39, 110));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(36, 107));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(31, 110));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(37, 110));
                        }
                        else
                        {
                                LOGMESSAGE("Error 1");
                        }
                }
                else if(MapHelper::mapIs("Heartbreak"))
                {
                        LOGMESSAGE("Heartbreak Ridge Detected");
                        if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 56))//2 o'clock
                        {
                                LOGMESSAGE("2 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(108, 29));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(104, 27));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(106, 24));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(108, 31));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(107, 27));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 37))//8 o'clock
                        {
                                LOGMESSAGE("8 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(18, 66));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(18, 70));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(20, 67));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(18, 64));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(18, 68));
                        }
                        else
                        {
                                LOGMESSAGE("Error 1");
                        }
                }
                else if(MapHelper::mapIs("Tau"))
                {
                        LOGMESSAGE("Tau Cross Detected");
                        if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 9))//2 o'clock
                        {
                                LOGMESSAGE("2 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(102, 43));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(104, 44));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(108, 43));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(105, 42));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(108, 41));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(93, 118))//5 o'clock
                        {
                                LOGMESSAGE("5 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(55, 108));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(50, 108));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(52, 105));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(53, 108));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(55, 110));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 44))//10 o'clock
                        {
                                LOGMESSAGE("10 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(24, 15));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(26, 19));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(26, 16));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(24, 17));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 15));
                        }
                        else
                        {
                                LOGMESSAGE("Error 1");
                        }
                }
                else if(MapHelper::mapIs("Andromeda"))
                {
                        LOGMESSAGE("Andromeda Detected");
                        if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 7))//1 o'clock
                        {
                                LOGMESSAGE("1 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(98, 28));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(103, 31));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(100, 28));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(104, 29));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(103, 24));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(117, 119))//5 o'clock
                        {
                                LOGMESSAGE("5 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(99, 100));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(101, 99));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(102, 96));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(104, 99));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(104, 103));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 118))//7 o'clock
                        {
                                LOGMESSAGE("7 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(27, 100));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(24, 99));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(22, 96));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 99));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 103));
                        }
                        else if(BWAPI::Broodwar->self()->getStartLocation() == TilePosition(7, 6))//11 o'clock
                        {
                                LOGMESSAGE("11 o'clock");
                                mWallPositions[BWAPI::UnitTypes::Protoss_Pylon].push_back(TilePosition(28, 28));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Forge].push_back(TilePosition(22, 31));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Gateway].push_back(TilePosition(24, 28));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(22, 29));
                                mWallPositions[BWAPI::UnitTypes::Protoss_Photon_Cannon].push_back(TilePosition(23, 24));
                        }
                        else
                        {
                                LOGMESSAGE("Error 1");
                        }
                }
                else
                {
                        LOGMESSAGE("Error 2");
                }

                if(!mWallPositions.empty())
                {
                        bool oneHasFailed = false;
                        for(std::map<BWAPI::UnitType, std::list<TilePosition>>::iterator it = mWallPositions.begin(); it != mWallPositions.end(); ++it)
                        {
                                for(std::list<TilePosition>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2)
                                {
                                        if(!BuildingPlacer::Instance().isTileBuildable(*it2, it->first, true))
                                                oneHasFailed = true;
                                }
                        }

                        if(oneHasFailed)
                        {
                                LOGMESSAGE("Error 3");
                                mWallPositions.clear();
                        }
                }
        }
}

Here is the call graph for this function:


Member Data Documentation

Definition at line 20 of file WallTracker.h.

Referenced by canForgeExpand(), getWallPosition(), getWallTiles(), and onBegin().


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