/*********************************************************************//**
*	\brief Aktivacni objekty.
*	Tato abstraktni trida definuje predpis pro objekty, ktere se aktivuji,
*	pokud do nich nekdo vstoupi.
*	
*	\author Michal Jirous
*	\date 23.04.2009
*	\file ent_triggers.h
**********************************************************************/

#include "ent_baseentity.h"
#include "ent_basephysics.h"



#define FIRE_ONCE	1
#define START_OFF	2

class CBaseTrigger : public CBaseEntity
{
protected:
	CBasePhysics *m_pTriggeredObject;
	bool m_bIsOn, m_bTriggerOnce;
	bool m_bStored_IsOn;
	Uint32 m_uiTriggerTime, m_uiTriggerDelay;
	Uint32 m_uiResetTime, m_uiResetDelay;
	virtual void trigger();
	virtual void passStoredEvent( BackTimeData &backData );
	virtual void passFlags( int flags );
	virtual void processTrigger( CBasePhysics * initiator );
public:
	CBaseTrigger();
	virtual void update( float seconds );
	virtual bool collisionDetection( CollisionData &collData );
	virtual bool rayTrace( RayTraceData &rayData ){ return false; }	//no ray tracing
	virtual void restart();
	virtual void setParameters( parameters_t &parametersMap );
	virtual void onTarget( int target_type );
	virtual void goBackInTime();
};





class TriggerHurt : public CBaseTrigger
{
	int m_iDamage;
	int m_iDamageType;
	virtual void trigger();
public:
	TriggerHurt();
	virtual void setParameters( parameters_t &parametersMap );

};

LINK_ENTITY_TO_CLASS( trigger_hurt, TriggerHurt );



//#include "level_entities.h"

class TriggerTargetEntities : public CBaseTrigger
{
	virtual void trigger();
public:
	TriggerTargetEntities();
};

LINK_ENTITY_TO_CLASS( trigger_once, TriggerTargetEntities );
LINK_ENTITY_TO_CLASS( trigger_multiple, TriggerTargetEntities );



class TriggerTeleport : public CBaseTrigger
{
	Vector m_Movement;
	CBaseEntity *m_pDestination;
	virtual void trigger();
	virtual void processTrigger( CBasePhysics * initiator );
public:
	virtual void compile();
	TriggerTeleport();
};

LINK_ENTITY_TO_CLASS( trigger_teleport, TriggerTeleport );



