00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_EVENTCHANNEL_TRIGGER_H
00023 #define FIFE_EVENTCHANNEL_TRIGGER_H
00024
00025
00026
00027 #include <list>
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "ec_itriggercontroller.h"
00039 #include "ec_itriggerlistener.h"
00040
00041 namespace FIFE {
00042
00046 class Trigger : public ITriggerController {
00047
00048 public:
00049
00050 Trigger(ITriggerListener& listener){
00051 registerListener(listener);
00052 }
00053
00054 Trigger() { }
00055
00056 virtual ~Trigger(){
00057 m_triggers.clear();
00058 }
00059
00060 void pollTrigger(){
00061 if(requirementsMet()){
00062 pollTriggers();
00063 }
00064 }
00065
00066 virtual bool requirementsMet(){
00067 return false;
00068 }
00069
00070 void registerTrigger(Trigger& trigger){
00071 m_triggers.push_back(&trigger);
00072 }
00073
00074 void unregisterTrigger(Trigger& trigger){
00075 m_triggers.remove(&trigger);
00076 }
00077
00078 void pollTriggers(){
00079 for (std::list<Trigger*>::iterator it = m_triggers.begin(), it_end =m_triggers.end(); it != it_end; ++it) {
00080 (*it)->pollTrigger();
00081 }
00082 }
00083
00084 void fireTrigger(){
00085 for (std::list<ITriggerListener*>::iterator it = m_listeners.begin(), it_end = m_listeners.end(); it != it_end; ++it) {
00086 (*it)->triggerFired();
00087 }
00088 }
00089
00090 void registerListener(ITriggerListener& triggerlistener){
00091 m_listeners.push_back(&triggerlistener);
00092 }
00093
00094 void unregisterListener(ITriggerListener& triggerlistener){
00095 m_listeners.remove(&triggerlistener);
00096 }
00097
00098 protected:
00099 std::list<ITriggerListener*> m_listeners;
00100 std::list<Trigger*> m_triggers;
00101 };
00102 }
00103
00104 #endif