|
BWAPI
|
#include <RequirementGroup.h>
Public Member Functions | |
| RequirementGroup () | |
| std::pair< int, int > | earliestTime () |
| bool | operator== (const RequirementGroup &other) const |
| bool | operator< (const RequirementGroup &other) const |
| void | reserve (int time) |
| bool | empty () const |
| void | clear () |
| UnitGroup | getUnits () const |
| void | addMineralRequirement (int minerals) |
| void | addGasRequirement (int gas) |
| void | addSupplyRequirement (int supply) |
| void | addTimeRequirement (int time) |
| void | addUnitRequirement (Unit unit, int priority, int duration, Position position=BWAPI::Positions::None) |
| void | addUnitFilterRequirement (int priority, int duration, UnitFilter unitFilter, Position position=BWAPI::Positions::None) |
| void | addUnitFilterRequirement (int priority, int duration, UnitFilter unitFilter, int quantity, Position position=BWAPI::Positions::None) |
| void | addTechForTypeRequirement (BWAPI::UnitType unitType) |
| void | addTechForTypeRequirement (BWAPI::UpgradeType upgradeType, int level) |
| void | addTechForTypeRequirement (BWAPI::TechType techType) |
Private Member Functions | |
| bool | recurseForUnitTime (int &latestTime, std::vector< Requirement >::iterator currentRequirement, int currentStartTime, int currentEndTime, std::set< Unit > ¤tUnits) |
Private Attributes | |
| std::vector< Requirement > | mOtherRequirements |
| std::vector< Requirement > | mUnitRequirements |
Definition at line 8 of file RequirementGroup.h.
Definition at line 5 of file RequirementGroup.cpp.
{
}
| void RequirementGroup::addGasRequirement | ( | int | gas | ) | [inline] |
Definition at line 26 of file RequirementGroup.h.
References RequirementTypeDef::Gas, and mOtherRequirements.
Referenced by MorphTask::updateRequirements(), UpgradeTask::updateRequirements(), TrainTask::updateRequirements(), TechTask::updateRequirements(), and ConstructionTask::updateRequirements().
{ mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Gas), gas)); }

| void RequirementGroup::addMineralRequirement | ( | int | minerals | ) | [inline] |
Definition at line 25 of file RequirementGroup.h.
References RequirementTypeDef::Mineral, and mOtherRequirements.
Referenced by MorphTask::updateRequirements(), UpgradeTask::updateRequirements(), TrainTask::updateRequirements(), TechTask::updateRequirements(), and ConstructionTask::updateRequirements().
{ mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Mineral), minerals)); }

| void RequirementGroup::addSupplyRequirement | ( | int | supply | ) | [inline] |
Definition at line 27 of file RequirementGroup.h.
References mOtherRequirements, and RequirementTypeDef::Supply.
Referenced by MorphTask::updateRequirements(), TrainTask::updateRequirements(), and ConstructionTask::updateRequirements().
{ mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Supply), supply)); }

| void RequirementGroup::addTechForTypeRequirement | ( | BWAPI::UnitType | unitType | ) | [inline] |
Definition at line 34 of file RequirementGroup.h.
References mOtherRequirements.
Referenced by MorphTask::updateRequirements(), UpgradeTask::updateRequirements(), TrainTask::updateRequirements(), TechTask::updateRequirements(), and ConstructionTask::updateRequirements().
{ mOtherRequirements.push_back(Requirement(unitType)); }

| void RequirementGroup::addTechForTypeRequirement | ( | BWAPI::UpgradeType | upgradeType, |
| int | level | ||
| ) | [inline] |
Definition at line 35 of file RequirementGroup.h.
References mOtherRequirements.
{ mOtherRequirements.push_back(Requirement(upgradeType, level)); }
| void RequirementGroup::addTechForTypeRequirement | ( | BWAPI::TechType | techType | ) | [inline] |
Definition at line 36 of file RequirementGroup.h.
References mOtherRequirements.
{ mOtherRequirements.push_back(Requirement(techType)); }
| void RequirementGroup::addTimeRequirement | ( | int | time | ) | [inline] |
Definition at line 28 of file RequirementGroup.h.
References mOtherRequirements, and RequirementTypeDef::Time.
Referenced by GatherTask::updateRequirements().
{ mOtherRequirements.push_back(Requirement(RequirementType(RequirementType::Time), time)); }

