/*********************************************************************//**
*	\brief jednoduche funkce.
*	Specifikace entit, ktere jsou jednoduchymi funkcemi.
*	
*	\author Michal Jirous
*	\date 23.04.2009
*	\file ent_simple_functions.h
**********************************************************************/

#ifndef __FUNC_INVISIBLE_H__
#define __FUNC_INVISIBLE_H__

#include "ent_basefunction.h"

/** @brief Trida implementuje entitu, ktera je neviditelna, ale pocita se s ni jako
*	s koliznim objektem.
*/
class FuncInvisible : public CBaseFunction
{
public:
	FuncInvisible();		/*!< @brief Inicializacni konstruktor nastavuje vlastnosti objektu. */
	
	/** @brief Prazdna vykreslujici funkce.
	*	@param frame_part Unused.*/
	virtual void render( float frame_part) {}	//no render
};

LINK_ENTITY_TO_CLASS( func_invisible, FuncInvisible );




/** @brief Trida implementuje entitu, se kterou se nepocita pri
*	detekci kolizi.
*/
class FuncIllusionary : public CBaseFunction
{

public:
	FuncIllusionary();	/*!< @brief Inicializacni konstruktor nastavuje vlastnosti objektu. */

	/** @brief Funkce pro detekci kolizi, ktera neprovadi zadne operace a vzdy konci bez vysledku.
	*	@param collData Unused.
	*	@return Vzdy false.
	*/
	virtual bool collisionDetection( CollisionData &collData ) { return false; }
};

LINK_ENTITY_TO_CLASS( func_illusionary, FuncIllusionary );



/** @brief Jednoducha zed, ktera muze mit ruzne vykreslovaci parametry. */
class FuncWall : public CBaseFunction
{
public:
	FuncWall();	/*!< @brief Inicializacni konstruktor nastavuje vlastnosti objektu. */
};

LINK_ENTITY_TO_CLASS( func_wall, FuncWall );



#define USE_ACTIVATES	1
#define START_ON		2
#define TOGGLE			4

#include "level_entities.h"
#include "soundslib.h"


enum
{
	SND_BUTTON_PUSH_01 = 0,
	SND_BUTTON_PUSH_02,
	SND_BUTTON_PUSH_03,
	SND_BUTTON_PUSH_04,
	SND_BUTTON_PUSH_05_LARGE,
	SND_BUTTON_PASSWORDER,

	SND_BUTTON_COUNT
};

static const char *BUTTON_SOUNDS[SND_BUTTON_COUNT] = {
	{"Buttons/button01.wav"},
	{"Buttons/button02.wav"},
	{"Buttons/button03.wav"},
	{"Buttons/button04.wav"},
	{"Buttons/switch_large.ogg"},
	{"Buttons/button_pass.wav"}
};



class ButtonTarget : public CBaseFunction
{
	SoundElement m_PushSound;
	bool m_bStore_UseActivate, m_bStore_StartOn, m_bStore_Toggle;

	Uint32 m_uiResetDelay, m_uiResetTime;
	size_t m_uiPlaySound;
	bool m_bStarted;

	virtual void passFlags( int flags );
	virtual void passStoredEvent( BackTimeData &backData );
	void push();
	void trigger();
public:
	ButtonTarget();
	virtual void update( float seconds );
	virtual void setParameters( parameters_t &parametersMap );
	//virtual void goBackInTime();
	virtual void onUsage( const RayTraceData &rayData );
	virtual void onTarget( int target_type );
	virtual void compile();
	virtual void restart();
	virtual void decompile();
};

LINK_ENTITY_TO_CLASS( button_target, ButtonTarget );










#endif /*__FUNC_INVISIBLE_H__*/
