BWAPI
|
00001 #pragma once 00002 00003 #include "Interface.h" 00004 #include "Goal.h" 00005 #include "UnitGroup.h" 00006 00007 class MicroActionBaseClass 00008 { 00009 public: 00010 MicroActionBaseClass(){} 00011 00012 virtual bool update(const Goal &squadGoal, const UnitGroup &squadUnitGroup) = 0; 00013 00014 virtual bool hasEnded() = 0; 00015 00016 virtual void removeUnit(Unit unit) = 0; 00017 }; 00018 00019 typedef std::tr1::shared_ptr<MicroActionBaseClass> MicroAction; 00020 00021 class SingleMicroActionBaseClass : public MicroActionBaseClass 00022 { 00023 public: 00024 SingleMicroActionBaseClass(Unit unit) : MicroActionBaseClass(), mUnit(unit) {} 00025 SingleMicroActionBaseClass() : MicroActionBaseClass() {} 00026 00027 virtual bool update(const Goal &squadGoal, const UnitGroup &squadUnitGroup) = 0; 00028 00029 virtual bool hasEnded() { return !mUnit; } 00030 00031 virtual void removeUnit(Unit unit) 00032 { 00033 mUnit = StaticUnits::nullunit; 00034 } 00035 00036 protected: 00037 Unit mUnit; 00038 }; 00039 00040 typedef std::tr1::shared_ptr<SingleMicroActionBaseClass> SingleMicroAction; 00041 00042 class GroupMicroActionBaseClass : public MicroActionBaseClass 00043 { 00044 public: 00045 GroupMicroActionBaseClass(UnitGroup units) : MicroActionBaseClass(), mUnits(units) {} 00046 GroupMicroActionBaseClass(Unit unit) : MicroActionBaseClass() { mUnits.insert(unit); } 00047 GroupMicroActionBaseClass() : MicroActionBaseClass() {} 00048 00049 virtual bool update(const Goal &squadGoal, const UnitGroup &squadUnitGroup) = 0; 00050 00051 virtual bool hasEnded() { return mUnits.empty(); } 00052 00053 virtual bool finishedWithAUnit() { return false; } 00054 virtual UnitGroup getFinishedUnits() { return UnitGroup(); } 00055 00056 virtual void removeUnit(Unit unit) 00057 { 00058 mUnits.erase(unit); 00059 } 00060 00061 virtual void addUnit(Unit unit) 00062 { 00063 mUnits.insert(unit); 00064 } 00065 00066 virtual bool requestingExtraUnits() { return false; } 00067 00068 virtual std::vector<std::map<BWAPI::UnitType, int>> getRequestedUnits() { return std::vector<std::map<BWAPI::UnitType, int>>(); } 00069 00070 protected: 00071 UnitGroup mUnits; 00072 }; 00073 00074 typedef std::tr1::shared_ptr<GroupMicroActionBaseClass> GroupMicroAction;