BWAPI
|
#include <TechTask.h>
Public Member Functions | |
TechTask (TaskType priority, BWAPI::TechType type) | |
virtual int | getEndTime () const |
virtual int | getEndTime (Unit unit) const |
virtual int | getPriority (Unit unit) const |
virtual Position | getStartLocation (Unit unit) const |
virtual Position | getEndLocation (Unit unit) const |
virtual bool | preUpdate () |
virtual bool | update () |
virtual void | updateRequirements () |
virtual bool | waitingForUnit (Unit unit) const |
virtual void | giveUnit (Unit unit) |
virtual void | returnUnit (Unit unit) |
virtual bool | morph (Unit unit, BWAPI::UnitType previousType) |
virtual UnitGroup | getFinishedUnits () |
virtual std::string | getTaskName () const |
virtual std::string | getOutputName () const |
virtual void | setRequiredSatisfyTime (RequirementGroup requirements, int time, int delay) |
virtual int | dispatchTime () const |
virtual int | startTime () const |
virtual bool | hasDispatched () const |
virtual bool | inProgress () const |
Private Attributes | |
BWAPI::TechType | mType |
Unit | mUnit |
int | mRequiredSatisfyTime |
bool | mReservedResources |
Definition at line 7 of file TechTask.h.
TechTask::TechTask | ( | TaskType | priority, |
BWAPI::TechType | type | ||
) |
Definition at line 5 of file TechTask.cpp.
: Task(priority) , mType(type) , mReservedResources(false) , mRequiredSatisfyTime(BWAPI::Broodwar->getFrameCount()) { }
virtual int TechTask::dispatchTime | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 36 of file TechTask.h.
References mRequiredSatisfyTime.
{ return mRequiredSatisfyTime; }
Position TechTask::getEndLocation | ( | Unit | unit | ) | const [virtual] |
int TechTask::getEndTime | ( | ) | const [virtual] |
Implements Task.
Definition at line 13 of file TechTask.cpp.
References BWAPI::Broodwar, BWAPI::Game::getFrameCount(), Requirement::maxTime, mRequiredSatisfyTime, mType, mUnit, and BWAPI::TechType::researchTime().
Referenced by getEndTime().
{ if(mUnit) return BWAPI::Broodwar->getFrameCount() + mUnit->getRemainingResearchTime(); if(mRequiredSatisfyTime == Requirement::maxTime) return mRequiredSatisfyTime; return mRequiredSatisfyTime + mType.researchTime(); }
int TechTask::getEndTime | ( | Unit | unit | ) | const [virtual] |
Implements Task.
Definition at line 24 of file TechTask.cpp.
References getEndTime().
{ return getEndTime(); }
UnitGroup TechTask::getFinishedUnits | ( | ) | [virtual] |
Implements Task.
Definition at line 113 of file TechTask.cpp.
References UnitGroup::insert(), and mUnit.
virtual std::string TechTask::getOutputName | ( | ) | const [inline, virtual] |
Implements Task.
Definition at line 32 of file TechTask.h.
References BWAPI::TechType::getName(), and mType.
int TechTask::getPriority | ( | Unit | unit | ) | const [virtual] |
Position TechTask::getStartLocation | ( | Unit | unit | ) | const [virtual] |
virtual std::string TechTask::getTaskName | ( | ) | const [inline, virtual] |
void TechTask::giveUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 79 of file TechTask.cpp.
References BWAPI::TechType::gasPrice(), Singleton< T >::Instance(), BWAPI::TechType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, mUnit, and BWAPI::TechType::whatResearches().
{ if(unit->getType() == mType.whatResearches()) { mUnit = unit; assert(mReservedResources == false); ResourceTracker::Instance().reserveCurrentMinerals(mRequiredSatisfyTime, mType.mineralPrice()); ResourceTracker::Instance().reserveCurrentGas(mRequiredSatisfyTime, mType.gasPrice()); mReservedResources = true; } }
virtual bool TechTask::hasDispatched | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 39 of file TechTask.h.
References mUnit.
{ return mUnit; }
virtual bool TechTask::inProgress | ( | ) | const [inline, virtual] |
bool TechTask::morph | ( | Unit | unit, |
BWAPI::UnitType | previousType | ||
) | [virtual] |
bool TechTask::preUpdate | ( | ) | [virtual] |
Implements Task.
Definition at line 39 of file TechTask.cpp.
References BWAPI::Broodwar, Task::complete(), Task::isCanceled(), Task::isCompleted(), Task::isStopped(), mType, mUnit, and updateRequirements().
{ if(BWAPI::Broodwar->self()->hasResearched(mType)) complete(); if((isStopped() || isCanceled() || isCompleted()) && mUnit && !mUnit->isResearching()) return true; updateRequirements(); return false; }
void TechTask::returnUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 91 of file TechTask.cpp.
References BWAPI::TechType::gasPrice(), Singleton< T >::Instance(), BWAPI::TechType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, mUnit, and StaticUnits::nullunit.
{ if(mUnit == unit) { mUnit = StaticUnits::nullunit; if(mReservedResources) { ResourceTracker::Instance().releaseCurrentMinerals(mRequiredSatisfyTime, mType.mineralPrice()); ResourceTracker::Instance().releaseCurrentGas(mRequiredSatisfyTime, mType.gasPrice()); mReservedResources = false; } } else assert(false); }
virtual void TechTask::setRequiredSatisfyTime | ( | RequirementGroup | requirements, |
int | time, | ||
int | delay | ||
) | [inline, virtual] |
Reimplemented from Task.
Definition at line 34 of file TechTask.h.
References mRequiredSatisfyTime.
{ mRequiredSatisfyTime = time; }
virtual int TechTask::startTime | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 37 of file TechTask.h.
References mRequiredSatisfyTime.
{ return mRequiredSatisfyTime; }
bool TechTask::update | ( | ) | [virtual] |
Implements Task.
Definition at line 52 of file TechTask.cpp.
References BWAPI::TechType::gasPrice(), Task::hasEnded(), Singleton< T >::Instance(), Task::isCanceled(), Task::isPaused(), Task::isStopped(), BWAPI::TechType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, mUnit, and Task::shouldReturnUnit().
{ if(mUnit) { if(mUnit->isResearching()) { if(mUnit->getTech() != mType || isStopped() || isPaused() || isCanceled()) mUnit->cancel(); else if(mReservedResources) { ResourceTracker::Instance().releaseCurrentMinerals(mRequiredSatisfyTime, mType.mineralPrice()); ResourceTracker::Instance().releaseCurrentGas(mRequiredSatisfyTime, mType.gasPrice()); mReservedResources = false; } } else if(!shouldReturnUnit()) mUnit->research(mType); } return hasEnded() && !mUnit; }
void TechTask::updateRequirements | ( | ) | [virtual] |
Reimplemented from Task.
Definition at line 128 of file TechTask.cpp.
References RequirementGroup::addGasRequirement(), RequirementGroup::addMineralRequirement(), Task::addRequirement(), RequirementGroup::addTechForTypeRequirement(), RequirementGroup::addUnitFilterRequirement(), Task::clearRequirements(), BWAPI::TechType::gasPrice(), UnitFilterFlags::IsComplete, BWAPI::TechType::mineralPrice(), mReservedResources, mType, mUnit, BWAPI::TechType::researchTime(), Task::shouldReturnUnit(), and BWAPI::TechType::whatResearches().
Referenced by preUpdate().
{ clearRequirements(); if(!mUnit && !shouldReturnUnit()) { RequirementGroup requiredConditions; assert(mReservedResources == false); requiredConditions.addTechForTypeRequirement(mType); requiredConditions.addUnitFilterRequirement(40, mType.researchTime(), UnitFilter(mType.whatResearches()) && UnitFilter(UnitFilterFlags::IsComplete)); requiredConditions.addMineralRequirement(mType.mineralPrice()); requiredConditions.addGasRequirement(mType.gasPrice()); addRequirement(requiredConditions); } }
bool TechTask::waitingForUnit | ( | Unit | unit | ) | const [virtual] |
int TechTask::mRequiredSatisfyTime [private] |
Definition at line 47 of file TechTask.h.
Referenced by dispatchTime(), getEndTime(), giveUnit(), returnUnit(), setRequiredSatisfyTime(), startTime(), and update().
bool TechTask::mReservedResources [private] |
Definition at line 49 of file TechTask.h.
Referenced by giveUnit(), returnUnit(), update(), and updateRequirements().
BWAPI::TechType TechTask::mType [private] |
Definition at line 43 of file TechTask.h.
Referenced by getEndTime(), getOutputName(), giveUnit(), preUpdate(), returnUnit(), update(), and updateRequirements().
Unit TechTask::mUnit [private] |
Definition at line 45 of file TechTask.h.
Referenced by getEndTime(), getFinishedUnits(), giveUnit(), hasDispatched(), inProgress(), preUpdate(), returnUnit(), update(), and updateRequirements().