BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer1Reactive/FSM/UnitBehavior.h
Go to the documentation of this file.
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 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines