/*! * @file mover_trigger.h * Base-class for all mover triggers and container for an independent triggerlist. */ #ifndef _MOVER_TRIGGER_H #define _MOVER_TRIGGER_H #include "world_entity.h" #include "mover_trigger_list.h" #include "mover_trigger_event_list.h" #include "mover_trigger_delay_list.h" class MoverTriggerList; class MoverTriggerEventList; class MoverTrigger : public WorldEntity { ObjectListDeclaration(MoverTrigger); public: MoverTrigger(const TiXmlElement* root = NULL); virtual ~MoverTrigger(); virtual void loadParams(const TiXmlElement* root); virtual void tick(float dt); void setRelCoor(float x, float y, float z) { this->relCoor = Vector(x, y, z); } void updateCoordinates(Vector baseCoor); void setDelay(float delay) { this->delay = delay; } void setStayTriggered(bool bStayTriggered = true) { this->bStayTriggered = bStayTriggered; } void setTriggerOnceOnly(bool bTriggerOnceOnly = true) { this->bTriggerOnceOnly = bTriggerOnceOnly; } void setInvert(bool bInvert = true) { this->bInvert = bInvert; } void setSwitch(bool bSwitch = true) { this->bSwitch = bSwitch; } void setObligatory(bool bObligatory = true) { this->bObligatory = bObligatory; } void setTriggers(const TiXmlElement* root); void setBaseCoor(Vector baseCoor); bool isTriggered(); bool isObligatory(); static MoverTriggerEventList *events; std::string getName() { return this->objectName; } static MoverTrigger *createTrigger(const TiXmlElement* root); protected: void init_post_params(); bool bIsTriggered; private: void init_prae_params(); virtual bool checkIsTriggered(); Vector relCoor; float delay; bool bIsWaitingForDelay; bool bStayTriggered; bool bTriggerOnceOnly; bool bInvert; bool bSwitch; bool bObligatory; float time; bool bFirstRelease; bool oldState; MoverTriggerList *triggers; MoverTriggerDelayList *delaylist; }; #endif