BWAPI
|
#include <GatherTask.h>
Public Member Functions | |
GatherTask (Unit resource, Base base) | |
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 |
double | getMineralRate () |
double | getGasRate () |
Private Member Functions | |
void | updateWorker (Unit worker) |
int | workerPriority (int workerNumber) const |
Private Attributes | |
Base | mBase |
Unit | mResource |
Unit | mWorkerOne |
Unit | mWorkerTwo |
Unit | mWorkerThree |
Definition at line 8 of file GatherTask.h.
GatherTask::GatherTask | ( | Unit | resource, |
Base | base | ||
) |
Definition at line 5 of file GatherTask.cpp.
: Task(TaskType::Medium) , mResource(resource) , mBase(base) { }
Position GatherTask::getEndLocation | ( | Unit | unit | ) | const [virtual] |
int GatherTask::getEndTime | ( | ) | const [virtual] |
Implements Task.
Definition at line 12 of file GatherTask.cpp.
References Requirement::maxTime.
Referenced by getEndTime().
{ return Requirement::maxTime; }
int GatherTask::getEndTime | ( | Unit | unit | ) | const [virtual] |
Implements Task.
Definition at line 17 of file GatherTask.cpp.
References getEndTime().
{ return getEndTime(); }
UnitGroup GatherTask::getFinishedUnits | ( | ) | [virtual] |
Implements Task.
Definition at line 97 of file GatherTask.cpp.
References UnitGroup::insert(), mWorkerOne, mWorkerThree, and mWorkerTwo.
{ UnitGroup returnUnits; if(mWorkerOne) returnUnits.insert(mWorkerOne); if(mWorkerTwo) returnUnits.insert(mWorkerTwo); if(mWorkerThree) returnUnits.insert(mWorkerThree); return returnUnits; }
double GatherTask::getGasRate | ( | ) |
Definition at line 197 of file GatherTask.cpp.
References mResource, mWorkerOne, mWorkerThree, and mWorkerTwo.
{ if(!mResource->getType().isRefinery()) return 0.0; if(mWorkerThree) return 3 * 8/180.0; if(mWorkerTwo) return 2 * 8/180.0; if(mWorkerOne) return 8/180.0; return 0.0; }
double GatherTask::getMineralRate | ( | ) |
Definition at line 180 of file GatherTask.cpp.
References mResource, mWorkerOne, mWorkerThree, and mWorkerTwo.
{ if(mResource->getType().isRefinery()) return 0.0; if(mWorkerThree) return 3 * 8/180.0; if(mWorkerTwo) return 2 * 8/180.0; if(mWorkerOne) return 8/180.0; return 0.0; }
virtual std::string GatherTask::getOutputName | ( | ) | const [inline, virtual] |
Implements Task.
Definition at line 33 of file GatherTask.h.
References mResource.
{ return mResource->getType().getName(); }
int GatherTask::getPriority | ( | Unit | unit | ) | const [virtual] |
Implements Task.
Definition at line 111 of file GatherTask.cpp.
References mWorkerOne, mWorkerThree, mWorkerTwo, and workerPriority().
{ if(!mWorkerOne || unit == mWorkerOne) return workerPriority(1); else if(!mWorkerTwo || unit == mWorkerTwo) return workerPriority(2); else if(!mWorkerThree || unit == mWorkerThree) return workerPriority(3); assert(false); return 10; }
Position GatherTask::getStartLocation | ( | Unit | unit | ) | const [virtual] |
virtual std::string GatherTask::getTaskName | ( | ) | const [inline, virtual] |
void GatherTask::giveUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 59 of file GatherTask.cpp.
References mWorkerOne, mWorkerThree, and mWorkerTwo.
{ if(!mWorkerOne) mWorkerOne = unit; else if(!mWorkerTwo) mWorkerTwo = unit; else if(!mWorkerThree) mWorkerThree = unit; else assert(false); }
bool GatherTask::morph | ( | Unit | unit, |
BWAPI::UnitType | previousType | ||
) | [virtual] |
bool GatherTask::preUpdate | ( | ) | [virtual] |
Implements Task.
Definition at line 32 of file GatherTask.cpp.
References Task::hasEnded(), and updateRequirements().
{ if(hasEnded()) return true; updateRequirements(); return false; }
void GatherTask::returnUnit | ( | Unit | unit | ) | [virtual] |
Implements Task.
Definition at line 71 of file GatherTask.cpp.
References mWorkerOne, mWorkerThree, mWorkerTwo, and StaticUnits::nullunit.
{ if(mWorkerOne == unit) { mWorkerOne = mWorkerTwo; mWorkerTwo = mWorkerThree; mWorkerThree = StaticUnits::nullunit; } else if(mWorkerTwo == unit) { mWorkerTwo = mWorkerThree; mWorkerThree = StaticUnits::nullunit; } else if(mWorkerThree == unit) { mWorkerThree = StaticUnits::nullunit; } else assert(false); }
bool GatherTask::update | ( | ) | [virtual] |
Implements Task.
Definition at line 42 of file GatherTask.cpp.
References Task::hasEnded(), mWorkerOne, mWorkerThree, mWorkerTwo, and updateWorker().
{ if(mWorkerOne) updateWorker(mWorkerOne); if(mWorkerTwo) updateWorker(mWorkerTwo); if(mWorkerThree) updateWorker(mWorkerThree); return hasEnded() && !mWorkerOne && !mWorkerTwo && !mWorkerThree; }
void GatherTask::updateRequirements | ( | ) | [virtual] |
Reimplemented from Task.
Definition at line 136 of file GatherTask.cpp.
References Task::addRequirement(), RequirementGroup::addTimeRequirement(), RequirementGroup::addUnitFilterRequirement(), Task::clearRequirements(), UnitFilterFlags::IsComplete, UnitFilterFlags::IsWorker, Requirement::maxTime, mBase, mResource, mWorkerOne, mWorkerThree, mWorkerTwo, and workerPriority().
Referenced by preUpdate().
{ clearRequirements(); //TODO: any worker will do that i can control, dont limit to my races workers Unit resourceDepot = mBase->getResourceDepot(); if(resourceDepot) { int completeTime = 0; if(!resourceDepot->isCompleted()) completeTime = resourceDepot->getCompletedTime(); if(mResource->getType().isRefinery() && !mResource->isCompleted()) completeTime = std::max(completeTime, mResource->getCompletedTime()); if(!mWorkerOne) { RequirementGroup requirementOne; requirementOne.addUnitFilterRequirement(workerPriority(1), Requirement::maxTime, UnitFilter(UnitFilterFlags::IsWorker) && UnitFilter(UnitFilterFlags::IsComplete), mResource->getPosition()); if(completeTime > 0) requirementOne.addTimeRequirement(completeTime); addRequirement(requirementOne); } if(!mWorkerTwo) { RequirementGroup requirementTwo; requirementTwo.addUnitFilterRequirement(workerPriority(2), Requirement::maxTime, UnitFilter(UnitFilterFlags::IsWorker) && UnitFilter(UnitFilterFlags::IsComplete), mResource->getPosition()); if(completeTime > 0) requirementTwo.addTimeRequirement(completeTime); addRequirement(requirementTwo); } if(!mWorkerThree) { RequirementGroup requirementThree; requirementThree.addUnitFilterRequirement(workerPriority(3), Requirement::maxTime, UnitFilter(UnitFilterFlags::IsWorker) && UnitFilter(UnitFilterFlags::IsComplete), mResource->getPosition()); if(completeTime > 0) requirementThree.addTimeRequirement(completeTime); addRequirement(requirementThree); } } }
void GatherTask::updateWorker | ( | Unit | worker | ) | [private] |
Definition at line 124 of file GatherTask.cpp.
References mBase, and mResource.
Referenced by update().
{ if(worker->isCarryingGas() || worker->isCarryingMinerals()) { Unit resourceDepot = mBase->getResourceDepot(); if(resourceDepot) worker->returnCargo(resourceDepot); } else worker->gather(mResource); }
bool GatherTask::waitingForUnit | ( | Unit | unit | ) | const [virtual] |
int GatherTask::workerPriority | ( | int | workerNumber | ) | const [private] |
Definition at line 214 of file GatherTask.cpp.
References Singleton< T >::Instance(), and mResource.
Referenced by getPriority(), and updateRequirements().
{ if(mResource->getType().isRefinery()) { int gLevel = ResourceManager::Instance().getGasLevel(); if(gLevel == 8) return 25; else if(workerNumber == 1) { if(gLevel > 3) return 25; else if(gLevel > 2) return 20; else if(gLevel > 1) return 15; else if(gLevel > 0) return 10; else return 0; } else if(workerNumber == 2) { if(gLevel > 5) return 25; else if(gLevel > 4) return 20; else if(gLevel > 3) return 15; else if(gLevel > 2) return 10; else return 0; } else if(workerNumber == 3) { if(gLevel > 7) return 25; else if(gLevel > 6) return 20; else if(gLevel > 5) return 15; else if(gLevel > 4) return 10; else return 0; } } else if(workerNumber == 1) return 20; else if(workerNumber == 2) return 15; else if(workerNumber == 3) return 10; return 0; }
Base GatherTask::mBase [private] |
Definition at line 41 of file GatherTask.h.
Referenced by updateRequirements(), and updateWorker().
Unit GatherTask::mResource [private] |
Definition at line 42 of file GatherTask.h.
Referenced by getGasRate(), getMineralRate(), getOutputName(), updateRequirements(), updateWorker(), and workerPriority().
Unit GatherTask::mWorkerOne [private] |
Definition at line 44 of file GatherTask.h.
Referenced by getFinishedUnits(), getGasRate(), getMineralRate(), getPriority(), giveUnit(), returnUnit(), update(), and updateRequirements().
Unit GatherTask::mWorkerThree [private] |
Definition at line 46 of file GatherTask.h.
Referenced by getFinishedUnits(), getGasRate(), getMineralRate(), getPriority(), giveUnit(), returnUnit(), update(), and updateRequirements().
Unit GatherTask::mWorkerTwo [private] |
Definition at line 45 of file GatherTask.h.
Referenced by getFinishedUnits(), getGasRate(), getMineralRate(), getPriority(), giveUnit(), returnUnit(), update(), and updateRequirements().