/*********************************************************************//**
*	\brief Znicitelny objekt.
*	Realizuje entitu, kterou lze znicit a pote se zni stanou ulomky,
*	ktere ovlada system ulomku.
*	
*	\author Michal Jirous
*	\date 23.04.2009
*	\file ent_func_breakable.h
**********************************************************************/

#include "ent_basefunction.h"
#include "soundslib.h"
#include "gibs_system.h"
#include "physics.h"

const float GIBS_PER_QUADRIC_PIXEL = 0.005f / POINTS_PER_METER;


enum 
{
	GIBS_CONCRETE = 0,
	GIBS_CONCRETE_ROCKS,
	GIBS_METAL,
	GIBS_METAL_PLATE,
	GIBS_METAL_PLATE_DARK,
	GIBS_METAL_PLATE_GREEN,
	GIBS_WOOD,
	GIBS_FLESH,
	GIBS_GLASS,

	GIBS_COMPUTER,

	GIBS_COUNT
};


std::string gibsModels[GIBS_COUNT] = {
	"concrete_gibs.mdl",
	"concretegibs.mdl",
	"metalgibs.mdl",
	"metalplategibs.mdl",
	"metalplategibs_dark.mdl",
	"metalplategibs_green.mdl",
	"woodgibs.mdl",
	"fleshgibs.mdl",
	"glassgibs.mdl",
	"computergibs.mdl"
};



class FuncBreakable : public CBaseFunction
{
	Color m_GibsColor;
	int m_iStore_Health;
	int m_iHealth;
	int m_iGibsType;
	bool m_bDestroyed;
void passStoredEvent( BackTimeData &backData );
	void destroy();
	SoundElement m_Sound;
	std::list<Gib_elem> m_Gibs;
public:
	FuncBreakable();
	virtual void onAttack( const AttackInfo &attackInfo );
	virtual void compile();
	
	virtual void decompile();
	virtual void goBackInTime();
	virtual void setParameters( parameters_t &parametersMap );
	virtual void onTarget( int target_type );
	virtual void render( RenderData &renderData );
	virtual bool collisionDetection( CollisionData &collData );
	virtual bool rayTrace( RayTraceData &rayData );
	virtual bool renderCullTest( RenderData &renderData );
	virtual void restart();
};






LINK_ENTITY_TO_CLASS( func_breakable, FuncBreakable );