| void RequirementGroup::addUnitFilterRequirement | ( | int | priority, |
| int | duration, | ||
| UnitFilter | unitFilter, | ||
| Position | position = BWAPI::Positions::None |
||
| ) | [inline] |
Definition at line 31 of file RequirementGroup.h.
References mUnitRequirements.
Referenced by addUnitFilterRequirement(), MorphTask::updateRequirements(), UpgradeTask::updateRequirements(), TechTask::updateRequirements(), TrainTask::updateRequirements(), GatherTask::updateRequirements(), MineBlockingMineralTask::updateRequirements(), ConstructionTask::updateRequirements(), WorkerScoutTask::updateRequirements(), ObserverScoutTask::updateRequirements(), DefaultSquadTask::updateRequirements(), and DefenseSquadTask::updateRequirements().
{ mUnitRequirements.push_back(Requirement(priority, duration, unitFilter, position)); }

| void RequirementGroup::addUnitFilterRequirement | ( | int | priority, |
| int | duration, | ||
| UnitFilter | unitFilter, | ||
| int | quantity, | ||
| Position | position = BWAPI::Positions::None |
||
| ) |
Definition at line 125 of file RequirementGroup.cpp.
References addUnitFilterRequirement().
{
for(int i = 0; i < quantity; ++i)
addUnitFilterRequirement(priority, duration, unitFilter, position);
}
| void RequirementGroup::addUnitRequirement | ( | Unit | unit, |
| int | priority, | ||
| int | duration, | ||
| Position | position = BWAPI::Positions::None |
||
| ) | [inline] |
Definition at line 30 of file RequirementGroup.h.
References mUnitRequirements.
Referenced by DefaultSquadTask::updateRequirements().
{ mUnitRequirements.push_back(Requirement(priority, duration, unit, position)); }

| void RequirementGroup::clear | ( | ) |
Definition at line 101 of file RequirementGroup.cpp.
References mOtherRequirements, and mUnitRequirements.
{
mOtherRequirements.clear();
mUnitRequirements.clear();
}
| std::pair< int, int > RequirementGroup::earliestTime | ( | ) |
Definition at line 9 of file RequirementGroup.cpp.
References BWAPI::Broodwar, BWAPI::Game::getFrameCount(), Requirement::maxTime, mOtherRequirements, mUnitRequirements, and recurseForUnitTime().
Referenced by TaskManagerClass::updateRequirement().
{
int latestTime = BWAPI::Broodwar->getFrameCount();
// Loop through all normal requirements
for(std::vector<Requirement>::iterator requirement = mOtherRequirements.begin(); requirement != mOtherRequirements.end(); ++requirement)
{
assert(!requirement->unitRequirement());
// If the easliest time this requirement is ready is the latest yet, save it
int thisTime = requirement->earliestTime();
if(thisTime > latestTime)
latestTime = thisTime;
}
// Recurse through unit requirements
std::set<Unit> units;
if(recurseForUnitTime(latestTime, mUnitRequirements.begin(), latestTime, Requirement::maxTime, units))
{
int biggestDelay = 0;
// now loop through to find any delay in the execution
for(std::vector<Requirement>::iterator requirement = mUnitRequirements.begin(); requirement != mUnitRequirements.end(); ++requirement)
{
int thisDelay = requirement->getDelay();
if(thisDelay > biggestDelay)
biggestDelay = thisDelay;
}
return std::make_pair(latestTime, biggestDelay);
}
// if it didn't find a time, just return
return std::make_pair(Requirement::maxTime, 0);
}


