|
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().
1.7.6.1