BWAPI
Skynet/Skynet/ObserverScoutTask.cpp
Go to the documentation of this file.
00001 #include "ObserverScoutTask.h"
00002 #include "ScoutManager.h"
00003 
00004 ObserverScoutTask::ObserverScoutTask(TaskType priority, ScoutData data)
00005         : Task(priority)
00006         , mData(data)
00007 {
00008 }
00009 
00010 int ObserverScoutTask::getEndTime() const
00011 {
00012         return Requirement::maxTime;
00013 }
00014 
00015 int ObserverScoutTask::getEndTime(Unit unit) const
00016 {
00017         return getEndTime();
00018 }
00019 
00020 int ObserverScoutTask::getPriority(Unit unit) const
00021 {
00022         return 10;
00023 }
00024 
00025 Position ObserverScoutTask::getStartLocation(Unit unit) const
00026 {
00027         if(mData)
00028                 return mData->getNextPosition(unit->getPosition());
00029 
00030         return unit->getPosition();
00031 }
00032 
00033 Position ObserverScoutTask::getEndLocation(Unit unit) const
00034 {
00035         if(mData)
00036                 return mData->getLastPosition(unit->getPosition());
00037 
00038         return unit->getPosition();
00039 }
00040 
00041 bool ObserverScoutTask::preUpdate()
00042 {
00043         if(mData && mData->isAchieved())
00044                 mData.reset();
00045 
00046         if(mUnit && !mData)
00047                 mData = ScoutManager::Instance().getScoutData(ScoutUnitType::Observer);
00048 
00049         return false;
00050 }
00051 
00052 bool ObserverScoutTask::update()
00053 {
00054         if(mUnit)
00055         {
00056                 Goal observerGoal;
00057 
00058                 if(mData)
00059                         observerGoal = Goal(ActionType::FallBack, mData->getNextPosition(mUnit->getPosition()));
00060 
00061                 if(observerGoal.getGoalType() == GoalType::None)
00062                 {
00063                         ;//TODO: go to closest cloaked enemy unit
00064                         //TODO: go to closest enemy scv that is in the fog
00065                 }
00066 
00067                 mUnitBehaviour.update(observerGoal, UnitGroup());
00068         }
00069 
00070         return hasEnded() && !mUnit;
00071 }
00072 
00073 void ObserverScoutTask::updateRequirements()
00074 {
00075         clearRequirements();
00076 
00077         if(!mUnit && !shouldReturnUnit())
00078         {
00079                 RequirementGroup requirementOne;
00080                 if(mData)
00081                         requirementOne.addUnitFilterRequirement(10, Requirement::maxTime, UnitFilter(BWAPI::UnitTypes::Protoss_Observer) && UnitFilter(UnitFilterFlags::IsComplete), mData->getNextPosition());
00082                 else
00083                         requirementOne.addUnitFilterRequirement(10, Requirement::maxTime, UnitFilter(BWAPI::UnitTypes::Protoss_Observer) && UnitFilter(UnitFilterFlags::IsComplete));
00084 
00085                 addRequirement(requirementOne);
00086         }
00087 }
00088 
00089 bool ObserverScoutTask::waitingForUnit(Unit unit) const
00090 {
00091         return false;
00092 }
00093 
00094 void ObserverScoutTask::giveUnit(Unit unit)
00095 {
00096         mUnit = unit;
00097         mUnitBehaviour.set(unit);
00098 }
00099 
00100 void ObserverScoutTask::returnUnit(Unit unit)
00101 {
00102         if(!mUnit->exists() && mData)
00103                 ScoutManager::Instance().updateLastScoutType(mData, ScoutType::FailedWithAir);
00104 
00105         complete();
00106 
00107         mUnit = StaticUnits::nullunit;
00108         mUnitBehaviour.onDeleted();
00109 }
00110 
00111 bool ObserverScoutTask::morph(Unit unit, BWAPI::UnitType previousType)
00112 {
00113         return true;
00114 }
00115 
00116 UnitGroup ObserverScoutTask::getFinishedUnits()
00117 {
00118         UnitGroup returnUnits;
00119 
00120         returnUnits.insert(mUnit);
00121 
00122         return returnUnits;
00123 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines