BWAPI
|
#include <ScoutManager.h>
Public Member Functions | |
ScoutManagerClass () | |
void | onBegin () |
void | update () |
void | updateWorkerScouts () |
void | updateObserverScouts () |
void | updateLastScoutType (ScoutData data, ScoutType type) |
ScoutData | getScoutData (ScoutUnitType unit) |
int | getLastScoutTime (Base base) |
ScoutType | getLastScoutType (Base base) |
ScoutType | getCurrentScoutType (Base base) |
Private Attributes | |
std::set< ScoutData > | mAllScoutData |
std::list< ScoutData > | mDataRequiringScout |
std::map< Base, int > | mLastScoutTime |
std::map< Base, ScoutType > | mLastScoutType |
std::map< Base, ScoutType > | mCurrentScoutType |
std::set< WorkerScoutTaskPointer > | mWorkerScouts |
std::set < ObserverScoutTaskPointer > | mObserverScouts |
Definition at line 11 of file ScoutManager.h.
ScoutManagerClass::ScoutManagerClass | ( | ) | [inline] |
Definition at line 14 of file ScoutManager.h.
{}
ScoutType ScoutManagerClass::getCurrentScoutType | ( | Base | base | ) | [inline] |
Definition at line 28 of file ScoutManager.h.
References mCurrentScoutType.
{ return mCurrentScoutType[base]; }
int ScoutManagerClass::getLastScoutTime | ( | Base | base | ) | [inline] |
Definition at line 26 of file ScoutManager.h.
References mLastScoutTime.
{ return mLastScoutTime[base]; }
ScoutType ScoutManagerClass::getLastScoutType | ( | Base | base | ) | [inline] |
Definition at line 27 of file ScoutManager.h.
References mLastScoutType.
{ return mLastScoutType[base]; }
Definition at line 210 of file ScoutManager.cpp.
References BWAPI::Broodwar, ScoutTypeDef::CouldNotReachWithGround, ScoutTypeDef::FailedWithAir, ScoutTypeDef::FailedWithGroundHigh, ScoutTypeDef::FailedWithGroundLow, BWAPI::Game::getFrameCount(), mDataRequiringScout, mLastScoutTime, and mLastScoutType.
Referenced by updateObserverScouts(), and updateWorkerScouts().
{ for(std::list<ScoutData>::iterator it = mDataRequiringScout.begin(); it != mDataRequiringScout.end(); ++it) { const ScoutData data = *it; if(unit == ScoutUnitType::Worker) { if(data->getBase()->isEnemyBase() && BWAPI::Broodwar->getFrameCount() > 6000) continue; else if(mLastScoutType[data->getBase()] == ScoutType::CouldNotReachWithGround) continue; else if(mLastScoutType[data->getBase()] == ScoutType::FailedWithGroundHigh) continue; else if(mLastScoutType[data->getBase()] == ScoutType::FailedWithGroundLow && mLastScoutTime[data->getBase()] + 3500 > BWAPI::Broodwar->getFrameCount()) continue; } else if(unit == ScoutUnitType::Observer) { if(mLastScoutType[data->getBase()] == ScoutType::FailedWithAir) continue; } mDataRequiringScout.erase(it); return data; } return ScoutData(); }
void ScoutManagerClass::onBegin | ( | ) |
Definition at line 8 of file ScoutManager.cpp.
References BWAPI::Broodwar, MapHelper::getGroundDistance(), ScoutTypeDef::InitialBaseLocationScout, Singleton< T >::Instance(), mAllScoutData, mCurrentScoutType, mDataRequiringScout, mLastScoutTime, mLastScoutType, BWAPI::BulletTypes::None, and BWAPI::Game::self().
{ Base lastBase; std::set<Base> scoutBases; for each(Base base in BaseTracker::Instance().getAllBases()) { mLastScoutTime[base] = 1500; mLastScoutType[base] = ScoutType::None; mCurrentScoutType[base] = ScoutType::None; if(base->isStartLocation()) { if(base->getPlayer() == BWAPI::Broodwar->self()) lastBase = base; else scoutBases.insert(base); } } if(!lastBase) return; while(!scoutBases.empty()) { Base closestBase; int distance = std::numeric_limits<int>::max(); for each(Base base in scoutBases) { int thisDistance = MapHelper::getGroundDistance(base->getCenterLocation(), lastBase->getCenterLocation()); if(thisDistance < distance) { distance = thisDistance; closestBase = base; } } if(closestBase) { ScoutData newData = ScoutData(new ScoutDataClass(closestBase, ScoutType::InitialBaseLocationScout)); mAllScoutData.insert(newData); mDataRequiringScout.push_back(newData); mCurrentScoutType[closestBase] = ScoutType::InitialBaseLocationScout; scoutBases.erase(closestBase); } lastBase = closestBase; } }
void ScoutManagerClass::update | ( | ) |
Definition at line 60 of file ScoutManager.cpp.
References ScoutTypeDef::BaseScout, BWAPI::Broodwar, ScoutTypeDef::CouldNotReachWithGround, ScoutTypeDef::FailedWithAir, ScoutTypeDef::FailedWithGroundHigh, ScoutTypeDef::FailedWithGroundLow, BWAPI::Game::getFrameCount(), Singleton< T >::Instance(), mAllScoutData, mCurrentScoutType, mDataRequiringScout, mLastScoutTime, mLastScoutType, ScoutTypeDef::None, BWAPI::BulletTypes::None, ScoutTypeDef::ThoroughSearch, updateObserverScouts(), and updateWorkerScouts().
{ int time = BWAPI::Broodwar->getFrameCount(); bool performThoroughSearch = (BaseTracker::Instance().getEnemyBases().empty() && time > 4000); ScoutType scoutType = performThoroughSearch ? ScoutType::ThoroughSearch : ScoutType::BaseScout; for each(Base base in BaseTracker::Instance().getAllBases()) { if(mCurrentScoutType[base] != ScoutType::None) continue; // If we are doing thorough searches ignore last scout as we just need to find the enemy bool lastGroundFailed = mLastScoutType[base] == ScoutType::FailedWithGroundLow || mLastScoutType[base] == ScoutType::FailedWithGroundHigh || mLastScoutType[base] == ScoutType::CouldNotReachWithGround; if(performThoroughSearch && (lastGroundFailed || mLastScoutType[base] != ScoutType::FailedWithAir)) { mLastScoutType[base] = ScoutType::None; lastGroundFailed = false; } int timeToReScout = 7000; if(lastGroundFailed) timeToReScout = 0; else if(performThoroughSearch && mLastScoutType[base] != scoutType && mCurrentScoutType[base] != scoutType) timeToReScout = 0; else if(performThoroughSearch && (base->isAllyBase() || base->isMyBase())) timeToReScout = 3500; else if(performThoroughSearch) timeToReScout = 1500; else if(mLastScoutType[base] != ScoutType::FailedWithAir) timeToReScout = 2000; else if(base->isEnemyBase()) timeToReScout = 3500; if(mLastScoutTime[base] + timeToReScout <= time) { mLastScoutTime[base] = time; ScoutData newData = ScoutData(new ScoutDataClass(base, scoutType)); mAllScoutData.insert(newData); mDataRequiringScout.push_back(newData); mCurrentScoutType[base] = scoutType; } } for(std::set<ScoutData>::iterator it = mAllScoutData.begin(); it != mAllScoutData.end();) { (*it)->update(); if((*it)->isAchieved()) { mCurrentScoutType[(*it)->getBase()] = ScoutType::None; mLastScoutType[(*it)->getBase()] = (*it)->getType(); mLastScoutTime[(*it)->getBase()] = time; mAllScoutData.erase(it++); } else ++it; } for(std::list<ScoutData>::iterator it = mDataRequiringScout.begin(); it != mDataRequiringScout.end();) { //(*it)->drawDebug(BWAPI::Colors::Red); if((*it)->isAchieved()) mDataRequiringScout.erase(it++); else ++it; } updateObserverScouts(); updateWorkerScouts(); // for each(Base base in BaseTracker::Instance().getAllBases()) // { // int x = base->getRegion()->getCenter().x(); // int y = base->getRegion()->getCenter().y(); // // BWAPI::Broodwar->drawTextMap(x, y, "Last Type: %s", ScoutType::getName(mLastScoutType[base].underlying()).c_str()); // BWAPI::Broodwar->drawTextMap(x, y+10, "This Type: %s", ScoutType::getName(mCurrentScoutType[base].underlying()).c_str()); // BWAPI::Broodwar->drawTextMap(x, y+20, "Time: %d", mLastScoutTime[base]); // } }
void ScoutManagerClass::updateLastScoutType | ( | ScoutData | data, |
ScoutType | type | ||
) |
Definition at line 201 of file ScoutManager.cpp.
References BWAPI::Broodwar, BWAPI::Game::getFrameCount(), mAllScoutData, mCurrentScoutType, mLastScoutTime, mLastScoutType, and BWAPI::BulletTypes::None.
{ mCurrentScoutType[data->getBase()] = ScoutType::None; mAllScoutData.erase(data); mLastScoutTime[data->getBase()] = BWAPI::Broodwar->getFrameCount(); mLastScoutType[data->getBase()] = type; }
Definition at line 175 of file ScoutManager.cpp.
References getScoutData(), Singleton< T >::Instance(), mObserverScouts, BWAPI::UnitTypes::Protoss_Observer, and TaskTypeDef::Scout.
Referenced by update().
{ for(std::set<ObserverScoutTaskPointer>::iterator it = mObserverScouts.begin(); it != mObserverScouts.end();) { if((*it)->hasEnded()) mObserverScouts.erase(it++); else ++it; } unsigned int curreentObservers = UnitTracker::Instance().selectAllUnits(BWAPI::UnitTypes::Protoss_Observer).size(); unsigned int maxObservers = curreentObservers > 1 ? curreentObservers - 1 : 0; //BWAPI::Broodwar->drawTextScreen(5, 35, "Max Observer Scouts : %u", maxObservers); //BWAPI::Broodwar->drawTextScreen(5, 45, "Current Observer Scouts : %u", mObserverScouts.size()); if(maxObservers > mObserverScouts.size()) { ScoutData data = getScoutData(ScoutUnitType::Observer); ObserverScoutTaskPointer task = ObserverScoutTaskPointer(new ObserverScoutTask(TaskType::Scout, data)); mObserverScouts.insert(task); TaskManager::Instance().addTask(task); } }
Definition at line 144 of file ScoutManager.cpp.
References BWAPI::Broodwar, BWAPI::Game::getFrameCount(), getScoutData(), Singleton< T >::Instance(), mWorkerScouts, TaskTypeDef::Scout, and OrderDef::Scout.
Referenced by update().
{ for(std::set<WorkerScoutTaskPointer>::iterator it = mWorkerScouts.begin(); it != mWorkerScouts.end();) { if((*it)->isFinishedScouting()) mWorkerScouts.erase(it++); else ++it; } // use more workers the longer the game unsigned int maxForThisTime = !BuildOrderManager::Instance().getOrder(Order::Scout) ? 0 : BWAPI::Broodwar->getFrameCount() > 24*60*7 ? 2 : 1; //BWAPI::Broodwar->drawTextScreen(5, 15, "Max Worker Scouts : %u", maxForThisTime); //BWAPI::Broodwar->drawTextScreen(5, 25, "Current Worker Scouts : %u", mWorkerScouts.size()); // if we are short on tasks for workers, create some if(maxForThisTime > mWorkerScouts.size()) { ScoutData data = getScoutData(ScoutUnitType::Worker); if(data) { WorkerScoutTaskPointer task = WorkerScoutTaskPointer(new WorkerScoutTask(TaskType::Scout, data)); mWorkerScouts.insert(task); TaskManager::Instance().addTask(task); } } }
std::set<ScoutData> ScoutManagerClass::mAllScoutData [private] |
Definition at line 31 of file ScoutManager.h.
Referenced by onBegin(), update(), and updateLastScoutType().
std::map<Base, ScoutType> ScoutManagerClass::mCurrentScoutType [private] |
Definition at line 36 of file ScoutManager.h.
Referenced by getCurrentScoutType(), onBegin(), update(), and updateLastScoutType().
std::list<ScoutData> ScoutManagerClass::mDataRequiringScout [private] |
Definition at line 32 of file ScoutManager.h.
Referenced by getScoutData(), onBegin(), and update().
std::map<Base, int> ScoutManagerClass::mLastScoutTime [private] |
Definition at line 34 of file ScoutManager.h.
Referenced by getLastScoutTime(), getScoutData(), onBegin(), update(), and updateLastScoutType().
std::map<Base, ScoutType> ScoutManagerClass::mLastScoutType [private] |
Definition at line 35 of file ScoutManager.h.
Referenced by getLastScoutType(), getScoutData(), onBegin(), update(), and updateLastScoutType().
std::set<ObserverScoutTaskPointer> ScoutManagerClass::mObserverScouts [private] |
Definition at line 39 of file ScoutManager.h.
Referenced by updateObserverScouts().
std::set<WorkerScoutTaskPointer> ScoutManagerClass::mWorkerScouts [private] |
Definition at line 38 of file ScoutManager.h.
Referenced by updateWorkerScouts().