/*********************************************************************//**
*	\brief Dvere.
*	Dvere se pohybuji mezi dvema body.
*	
*	\author Michal Jirous
*	\date 23.04.2009
*	\file ent_func_door.h
**********************************************************************/

#ifndef __FUNC_DOOR_H__
#define __FUNC_DOOR_H__

#include "ent_basemoveable.h"

#define DOOR_STARTS_OPEN	1
#define DOOR_TARGET_ONLY	2
#define DOOR_TOGGLE		4
#define DOOR_USE_ONLY	8

#include "general_sounds.h"


#define MOVE_SOUNDS_COUNT 4
#define STOP_SOUNDS_COUNT 4

const std::string MOVE_SOUNDS[MOVE_SOUNDS_COUNT] = {
	"Door/Door_Lrg_Roll_Metal.ogg",
	"Door/motor_run.ogg",
	"Door/Monorail_Door.ogg",
	"Door/move_large_door.ogg"
};
const std::string STOP_SOUNDS[STOP_SOUNDS_COUNT] = {
	"Door/Door_Metal_Slam_Shut.ogg",
	"Door/motor_stop.ogg",
	"Door/metal_door_huge.ogg",
	"Door/close_door_2.wav"
};
enum
{
	MOVE_SOUND = 0,
	STOP_SOUND,

	SOUND_TYPES_COUNT
};

class FuncDoor : public CBaseMoveable
{
	bool m_bIsOpenedOrOpening, m_bTargetOnly, m_bUseOnly, m_bToggle, m_bStartOpen, m_bActivated;
	SoundElement m_LockedSound;
	int m_iDamage;
	Uint32 m_uiResetDelay, m_uiResetTime;
	virtual void passFlags( int flags );
	void switchDirection();
	void switchDirectionStore();
	virtual void passStoredEvent( BackTimeData &backData );
	virtual void onReachTarget();
	virtual void onStartMoving();
	SoundElemPool<SOUND_TYPES_COUNT> m_MySoundPool;
	SoundElement m_MySound;
	ALfloat m_fVolume;
public:
	FuncDoor();
	virtual void goBackInTime();
	virtual void setParameters( parameters_t &parametersMap );
	virtual void compile();
	virtual void decompile();
	virtual void restart();	//toto udelat
	virtual void onTarget( int target_type );	
	virtual void update( float seconds );
	virtual void onUsage( const RayTraceData &rayData );
	virtual void onCollide( CollisionData &collData );
	virtual void blockMovement( CollisionData &collData );
};

LINK_ENTITY_TO_CLASS( func_door, FuncDoor );

#endif /*__FUNC_DOOR_H__*/
