BWAPI
Skynet/Skynet/BaseTracker.cpp
Go to the documentation of this file.
00001 #include "BaseTracker.h"
00002 
00003 #include <limits>
00004 #include <cassert>
00005 
00006 BaseTrackerClass::BaseTrackerClass()
00007 {
00008 }
00009 
00010 Base BaseTrackerClass::createBase(std::set<TilePosition> tiles, Region region, bool startLocation, TilePosition position, const UnitGroup &resources)
00011 {
00012         Base base;
00013         if(position != BWAPI::TilePositions::None)
00014                 base = Base(new BaseClass(position, resources, region, tiles, startLocation));
00015         else
00016                 base = Base(new BaseClass(region, tiles, startLocation));
00017 
00018         for each(TilePosition tile in tiles)
00019                 mTileToBase[tile] = base;
00020         
00021         mBases.insert(base);
00022 
00023         return base;
00024 }
00025 
00026 void BaseTrackerClass::update()
00027 {
00028         for each(Base base in mBases)
00029         {
00030                 //TODO: track flying buildings, they can move between bases
00031                 base->update();
00032 
00033                 //base->drawDebugInfo();
00034         }
00035 }
00036 
00037 void BaseTrackerClass::onDiscover(Unit unit)
00038 {
00039         for each(Base base in mBases)
00040         {
00041                 base->onDiscover(unit);
00042         }
00043 }
00044 
00045 void BaseTrackerClass::onMorphRenegade(Unit unit, Player previousPlayer, BWAPI::UnitType previousType)
00046 {
00047         for each(Base base in mBases)
00048         {
00049                 base->onMorphRenegade(unit, previousPlayer, previousType);
00050         }
00051 }
00052 
00053 void BaseTrackerClass::onDestroy(Unit unit)
00054 {
00055         for each(Base base in mBases)
00056         {
00057                 base->onDestroy(unit);
00058         }
00059 }
00060 
00061 std::set<Base> BaseTrackerClass::getResourceBases()
00062 {
00063         std::set<Base> bases;
00064 
00065         for each(Base base in mBases)
00066         {
00067                 if(!base->isMinedOut())
00068                         bases.insert(base);
00069         }
00070 
00071         return bases;
00072 }
00073 
00074 std::set<Base> BaseTrackerClass::getActiveBases(bool activeInFuture, Player player)
00075 {
00076         std::set<Base> bases;
00077 
00078         for each(Base base in mBases)
00079         {
00080                 if(base->isActive(activeInFuture) && base->getPlayer() == player)
00081                         bases.insert(base);
00082         }
00083 
00084         return bases;
00085 }
00086 
00087 std::set<Base> BaseTrackerClass::getEnemyActiveBases(bool activeInFuture)
00088 {
00089         std::set<Base> bases;
00090 
00091         for each(Base base in mBases)
00092         {
00093                 if(base->isActive(activeInFuture) && BWAPI::Broodwar->self()->isEnemy(base->getPlayer()))
00094                         bases.insert(base);
00095         }
00096 
00097         return bases;
00098 }
00099 
00100 std::set<Base> BaseTrackerClass::getEnemyBases()
00101 {
00102         std::set<Base> bases;
00103 
00104         for each(Base base in mBases)
00105         {
00106                 if(BWAPI::Broodwar->self()->isEnemy(base->getPlayer()))
00107                         bases.insert(base);
00108         }
00109 
00110         return bases;
00111 }
00112 
00113 std::set<Base> BaseTrackerClass::getAllyBases()
00114 {
00115         std::set<Base> bases;
00116 
00117         for each(Base base in mBases)
00118         {
00119                 if(BWAPI::Broodwar->self()->isAlly(base->getPlayer()))
00120                         bases.insert(base);
00121         }
00122 
00123         return bases;
00124 }
00125 
00126 std::set<Base> BaseTrackerClass::getPlayerBases(Player player)
00127 {
00128         std::set<Base> bases;
00129 
00130         for each(Base base in mBases)
00131         {
00132                 if(base->getPlayer() == player)
00133                         bases.insert(base);
00134         }
00135 
00136         return bases;
00137 }
00138 
00139 std::set<Base> BaseTrackerClass::getImportantBases(Player player)
00140 {
00141         std::set<Base> bases;
00142 
00143         for each(Base base in mBases)
00144         {
00145                 if(base->getPlayer() == player && (base->isActive(true) || base->getNumberOfTechBuildings() >= 2))
00146                         bases.insert(base);
00147         }
00148 
00149         return bases;
00150 }
00151 
00152 std::set<Base> BaseTrackerClass::getEnemyImportantBases()
00153 {
00154         std::set<Base> bases;
00155 
00156         for each(Base base in mBases)
00157         {
00158                 if(BWAPI::Broodwar->self()->isEnemy(base->getPlayer()) && (base->isActive(true) || base->getNumberOfTechBuildings() > 0))
00159                         bases.insert(base);
00160         }
00161 
00162         return bases;
00163 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines