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