BWAPI
|
00001 #pragma once 00002 #include "../../Interface/Actions/Defend.h" 00003 #include "../../../Layer1Reactive/FSM/Behaviors/EngageEnemies/GroupAttack.h" 00004 #include "L2GroupTacticalAction.h" 00005 00006 // TODO: possibly more than two locations so units can patrol? 00007 00008 class L2Defend : public virtual layer2::Defend, public L2GroupTacticalAction 00009 { 00010 public: 00011 L2Defend(unsigned int priority, const PersistentUnitGroup* initialGroup, Location* location) 00012 : Defend(priority, initialGroup, location) 00013 , L2GroupTacticalAction(priority, initialGroup) 00014 , GroupTacticalAction(priority, initialGroup) 00015 , TacticalAction(priority) 00016 , Process(Spar) 00017 , m_groupAttackFSM(*this) 00018 , m_onEnemyAddedEventHandler(*this) 00019 , m_onBuildingAddedEventHandler(*this) 00020 , m_onEnemyRemovedEventHandler(*this) 00021 { 00022 m_currentLocation = NULL; 00023 m_currentPosition = NULL; 00024 } 00025 00026 ~L2Defend() 00027 { 00028 delete m_currentPosition; 00029 } 00030 00031 //void onTerminate(void* data); 00032 void onEnemyAdded(void* data, EnemyUnit*); 00033 StaticLocation* regionAttackedByEnemy(); 00034 void onBuildingAdded(void* data, OwnUnit*); 00035 void onEnemyRemoved(void* data, EnemyUnit*); 00036 00037 protected: 00038 virtual void executeSpecificImpl(); 00039 virtual void cancelSpecificImpl(); 00040 virtual void terminateSpecificImpl(); 00041 virtual void onUnitAddedToGroup(void*, BWAPI::Unit* unit); 00042 virtual void onUnitRemovedFromGroup(void*, BWAPI::Unit* unit); 00043 void unsubscribeAllEnemyUnitAdded(); 00044 void subscribeEnemyUnitAdded(StaticLocation* cl); 00045 void subscribeBegin(); 00046 00047 Event<boost::tuples::tuple<OwnUnit*>>::SubscriberID m_onBuildingAddedSubscriberId; 00048 Event<boost::tuples::tuple<EnemyUnit*>>::SubscriberID m_onEnemyAddedSubscriberId; 00049 Event<boost::tuples::tuple<EnemyUnit*>>::SubscriberID m_onEnemyRemovedSubscriberId; 00050 //Event<boost::tuples::tuple<>>::SubscriberID m_onTerminateSubscriberId; 00051 00052 EVENT_HANDLER1(L2Defend, onBuildingAdded, OwnUnit*) m_onBuildingAddedEventHandler; 00053 EVENT_HANDLER1(L2Defend, onEnemyAdded, EnemyUnit*) m_onEnemyAddedEventHandler; 00054 EVENT_HANDLER1(L2Defend, onEnemyRemoved, EnemyUnit*) m_onEnemyRemovedEventHandler; 00055 //EVENT_HANDLER(L2Defend, onTerminate) m_onTerminateEventHandle; 00056 00057 private: 00058 ProcessContainer<GroupAttack> m_groupAttackFSM; 00059 bool waiting; 00060 StaticLocation* m_currentLocation; 00061 BWAPI::Position* m_currentPosition; 00062 EnemyUnit* m_currentTarget; 00063 std::map<StaticLocation*,Event<boost::tuples::tuple<EnemyUnit*>>::SubscriberID> mapSubscription; 00064 };