BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer1Reactive/FSM/Layer1FSM.h
Go to the documentation of this file.
00001 #pragma once
00002 #include "../../../Scheduler/Scheduler.h"
00003 #include "../../../SituationAnalysis/Layer1GameState/Layer1GameState.h"
00004 #include "../../../Utils/SafeListAdaptor.h"
00005 #include "../Layer1Reactive.h"
00006 #include "Layer1FSMUnitData.h"
00007 #include "Arbitrator.h"
00008 
00009 class Layer1FSM : public Layer1Reactive<Layer1GameState>
00010 {
00011 protected:
00012 //  struct BehaviorWrapper
00013 //  {
00014 //    BehaviorWrapper(IBehavior* behavior)
00015 //      : m_behavior(behavior)
00016 //    {
00017 //    }
00018 //    SafeList<BehaviorWrapper>::iterator m_id;
00019 //    IBehavior* m_behavior;
00020 //#ifdef _DEBUG_COMPONENT
00021 //    IFSM::OnTerminate::SubscriberID m_subscriberID;
00022 //#endif
00023 //  };
00024 //  struct extract_behavior : std::unary_function<BehaviorWrapper,const IBehavior*>
00025 //  {
00026 //    const IBehavior* operator()(const BehaviorWrapper& behaviorWrapper) const
00027 //    {
00028 //      return behaviorWrapper.m_behavior;
00029 //    }
00030 //  };
00031 public:
00032   Layer1FSM(Layer1GameState& layer1GameState)
00033     : Layer1Reactive(layer1GameState)
00034     //, m_behaviorTerminateEventHandler(*this)
00035   {
00036     s_instance = this;
00037   }
00038   ~Layer1FSM()
00039   {
00040     //assert(m_behaviors.empty());
00041   }
00042   void onStart()
00043   {
00044     Layer1Reactive::onStart();
00045     m_arbitrator.onStart();
00046   }
00047   void onFrame()
00048   {
00049     Layer1Reactive::onFrame();
00050     m_arbitrator.onFrame();
00051   }
00052   void onEnd()
00053   {
00054     Layer1Reactive::onEnd();
00055     m_arbitrator.onEnd();
00056 
00057     //m_behaviors.for_each(TerminateBehavior());
00058   }
00059   void onSendText(std::string text)
00060   {
00061   }
00062 
00063   Arbitration& getArbitrator() { return m_arbitrator; }
00064   static Layer1FSM& getInstance() { return *s_instance; }
00065 
00066   typedef Layer1FSMUnitData L1UnitData; 
00067 
00068   //void onBehaviorStarted(IBehavior* behavior);
00069 
00070   //void onBehaviorTerminate(void* data);
00071 
00073   // GUI //
00075   //typedef boost::transform_iterator<extract_behavior, ConstSafeListAdaptor<BehaviorWrapper>::const_iterator> BehaviorIterator;
00076   //std::pair<BehaviorIterator, BehaviorIterator> getCurrentBehaviors() const
00077   //{
00078   //  ConstSafeListAdaptor<BehaviorWrapper> adaptor(m_behaviors);
00079   //  return std::make_pair(BehaviorIterator(adaptor.unsafe_begin()), BehaviorIterator(adaptor.unsafe_end()));
00080   //}
00081 
00082 protected:
00083   //struct TerminateBehavior
00084   //{
00085   //  SafeListBase::ConstFunctionReturn operator()(const BehaviorWrapper& behaviorWrapper) const
00086   //  {
00087   //    behaviorWrapper.m_behavior->externalTerminate();
00088   //    return SafeListBase::ConstFunctionReturn();
00089   //  }
00090   //};
00091 
00092   // I know I know this is bad design... but I don't feel like passing the instance around.
00093   static Layer1FSM* s_instance;
00094 
00095   Arbitration m_arbitrator;
00096 
00097   //EVENT_HANDLER(Layer1FSM, onBehaviorTerminate) m_behaviorTerminateEventHandler;
00098 
00099   //SafeList<BehaviorWrapper> m_behaviors;
00100 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines