BWAPI
|
00001 #pragma once 00002 00003 #include "Interface.h" 00004 00005 #include "Task.h" 00006 #include "BuildingPlacer.h" 00007 00008 class ConstructionTask : public Task 00009 { 00010 public: 00011 ConstructionTask(TaskType priority, BuildingLocation position, BWAPI::UnitType type); 00012 00013 virtual int getEndTime() const; 00014 virtual int getEndTime(Unit unit) const; 00015 00016 virtual int getPriority(Unit unit) const; 00017 00018 virtual Position getStartLocation(Unit unit) const; 00019 virtual Position getEndLocation(Unit unit) const; 00020 00021 virtual bool preUpdate(); 00022 virtual bool update(); 00023 00024 virtual void updateRequirements(); 00025 00026 virtual bool waitingForUnit(Unit unit) const; 00027 virtual void giveUnit(Unit unit); 00028 virtual void returnUnit(Unit unit); 00029 virtual bool morph(Unit unit, BWAPI::UnitType previousType); 00030 virtual UnitGroup getFinishedUnits(); 00031 00032 virtual std::string getTaskName() const { return "Constructing"; } 00033 virtual std::string getOutputName() const { return mType.getName(); } 00034 00035 virtual void setRequiredSatisfyTime(RequirementGroup requirements, int time, int delay); 00036 00037 virtual int dispatchTime() const { return mRequiredSatisfyTime - mRequiredDelayTime; } 00038 virtual int startTime() const { return mRequiredSatisfyTime; } 00039 00040 virtual bool hasDispatched() const { return inProgress() || mBuilder; } 00041 virtual bool inProgress() const { return mProducedUnit && mProducedUnit->exists(); } 00042 00043 private: 00044 BWAPI::UnitType mType; 00045 00046 Unit mBuilder; 00047 Unit mProducedUnit; 00048 00049 BuildingLocation mBuildingLocation; 00050 ReservedLocation mReservedLocation; 00051 00052 int mRequiredSatisfyTime; 00053 int mRequiredDelayTime; 00054 00055 bool mReservedResources; 00056 00057 inline bool finishedWithBuilder() { return shouldReturnUnit() || (inProgress() && mType.getRace() == BWAPI::Races::Protoss); } 00058 00059 void reserveResources(); 00060 void freeResources(); 00061 00062 void reserveLocation(); 00063 void freeLocation(); 00064 };