//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Defuser kit that drops from counter-strike CTS 
//
//=============================================================================//

#include "cbase.h"
#include "items.h"
#include "cs_player.h"

class CItemDefuser : public CItem
{
public:
	DECLARE_CLASS( CItemDefuser, CItem );
	
	void	Spawn( void );
	void	Precache( void );
	void	DefuserTouch( CBaseEntity *pOther );
	void	ActivateThink( void );
	
	DECLARE_DATADESC();
};

LINK_ENTITY_TO_CLASS( item_defuser, CItemDefuser );
PRECACHE_REGISTER(item_defuser);


BEGIN_DATADESC( CItemDefuser )

	//Functions
	DEFINE_THINKFUNC( ActivateThink ),
	DEFINE_ENTITYFUNC( DefuserTouch ),

END_DATADESC()


void CItemDefuser::Spawn( void )
{ 
	Precache( );
	SetModel( "models/weapons/w_defuser.mdl" );
	BaseClass::Spawn();

	SetNextThink( gpGlobals->curtime + 0.5f );
	SetThink( &CItemDefuser::ActivateThink );

	SetTouch( NULL );
}
	
void CItemDefuser::Precache( void )
{
	PrecacheModel( "models/weapons/w_defuser.mdl" );

	PrecacheScriptSound( "BaseCombatCharacter.ItemPickup2" );
}

void CItemDefuser::ActivateThink( void )
{
	//since we can't stop the item from being touched while its in the air,
	//activate 1 second after being dropped

	SetTouch( &CItemDefuser::DefuserTouch );
	SetThink( NULL );
}
	
void CItemDefuser::DefuserTouch( CBaseEntity *pOther )
{
	if ( !pOther->IsPlayer() )
	{
		return;
	}

	//if( GetFlags() & FL_ONGROUND )
	{
		CCSPlayer *pPlayer = (CCSPlayer *)pOther;

		if ( !pPlayer )
		{
			Assert( false );
			return;
		}

		if( pPlayer->GetTeamNumber() == TEAM_CT && !pPlayer->HasDefuser() )
		{
            //=============================================================================
            // HPE_BEGIN:
            // [dwenger] Added for fun-fact support
            //=============================================================================

			pPlayer->GiveDefuser( true );

            //=============================================================================
            // HPE_END
            //=============================================================================

			if ( pPlayer->IsDead() == false )
			{
				CPASAttenuationFilter filter( pPlayer );
				EmitSound( filter, entindex(), "BaseCombatCharacter.ItemPickup2" );
			}

			UTIL_Remove( this );
			return;
		}	
	}
}