| bool RequirementGroup::empty | ( | ) | const |
Definition at line 93 of file RequirementGroup.cpp.
References mOtherRequirements, and mUnitRequirements.
Referenced by TaskManagerClass::updateRequirement().
{
if(!mOtherRequirements.empty())
return false;
return mUnitRequirements.empty();
}

| UnitGroup RequirementGroup::getUnits | ( | ) | const |
Definition at line 107 of file RequirementGroup.cpp.
References UnitGroup::insert(), and mUnitRequirements.
Referenced by TaskManagerClass::updateRequirement().
{
UnitGroup units;
for(std::vector<Requirement>::const_iterator requirement = mUnitRequirements.begin(); requirement != mUnitRequirements.end(); ++requirement)
units.insert(requirement->getUnit());
return units;
}


| bool RequirementGroup::operator< | ( | const RequirementGroup & | other | ) | const |
Definition at line 85 of file RequirementGroup.cpp.
References mOtherRequirements, and mUnitRequirements.
{
if(mOtherRequirements < other.mOtherRequirements)
return true;
return mUnitRequirements < other.mUnitRequirements;
}
| bool RequirementGroup::operator== | ( | const RequirementGroup & | other | ) | const |
Definition at line 77 of file RequirementGroup.cpp.
References mOtherRequirements, and mUnitRequirements.
{
if(mOtherRequirements == other.mOtherRequirements)
return mUnitRequirements == other.mUnitRequirements;
return false;
}
| bool RequirementGroup::recurseForUnitTime | ( | int & | latestTime, |
| std::vector< Requirement >::iterator | currentRequirement, | ||
| int | currentStartTime, | ||
| int | currentEndTime, | ||
| std::set< Unit > & | currentUnits | ||
| ) | [private] |
Definition at line 44 of file RequirementGroup.cpp.
References Requirement::maxTime, and mUnitRequirements.
Referenced by earliestTime().
{
// If we have reached the end we have found a time, save it and return
if(currentRequirement == mUnitRequirements.end())
{
latestTime = currentStartTime;
return true;
}
assert(currentRequirement->unitRequirement());
// get a selection of free times for this requirement
const std::map<int, int> &unitTimes = currentRequirement->earliestUnitTime(currentStartTime, currentEndTime, currentUnits);
// For each one
for(std::map<int, int>::const_iterator it = unitTimes.begin(); it != unitTimes.end(); ++it)
{
currentUnits.insert(currentRequirement->getUnit());
int newEndTime = it->second;
if(newEndTime != Requirement::maxTime)
newEndTime += it->first;
// go to the next requirement with these times to see if it is suitable for the rest too
if(recurseForUnitTime(latestTime, ++(std::vector<Requirement>::iterator(currentRequirement)), it->first, newEndTime, currentUnits))
return true;
currentUnits.erase(currentRequirement->getUnit());
}
return false;
}

| void RequirementGroup::reserve | ( | int | time | ) |
Definition at line 116 of file RequirementGroup.cpp.
References mOtherRequirements, and mUnitRequirements.
Referenced by TaskManagerClass::updateRequirement().
{
for(std::vector<Requirement>::iterator requirement = mOtherRequirements.begin(); requirement != mOtherRequirements.end(); ++requirement)
requirement->reserve(time);
for(std::vector<Requirement>::iterator requirement = mUnitRequirements.begin(); requirement != mUnitRequirements.end(); ++requirement)
requirement->reserve(time);
}

std::vector<Requirement> RequirementGroup::mOtherRequirements [private] |
Definition at line 41 of file RequirementGroup.h.
Referenced by addGasRequirement(), addMineralRequirement(), addSupplyRequirement(), addTechForTypeRequirement(), addTimeRequirement(), clear(), earliestTime(), empty(), operator<(), operator==(), and reserve().
std::vector<Requirement> RequirementGroup::mUnitRequirements [private] |
Definition at line 44 of file RequirementGroup.h.
Referenced by addUnitFilterRequirement(), addUnitRequirement(), clear(), earliestTime(), empty(), getUnits(), operator<(), operator==(), recurseForUnitTime(), and reserve().
1.7.6.1