BWAPI
|
00001 #pragma once 00002 #include "../../../Layer1Reactive/FSM/Behaviors/GatherMinerals.h" 00003 #include "../../../Layer1Reactive/FSM/Behaviors/Move.h" 00004 #include "../../Interface/Actions/Collect.h" 00005 #include "L2GroupTacticalAction.h" 00006 00007 class L2Collect : public virtual layer2::Collect, public L2GroupTacticalAction 00008 { 00009 public: 00010 L2Collect(unsigned int priority, const PersistentUnitGroup* initialGroup, BaseLocation* baseLocation) 00011 : Collect(priority, initialGroup, baseLocation) 00012 , L2GroupTacticalAction(priority, initialGroup) 00013 , GroupTacticalAction(priority, initialGroup) 00014 , TacticalAction(priority) 00015 , Process(Spar) 00016 { 00017 } 00018 00019 }; 00020 00021 class L2CollectMinerals : public virtual layer2::CollectMinerals, public L2Collect 00022 { 00023 public: 00024 L2CollectMinerals(unsigned int priority, const PersistentUnitGroup* initialGroup, BaseLocation* baseLocation) 00025 : CollectMinerals(priority, initialGroup, baseLocation) 00026 , L2Collect(priority, initialGroup, baseLocation) 00027 , Collect(priority, initialGroup, baseLocation) 00028 , GroupTacticalAction(priority, initialGroup) 00029 , TacticalAction(priority) 00030 , Process(Spar) 00031 , m_baseLocation(baseLocation) 00032 , m_gatherBehavior(this, priority, m_gatheringGroup, baseLocation) 00033 , m_gatherBehaviorTerminatedEventHandler(*this) 00034 , m_moveBehavior(NULL) 00035 , m_unitAtDestinationEventHandler(*this) 00036 , m_moveBehaviorTerminatedEventHandler(*this) 00037 , m_movingGroup(new PersistentUnitGroup("Collect Mineral, Moving group"), *this) 00038 , m_gatheringGroup(new PersistentUnitGroup("Collect Mineral, Gathering group"), *this) 00039 { 00040 } 00041 00042 private: 00043 // Groups must be declared before their behaviors ! 00044 AutoPtr<PersistentUnitGroup> m_movingGroup; 00045 AutoPtr<PersistentUnitGroup> m_gatheringGroup; 00046 00047 GatherMinerals m_gatherBehavior; 00048 EVENT_HANDLER(L2CollectMinerals, onGatherBehaviorTerminated) m_gatherBehaviorTerminatedEventHandler; 00049 Event<boost::tuples::tuple<>>::SubscriberID m_gatherBehaviorTerminatedSubscriberId; 00050 00051 Move* m_moveBehavior; 00052 EVENT_HANDLER1(L2CollectMinerals, onUnitAtDestination, BWAPI::Unit*) m_unitAtDestinationEventHandler; 00053 Event<boost::tuples::tuple<BWAPI::Unit*>>::SubscriberID m_unitAtDestinationSubscriberId; 00054 EVENT_HANDLER(L2CollectMinerals, onMoveBehaviorTerminated) m_moveBehaviorTerminatedEventHandler; 00055 Event<boost::tuples::tuple<>>::SubscriberID m_moveBehaviorTerminatedSubscriberId; 00056 00057 protected: 00058 // must be smaller than the probe sight range (256) 00059 static const size_t MINERAL_PROXIMITY = 128; 00060 00061 virtual void executeSpecificImpl(); 00062 virtual void cancelSpecificImpl(); 00063 virtual void terminateSpecificImpl(); 00064 00065 virtual void onUnitAddedToGroup(void*, BWAPI::Unit* unit); 00066 virtual void onUnitRemovedFromGroup(void*, BWAPI::Unit* unit); 00067 00068 void startMoveBehavior(); 00069 00070 void onUnitAtDestination(void* data, BWAPI::Unit* unit); 00071 void onMoveBehaviorTerminated(void* data); 00072 void onGatherBehaviorTerminated(void* data); 00073 00074 BaseLocation* m_baseLocation; 00075 }; 00076 00077 class L2CollectGas : public virtual layer2::CollectGas, public L2Collect 00078 { 00079 public: 00080 L2CollectGas(unsigned int priority, const PersistentUnitGroup* initialGroup, BaseLocation* baseLocation) 00081 : CollectGas(priority, initialGroup, baseLocation) 00082 , L2Collect(priority, initialGroup, baseLocation) 00083 , Collect(priority, initialGroup, baseLocation) 00084 , GroupTacticalAction(priority, initialGroup) 00085 , TacticalAction(priority) 00086 , Process(Spar) 00087 { 00088 } 00089 00090 protected: 00091 virtual void executeSpecificImpl(); 00092 virtual void cancelSpecificImpl(); 00093 virtual void terminateSpecificImpl(); 00094 00095 virtual void onUnitAddedToGroup(void*, BWAPI::Unit* unit); 00096 virtual void onUnitRemovedFromGroup(void*, BWAPI::Unit* unit); 00097 };