BWAPI
Public Member Functions | Private Member Functions | Private Attributes
GatherTask Class Reference

#include <GatherTask.h>

Inheritance diagram for GatherTask:
Inheritance graph
[legend]
Collaboration diagram for GatherTask:
Collaboration graph
[legend]

List of all members.

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

Detailed Description

Definition at line 8 of file GatherTask.h.


Constructor & Destructor Documentation

GatherTask::GatherTask ( Unit  resource,
Base  base 
)

Definition at line 5 of file GatherTask.cpp.

        : Task(TaskType::Medium)
        , mResource(resource)
        , mBase(base)
{
}

Member Function Documentation

Position GatherTask::getEndLocation ( Unit  unit) const [virtual]

Implements Task.

Definition at line 27 of file GatherTask.cpp.

{
        return unit->getPosition();
}
int GatherTask::getEndTime ( ) const [virtual]

Implements Task.

Definition at line 12 of file GatherTask.cpp.

References Requirement::maxTime.

Referenced by getEndTime().

Here is the caller graph for this function:

int GatherTask::getEndTime ( Unit  unit) const [virtual]

Implements Task.

Definition at line 17 of file GatherTask.cpp.

References getEndTime().

{
        return getEndTime();
}

Here is the call graph for this function:

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;
}

Here is the call graph for this function:

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;
}

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;
}

Here is the call graph for this function:

Position GatherTask::getStartLocation ( Unit  unit) const [virtual]

Implements Task.

Definition at line 22 of file GatherTask.cpp.

{
        return unit->getPosition();
}
virtual std::string GatherTask::getTaskName ( ) const [inline, virtual]

Implements Task.

Definition at line 32 of file GatherTask.h.

{ return "Gathering"; }
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]

Implements Task.

Definition at line 92 of file GatherTask.cpp.

{
        return true;
}
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;
}

Here is the call graph for this function:

void GatherTask::returnUnit ( Unit  unit) [virtual]

Implements Task.

Definition at line 71 of file GatherTask.cpp.

References mWorkerOne, mWorkerThree, mWorkerTwo, and StaticUnits::nullunit.

bool GatherTask::update ( ) [virtual]

Implements Task.

Definition at line 42 of file GatherTask.cpp.

References Task::hasEnded(), mWorkerOne, mWorkerThree, mWorkerTwo, and updateWorker().

Here is the call graph for this function:

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);
                }
        }
}

Here is the call graph for this function:

Here is the caller graph for this function:

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);
}

Here is the caller graph for this function:

bool GatherTask::waitingForUnit ( Unit  unit) const [virtual]

Implements Task.

Definition at line 54 of file GatherTask.cpp.

{
        return false;
}
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;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Definition at line 41 of file GatherTask.h.

Referenced by updateRequirements(), and updateWorker().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines