BWAPI
Skynet/Skynet/MicroAction.h
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines