BWAPI
|
#include <TrainTask.h>
Public Member Functions | |
TrainTask (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 |
BWAPI::UnitType | getTrainType () |
Private Member Functions | |
void | reserveResources () |
void | freeResources () |
Private Attributes | |
BWAPI::UnitType | mType |
Unit | mProductionBuilding |
Unit | mProducedUnit |
int | mRequiredSatisfyTime |
bool | mReservedResources |
int | mOrderTime |
Definition at line 7 of file TrainTask.h.
TrainTask::TrainTask | ( | TaskType | priority, |
BWAPI::UnitType | type | ||
) |
Definition at line 6 of file TrainTask.cpp.
: Task(priority) , mType(type) , mReservedResources(false) , mRequiredSatisfyTime(BWAPI::Broodwar->getFrameCount()) , mOrderTime(0) { }
virtual int TrainTask::dispatchTime | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 36 of file TrainTask.h.
References mRequiredSatisfyTime.
{ return mRequiredSatisfyTime; }
void TrainTask::freeResources | ( | ) | [private] |
Definition at line 167 of file TrainTask.cpp.
References BWAPI::UnitType::gasPrice(), Singleton< T >::Instance(), BWAPI::UnitType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, and BWAPI::UnitType::supplyRequired().
Referenced by giveUnit(), returnUnit(), 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 TrainTask::getEndLocation | ( | Unit | unit | ) | const [virtual] |
int TrainTask::getEndTime | ( | ) | const [virtual] |
Implements Task.
Definition at line 15 of file TrainTask.cpp.
References BWAPI::Broodwar, BWAPI::UnitType::buildTime(), BWAPI::Game::getFrameCount(), Requirement::maxTime, mProducedUnit, mProductionBuilding, mRequiredSatisfyTime, and mType.
Referenced by getEndTime().
{ if(mProducedUnit && mProductionBuilding) return BWAPI::Broodwar->getFrameCount() + mProductionBuilding->getRemainingTrainTime(); if(mProductionBuilding) return BWAPI::Broodwar->getFrameCount() + mType.buildTime(); if(mRequiredSatisfyTime == Requirement::maxTime) return mRequiredSatisfyTime; return std::max(mRequiredSatisfyTime, BWAPI::Broodwar->getFrameCount()) + mType.buildTime(); }
int TrainTask::getEndTime | ( | Unit | unit | ) | const [virtual] |
Implements Task.
Definition at line 29 of file TrainTask.cpp.
References getEndTime().
{ return getEndTime(); }
UnitGroup TrainTask::getFinishedUnits | ( | ) | [virtual] |
Implements Task.
Definition at line 117 of file TrainTask.cpp.
References UnitGroup::insert(), mProducedUnit, and mProductionBuilding.
{ UnitGroup returnUnits; if(mProductionBuilding) returnUnits.insert(mProductionBuilding); if(mProducedUnit) returnUnits.insert(mProducedUnit); return returnUnits; }
virtual std::string TrainTask::getOutputName | ( | ) | const [inline, virtual] |
Implements Task.
Definition at line 32 of file TrainTask.h.
References BWAPI::UnitType::getName(), and mType.
int TrainTask::getPriority | ( | Unit | unit | ) | const [virtual] |
Position TrainTask::getStartLocation | ( | Unit | unit | ) | const [virtual] |
virtual std::string TrainTask::getTaskName | ( | ) | const [inline, virtual] |
BWAPI::UnitType TrainTask::getTrainType | ( | ) | [inline] |
void TrainTask::giveUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 82 of file TrainTask.cpp.
References freeResources(), mProducedUnit, mProductionBuilding, mType, reserveResources(), and BWAPI::UnitType::whatBuilds().
{ if(unit->getType() == mType.whatBuilds().first) { reserveResources(); mProductionBuilding = unit; } else { freeResources(); mProducedUnit = unit; } }
virtual bool TrainTask::hasDispatched | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 39 of file TrainTask.h.
References mProductionBuilding.
{ return mProductionBuilding; }
virtual bool TrainTask::inProgress | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 40 of file TrainTask.h.
References mProducedUnit.
{ return mProducedUnit; }
bool TrainTask::morph | ( | Unit | unit, |
BWAPI::UnitType | previousType | ||
) | [virtual] |
bool TrainTask::preUpdate | ( | ) | [virtual] |
Implements Task.
Definition at line 44 of file TrainTask.cpp.
References Task::complete(), mProducedUnit, mProductionBuilding, and Task::shouldReturnUnit().
{ if(mProducedUnit && mProducedUnit->isCompleted()) { complete(); return true; } if(mProductionBuilding && shouldReturnUnit()) return true; return false; }
void TrainTask::reserveResources | ( | ) | [private] |
Definition at line 156 of file TrainTask.cpp.
References BWAPI::UnitType::gasPrice(), Task::hasEnded(), Singleton< T >::Instance(), BWAPI::UnitType::mineralPrice(), mRequiredSatisfyTime, mReservedResources, mType, and BWAPI::UnitType::supplyRequired().
Referenced by giveUnit().
{ if(!mReservedResources && !hasEnded()) { ResourceTracker::Instance().reserveCurrentMinerals(mRequiredSatisfyTime, mType.mineralPrice()); ResourceTracker::Instance().reserveCurrentGas(mRequiredSatisfyTime, mType.gasPrice()); ResourceTracker::Instance().reserveCurrentSupply(mRequiredSatisfyTime, mType.supplyRequired()); mReservedResources = true; } }
void TrainTask::returnUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 96 of file TrainTask.cpp.
References freeResources(), mProducedUnit, mProductionBuilding, and StaticUnits::nullunit.
{ if(mProductionBuilding == unit) { freeResources(); mProductionBuilding = StaticUnits::nullunit; } else if(mProducedUnit == unit) { freeResources(); mProducedUnit = StaticUnits::nullunit; } else assert(false); }
virtual void TrainTask::setRequiredSatisfyTime | ( | RequirementGroup | requirements, |
int | time, | ||
int | delay | ||
) | [inline, virtual] |
Reimplemented from Task.
Definition at line 34 of file TrainTask.h.
References mRequiredSatisfyTime.
{ mRequiredSatisfyTime = time; }
virtual int TrainTask::startTime | ( | ) | const [inline, virtual] |
Reimplemented from Task.
Definition at line 37 of file TrainTask.h.
References mRequiredSatisfyTime.
{ return mRequiredSatisfyTime; }
bool TrainTask::update | ( | ) | [virtual] |
Implements Task.
Definition at line 58 of file TrainTask.cpp.
References Task::hasEnded(), mProducedUnit, mProductionBuilding, and mType.
{ if(mProductionBuilding) { if(!mProducedUnit) { if(!mProductionBuilding->isTraining()) mProductionBuilding->train(mType); } else if(mProducedUnit->getType() != mType) mProductionBuilding->cancel(); } return hasEnded() && !mProductionBuilding && !mProducedUnit; }
void TrainTask::updateRequirements | ( | ) | [virtual] |
Reimplemented from Task.
Definition at line 134 of file TrainTask.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, UnitFilterFlags::IsLifted, BWAPI::UnitType::mineralPrice(), mProductionBuilding, mType, BWAPI::UnitType::supplyRequired(), and BWAPI::UnitType::whatBuilds().
{ clearRequirements(); if(!mProductionBuilding) { RequirementGroup requiredConditions; freeResources(); requiredConditions.addUnitFilterRequirement(40, mType.buildTime(), UnitFilter(mType.whatBuilds().first) && UnitFilter(UnitFilterFlags::IsComplete) && !UnitFilter(UnitFilterFlags::IsLifted)); 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 TrainTask::waitingForUnit | ( | Unit | unit | ) | const [virtual] |
Implements Task.
Definition at line 74 of file TrainTask.cpp.
References mProductionBuilding, and Task::shouldReturnUnit().
{ if(!shouldReturnUnit() && mProductionBuilding && mProductionBuilding->getBuildUnit() == unit) return true; return false; }
int TrainTask::mOrderTime [private] |
Definition at line 54 of file TrainTask.h.
Unit TrainTask::mProducedUnit [private] |
Definition at line 48 of file TrainTask.h.
Referenced by getEndTime(), getFinishedUnits(), giveUnit(), inProgress(), preUpdate(), returnUnit(), and update().
Unit TrainTask::mProductionBuilding [private] |
Definition at line 47 of file TrainTask.h.
Referenced by getEndTime(), getFinishedUnits(), giveUnit(), hasDispatched(), preUpdate(), returnUnit(), update(), updateRequirements(), and waitingForUnit().
int TrainTask::mRequiredSatisfyTime [private] |
Definition at line 50 of file TrainTask.h.
Referenced by dispatchTime(), freeResources(), getEndTime(), reserveResources(), setRequiredSatisfyTime(), and startTime().
bool TrainTask::mReservedResources [private] |
Definition at line 52 of file TrainTask.h.
Referenced by freeResources(), and reserveResources().
BWAPI::UnitType TrainTask::mType [private] |
Definition at line 45 of file TrainTask.h.
Referenced by freeResources(), getEndTime(), getOutputName(), getTrainType(), giveUnit(), reserveResources(), update(), and updateRequirements().