BWAPI
|
00001 #pragma once 00002 #include "Behavior.h" 00003 00007 class IUnitBehavior : public virtual IBehavior 00008 { 00009 public: 00010 IUnitBehavior(const Process* parent, unsigned int initialPriority, BWAPI::Unit* unit) 00011 : IBehavior(parent, initialPriority) 00012 , IFSM(parent) 00013 , Process(parent) 00014 , m_unitDestroyEventHandler(*this) 00015 , m_unit(unit) 00016 { 00017 } 00018 00019 BWAPI::Unit* getUnit() 00020 { 00021 return m_unit; 00022 } 00023 00024 void onUnitDestroy(void*) 00025 { 00026 terminate(UnitDestroyed); 00027 } 00028 00029 static const TerminationMode UnitDestroyed; 00030 00032 // GUI // 00034 virtual std::set<BWAPI::Unit*> getCommandedUnits() const 00035 { 00036 return std::set<BWAPI::Unit*>(&m_unit, &m_unit + 1); 00037 } 00038 00039 protected: 00040 virtual void executeImpl(); 00041 00042 virtual void terminateImpl() 00043 { 00044 Spar->getUnitManager().unsubscribeIndividualUnitDestroy(m_unit, m_unitDestroyId); 00045 IBehavior::terminateImpl(); 00046 } 00047 00048 EVENT_HANDLER(IUnitBehavior, onUnitDestroy) m_unitDestroyEventHandler; 00049 UnitManager::OnIndividualUnitDestroy::SubscriberID m_unitDestroyId; 00050 00054 BWAPI::Unit* const m_unit; 00055 }; 00056 00057 template <class DerivedBehavior> 00058 class UnitBehavior : public virtual IUnitBehavior, public Behavior<DerivedBehavior> 00059 { 00060 public: 00061 UnitBehavior(const Process* parent, unsigned int initialPriority, BWAPI::Unit* unit) 00062 : IUnitBehavior(parent, initialPriority, unit) 00063 , Behavior(parent, initialPriority) 00064 , IBehavior(parent, initialPriority) 00065 , IFSM(parent) 00066 , Process(parent) 00067 { 00068 } 00069 };