BWAPI
|
#include <MorphTask.h>
Public Member Functions | |
MorphTask (TaskType priority, BWAPI::UnitType 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 Member Functions | |
void | reserveResources () |
void | freeResources () |
Private Attributes | |
BWAPI::UnitType | mType |
Unit | mUnit |
int | mRequiredSatisfyTime |
bool | mReservedResources |
Definition at line 7 of file MorphTask.h.
MorphTask::MorphTask | ( | TaskType | priority, |
BWAPI::UnitType | type | ||
) |
Definition at line 5 of file MorphTask.cpp.
: Task(priority) , mType(type) , mReservedResources(false) , mRequiredSatisfyTime(BWAPI::Broodwar->getFrameCount()) { }
virtual int MorphTask::dispatchTime | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 36 of file MorphTask.h.
References mRequiredSatisfyTime.
{ return mRequiredSatisfyTime; }
void MorphTask::freeResources | ( | ) | [private] |
Definition at line 138 of file MorphTask.cpp.
References BWAPI::UnitType::gasPrice(), Singleton< T >::Instance(), BWAPI::UnitType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, and BWAPI::UnitType::supplyRequired().
Referenced by morph(), and updateRequirements().
{ if(mReservedResources) { ResourceTracker::Instance().releaseCurrentMinerals(mRequiredSatisfyTime, mType.mineralPrice()); ResourceTracker::Instance().releaseCurrentGas(mRequiredSatisfyTime, mType.gasPrice()); ResourceTracker::Instance().releaseCurrentSupply(mRequiredSatisfyTime, mType.supplyRequired()); mReservedResources = false; } }
Position MorphTask::getEndLocation | ( | Unit | unit | ) | const [virtual] |
int MorphTask::getEndTime | ( | ) | const [virtual] |
Implements Task.
Definition at line 13 of file MorphTask.cpp.
References BWAPI::UnitType::buildTime(), Task::isCompleted(), mRequiredSatisfyTime, mType, and mUnit.
Referenced by getEndTime().
{ if(mUnit && (mUnit->isMorphing() || !isCompleted())) return mUnit->getCompletedTime(); return mRequiredSatisfyTime + mType.buildTime(); }
int MorphTask::getEndTime | ( | Unit | unit | ) | const [virtual] |
Implements Task.
Definition at line 21 of file MorphTask.cpp.
References getEndTime().
{ return getEndTime(); }
UnitGroup MorphTask::getFinishedUnits | ( | ) | [virtual] |
Implements Task.
Definition at line 91 of file MorphTask.cpp.
References UnitGroup::insert(), and mUnit.
virtual std::string MorphTask::getOutputName | ( | ) | const [inline, virtual] |
Implements Task.
Definition at line 32 of file MorphTask.h.
References BWAPI::UnitType::getName(), and mType.
int MorphTask::getPriority | ( | Unit | unit | ) | const [virtual] |
Position MorphTask::getStartLocation | ( | Unit | unit | ) | const [virtual] |
virtual std::string MorphTask::getTaskName | ( | ) | const [inline, virtual] |
void MorphTask::giveUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 60 of file MorphTask.cpp.
References mType, mUnit, reserveResources(), and BWAPI::UnitType::whatBuilds().
{ if(unit->getType() == mType.whatBuilds().first) { mUnit = unit; reserveResources(); } }
virtual bool MorphTask::hasDispatched | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 39 of file MorphTask.h.
References mUnit.
{ return mUnit; }
virtual bool MorphTask::inProgress | ( | ) | const [inline, virtual] |
bool MorphTask::morph | ( | Unit | unit, |
BWAPI::UnitType | previousType | ||
) | [virtual] |
Implements Task.
Definition at line 80 of file MorphTask.cpp.
References freeResources(), and mType.
{ if(unit->getType() == mType || unit->getBuildType() == mType) { freeResources(); return false; } return true; }
bool MorphTask::preUpdate | ( | ) | [virtual] |
void MorphTask::reserveResources | ( | ) | [private] |
Definition at line 127 of file MorphTask.cpp.
References BWAPI::UnitType::gasPrice(), Task::hasEnded(), Singleton< T >::Instance(), BWAPI::UnitType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, and BWAPI::UnitType::supplyRequired().
Referenced by giveUnit(), and returnUnit().
{ if(!mReservedResources && !hasEnded()) { ResourceTracker::Instance().reserveCurrentMinerals(mRequiredSatisfyTime, mType.mineralPrice()); ResourceTracker::Instance().reserveCurrentGas(mRequiredSatisfyTime, mType.gasPrice()); ResourceTracker::Instance().reserveCurrentSupply(mRequiredSatisfyTime, mType.supplyRequired()); mReservedResources = true; } }
void MorphTask::returnUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 69 of file MorphTask.cpp.
References mUnit, StaticUnits::nullunit, and reserveResources().
{ if(mUnit == unit) { reserveResources(); mUnit = StaticUnits::nullunit; } else assert(false); }
virtual void MorphTask::setRequiredSatisfyTime | ( | RequirementGroup | requirements, |
int | time, | ||
int | delay | ||
) | [inline, virtual] |
Reimplemented from Task.
Definition at line 34 of file MorphTask.h.
References mRequiredSatisfyTime.
{ mRequiredSatisfyTime = time; }
virtual int MorphTask::startTime | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 37 of file MorphTask.h.
References mRequiredSatisfyTime.
{ return mRequiredSatisfyTime; }
bool MorphTask::update | ( | ) | [virtual] |
void MorphTask::updateRequirements | ( | ) | [virtual] |
Reimplemented from Task.
Definition at line 106 of file MorphTask.cpp.
References RequirementGroup::addGasRequirement(), RequirementGroup::addMineralRequirement(), Task::addRequirement(), RequirementGroup::addSupplyRequirement(), RequirementGroup::addTechForTypeRequirement(), RequirementGroup::addUnitFilterRequirement(), BWAPI::UnitType::buildTime(), Task::clearRequirements(), freeResources(), BWAPI::UnitType::gasPrice(), UnitFilterFlags::IsComplete, BWAPI::UnitType::mineralPrice(), mType, mUnit, BWAPI::UnitType::supplyRequired(), and BWAPI::UnitType::whatBuilds().
{ clearRequirements(); if(!mUnit) { freeResources(); RequirementGroup requiredConditions; requiredConditions.addUnitFilterRequirement(40, mType.buildTime(), UnitFilter(mType.whatBuilds().first) && UnitFilter(UnitFilterFlags::IsComplete)); requiredConditions.addTechForTypeRequirement(mType); if(mType.mineralPrice() > 0) requiredConditions.addMineralRequirement(mType.mineralPrice()); if(mType.gasPrice() > 0) requiredConditions.addGasRequirement(mType.gasPrice()); if(mType.supplyRequired() > 0) requiredConditions.addSupplyRequirement(mType.supplyRequired()); addRequirement(requiredConditions); } }
bool MorphTask::waitingForUnit | ( | Unit | unit | ) | const [virtual] |
int MorphTask::mRequiredSatisfyTime [private] |
Definition at line 47 of file MorphTask.h.
Referenced by dispatchTime(), freeResources(), getEndTime(), reserveResources(), setRequiredSatisfyTime(), and startTime().
bool MorphTask::mReservedResources [private] |
Definition at line 49 of file MorphTask.h.
Referenced by freeResources(), and reserveResources().
BWAPI::UnitType MorphTask::mType [private] |
Definition at line 43 of file MorphTask.h.
Referenced by freeResources(), getEndTime(), getOutputName(), giveUnit(), morph(), preUpdate(), reserveResources(), update(), and updateRequirements().
Unit MorphTask::mUnit [private] |
Definition at line 45 of file MorphTask.h.
Referenced by getEndTime(), getFinishedUnits(), giveUnit(), hasDispatched(), inProgress(), preUpdate(), returnUnit(), update(), and updateRequirements().