/*********************************************************************//**
*	\brief Definice veci
*	Soubor definuje abstraktni tridu vsech veci a dale konkretni zbrane
*	a veci.
*	
*	\author Michal Jirous
*	\date 23.04.2009
*	\file ent_items.h
**********************************************************************/

#ifndef __ITEM_WEAPON_H__
#define __ITEM_WEAPON_H__

#include "modelslib.h"
#include "soundslib.h"
#include "player.h"
#include "algebraic.h"
#include "ent_base_detail.h"

const int DEFAULT_ITEM_SIZE = 8;
const int DEFAULT_ITEM_SIZE_RENDER = 16;
#include "level_structs.h"
class CBaseItem : public CBaseDetail
{
protected:
	bool m_bIsDeath;
	BoundingBox m_CollisionBounds, m_RenderBounds;
	modelLib::ModelElement *m_pModel;
	SoundElement m_Sound;
	std::string m_sModelFilename, m_sSoundFilename;
	virtual void give( CPlayer *pPlayer ) = 0;
	virtual void passStoredEvent( BackTimeData &backData );
	Face *m_pNearestFace;

public:
	CBaseItem();
	virtual bool collisionDetection( CollisionData &collData );
	virtual bool rayTrace( RayTraceData &rayData ){return false; }	//no ray tracing
	virtual void render(RenderData &renderData );
	virtual bool renderCullTest(   RenderData &renderData );
	virtual void compile();
	virtual void decompile();
	virtual void restart();
	virtual void goBackInTime();
	virtual void update( float seconds );
};









/*************************************************
*
*	WEAPON ITEMS CLASSES
*
*************************************************/
const std::string ITEM_PICKUP = "gunpickup4.wav";

class ItemWeaponKnife : public CBaseItem
{
	virtual void give( CPlayer *pPlayer );
public:
	ItemWeaponKnife();
};

LINK_ENTITY_TO_CLASS( item_knife, ItemWeaponKnife );




class ItemWeapon9mmPistol : public CBaseItem
{
	virtual void give( CPlayer *pPlayer );
public:
	ItemWeapon9mmPistol();
};

LINK_ENTITY_TO_CLASS( item_9mmpistol, ItemWeapon9mmPistol );




class ItemWeaponMP5 : public CBaseItem
{
	virtual void give( CPlayer *pPlayer );
public:
	ItemWeaponMP5();
};

LINK_ENTITY_TO_CLASS( item_mp5, ItemWeaponMP5 );

/*************************************************
*
*	AMMO ITEMS CLASSES
*
*************************************************/


const std::string ITEM_AMMO_PICKUP = "gunpickup4.wav";

class ItemAmmo9mm : public CBaseItem
{
	virtual void give( CPlayer *pPlayer );
public:
	ItemAmmo9mm();
};

LINK_ENTITY_TO_CLASS( item_9mmammo, ItemAmmo9mm );



/***************************************************
*
*	Item game target
*
***************************************************/

const std::string ITEM_TARGET_PICKUP_SOUND = "gunpickup4.wav";

class ItemTarget : public CBaseItem
{
	virtual void passStoredEvent( BackTimeData &backData );
	virtual void give( CPlayer *pPlayer );
public:
	ItemTarget();
	virtual void goBackInTime();
	virtual void restart();
};

LINK_ENTITY_TO_CLASS( item_target, ItemTarget );
#endif
