|
BWAPI
|
#include <ExpansionManager.h>
Public Member Functions | |
| ExpansionManagerClass () | |
| void | update () |
Private Member Functions | |
| void | updateRefineries () |
| void | updateDefense () |
| void | updateExpands () |
Private Attributes | |
| std::list< TaskPointer > | mRefineryTasks |
| TaskPointer | mPylon |
| std::list< TaskPointer > | mDefenseTasks |
| std::list< TaskPointer > | mExpandTasks |
Definition at line 8 of file ExpansionManager.h.
Definition at line 12 of file ExpansionManager.cpp.
{
}
| void ExpansionManagerClass::update | ( | ) |
Definition at line 16 of file ExpansionManager.cpp.
References OrderDef::ExpansionManager, BWAPI::Orders::getOrder(), Singleton< T >::Instance(), OrderDef::RefineryManager, updateDefense(), updateExpands(), and updateRefineries().
{
if(BuildOrderManager::Instance().getOrder(Order::RefineryManager))
updateRefineries();
if(BuildOrderManager::Instance().getOrder(Order::ExpansionManager))
{
updateDefense();
updateExpands();
}
}

| void ExpansionManagerClass::updateDefense | ( | ) | [private] |
Definition at line 62 of file ExpansionManager.cpp.
References BWAPI::Broodwar, TaskTypeDef::Defense, BWAPI::Player::getRace(), BWAPI::Races::getRace(), Singleton< T >::Instance(), LOGMESSAGE, mDefenseTasks, mPylon, BWAPI::Races::Protoss, BWAPI::UnitTypes::Protoss_Photon_Cannon, BWAPI::UnitTypes::Protoss_Pylon, BWAPI::UnitType::requiresPsi(), BWAPI::Game::self(), BWAPI::UnitTypes::Terran_Missile_Turret, and BWAPI::Races::Zerg.
Referenced by update().
{
if(BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Zerg)
return;
BWAPI::UnitType defenseType = BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Protoss ? BWAPI::UnitTypes::Protoss_Photon_Cannon : BWAPI::UnitTypes::Terran_Missile_Turret;
if(!MacroManager::Instance().hasRequirements(defenseType))
return;
std::set<Base> myBases = BaseTracker::Instance().getActiveBases(true);
if(myBases.size() >= 2)
{
int defensesNeeded = 0;
int neededPerBase = PlayerTracker::Instance().isEnemyRace(BWAPI::Races::Zerg) ? 4 : 2;
for each(Base base in myBases)
{
if(base->getMinerals().empty())
continue;
bool hasPylon = defenseType.requiresPsi() ? false : true;
int thisCount = 0;
for each(Unit building in base->getBuildings())
{
if(building->getType() == defenseType)
++thisCount;
if(building->getType() == BWAPI::UnitTypes::Protoss_Pylon)
{
if(building->isCompleted())
hasPylon = true;
}
}
if(hasPylon)
{
defensesNeeded += neededPerBase;
defensesNeeded -= std::min(thisCount, neededPerBase);
}
else if(BWAPI::Broodwar->self()->supplyTotal() >= 380 && (!mPylon || mPylon->hasEnded()))
mPylon = TaskManager::Instance().build(BWAPI::UnitTypes::Protoss_Pylon, TaskType::Defense);
}
for(std::list<TaskPointer>::iterator it = mDefenseTasks.begin(); it != mDefenseTasks.end();)
{
if((*it)->hasEnded())
mDefenseTasks.erase(it++);
else
{
if(!(*it)->inProgress())
--defensesNeeded;
++it;
}
}
if(defensesNeeded > 0)
{
for(int i = 0; i < defensesNeeded; ++i)
{
LOGMESSAGE(String_Builder() << "Built Defense.");
mDefenseTasks.push_front(TaskManager::Instance().build(defenseType, TaskType::Defense));
}
}
else if(defensesNeeded < 0)
{
for(int i = 0; i < defensesNeeded; ++i)
{
std::list<TaskPointer>::iterator begin = mDefenseTasks.begin();
LOGMESSAGE(String_Builder() << "Cancelled Defense.");
(*begin)->cancel();
mDefenseTasks.erase(begin);
}
}
}
}


| void ExpansionManagerClass::updateExpands | ( | ) | [private] |
Definition at line 139 of file ExpansionManager.cpp.
References BWAPI::Broodwar, TaskTypeDef::Expansion, BuildingLocationDef::Expansion, BWAPI::Races::getRace(), Singleton< T >::Instance(), LOGMESSAGE, and mExpandTasks.
Referenced by update().
{
bool unstartedTasks = false;
for(std::list<TaskPointer>::iterator it = mExpandTasks.begin(); it != mExpandTasks.end();)
{
if((*it)->hasEnded())
mExpandTasks.erase(it++);
else
{
if(!(*it)->inProgress())
unstartedTasks = true;
++it;
}
}
if(ResourceManager::Instance().isSaturated() && !unstartedTasks)
{
LOGMESSAGE(String_Builder() << "Expanded because im saturated.");
mExpandTasks.push_front(TaskManager::Instance().build(BWAPI::Broodwar->self()->getRace().getCenter(), TaskType::Expansion, BuildingLocation::Expansion));
}
}

| void ExpansionManagerClass::updateRefineries | ( | ) | [private] |
Definition at line 28 of file ExpansionManager.cpp.
References BWAPI::Broodwar, BWAPI::Game::getFrameCount(), BWAPI::Player::getRace(), BWAPI::Races::getRace(), BWAPI::Race::getRefinery(), Singleton< T >::Instance(), mRefineryTasks, TaskTypeDef::RefineryManager, and BWAPI::Game::self().
Referenced by update().
{
int refNeeded = 0;
for each(Base base in BaseTracker::Instance().getActiveBases(true))
{
if(base->getActivateTime() < unsigned int(BWAPI::Broodwar->getFrameCount() + BWAPI::Broodwar->self()->getRace().getRefinery().buildTime()))
refNeeded += base->getGeysers().size();
}
for(std::list<TaskPointer>::iterator it = mRefineryTasks.begin(); it != mRefineryTasks.end();)
{
if((*it)->hasEnded())
mRefineryTasks.erase(it++);
else
{
if(!(*it)->inProgress())
--refNeeded;
++it;
}
}
if(ResourceManager::Instance().requiresRefineries() && refNeeded > 0 && BWAPI::Broodwar->getFrameCount() % 50 == 0)
mRefineryTasks.push_front(TaskManager::Instance().build(BWAPI::Broodwar->self()->getRace().getRefinery(), TaskType::RefineryManager));
else if(refNeeded < 0)
{
for(int i = 0; i < refNeeded; ++i)
{
std::list<TaskPointer>::iterator begin = mRefineryTasks.begin();
(*begin)->cancel();
mRefineryTasks.erase(begin);
}
}
}


std::list<TaskPointer> ExpansionManagerClass::mDefenseTasks [private] |
Definition at line 20 of file ExpansionManager.h.
Referenced by updateDefense().
std::list<TaskPointer> ExpansionManagerClass::mExpandTasks [private] |
Definition at line 23 of file ExpansionManager.h.
Referenced by updateExpands().
TaskPointer ExpansionManagerClass::mPylon [private] |
Definition at line 19 of file ExpansionManager.h.
Referenced by updateDefense().
std::list<TaskPointer> ExpansionManagerClass::mRefineryTasks [private] |
Definition at line 16 of file ExpansionManager.h.
Referenced by updateRefineries().
1.7.6.1