|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
// $NoKeywords: $
//===========================================================================//
#include "cbase.h"
#include "c_basetempentity.h"
#include "IEffects.h"
#include "tier1/KeyValues.h"
#include "tier0/vprof.h"
#include "toolframework_client.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
// Purpose: Armor Ricochet TE
//-----------------------------------------------------------------------------
class C_TEMetalSparks : public C_BaseTempEntity { public: DECLARE_CLIENTCLASS();
C_TEMetalSparks( void ); virtual ~C_TEMetalSparks( void );
virtual void PostDataUpdate( DataUpdateType_t updateType );
virtual void Precache( void );
public: Vector m_vecPos; Vector m_vecDir;
const struct model_t *m_pModel; };
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_TEMetalSparks::C_TEMetalSparks( void ) { m_vecPos.Init(); m_vecDir.Init(); m_pModel = NULL; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_TEMetalSparks::~C_TEMetalSparks( void ) { }
void C_TEMetalSparks::Precache( void ) { //m_pModel = engine->LoadModel( "sprites/richo1.vmt" );
}
//-----------------------------------------------------------------------------
// Recording
//-----------------------------------------------------------------------------
static inline void RecordMetalSparks( const Vector &start, const Vector &direction ) { if ( !ToolsEnabled() ) return;
if ( clienttools->IsInRecordingMode() ) { KeyValues *msg = new KeyValues( "TempEntity" );
msg->SetInt( "te", TE_METAL_SPARKS ); msg->SetString( "name", "TE_MetalSparks" ); msg->SetFloat( "time", gpGlobals->curtime ); msg->SetFloat( "originx", start.x ); msg->SetFloat( "originy", start.y ); msg->SetFloat( "originz", start.z ); msg->SetFloat( "directionx", direction.x ); msg->SetFloat( "directiony", direction.y ); msg->SetFloat( "directionz", direction.z );
ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg ); msg->deleteThis(); } }
//-----------------------------------------------------------------------------
// Purpose:
// Input : bool -
//-----------------------------------------------------------------------------
void C_TEMetalSparks::PostDataUpdate( DataUpdateType_t updateType ) { VPROF( "C_TEMetalSparks::PostDataUpdate" );
g_pEffects->MetalSparks( m_vecPos, m_vecDir ); RecordMetalSparks( m_vecPos, m_vecDir ); }
void TE_MetalSparks( IRecipientFilter& filter, float delay, const Vector* pos, const Vector* dir ) { g_pEffects->MetalSparks( *pos, *dir ); RecordMetalSparks( *pos, *dir ); }
//-----------------------------------------------------------------------------
// Purpose: Armor Ricochet TE
//-----------------------------------------------------------------------------
class C_TEArmorRicochet : public C_TEMetalSparks { DECLARE_CLASS( C_TEArmorRicochet, C_TEMetalSparks ); public: DECLARE_CLIENTCLASS(); virtual void PostDataUpdate( DataUpdateType_t updateType ); };
//-----------------------------------------------------------------------------
// Recording
//-----------------------------------------------------------------------------
static inline void RecordArmorRicochet( const Vector &start, const Vector &direction ) { if ( !ToolsEnabled() ) return;
if ( clienttools->IsInRecordingMode() ) { KeyValues *msg = new KeyValues( "TempEntity" );
msg->SetInt( "te", TE_ARMOR_RICOCHET ); msg->SetString( "name", "TE_ArmorRicochet" ); msg->SetFloat( "time", gpGlobals->curtime ); msg->SetFloat( "originx", start.x ); msg->SetFloat( "originy", start.y ); msg->SetFloat( "originz", start.z ); msg->SetFloat( "directionx", direction.x ); msg->SetFloat( "directiony", direction.y ); msg->SetFloat( "directionz", direction.z );
ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg ); msg->deleteThis(); } }
//-----------------------------------------------------------------------------
// Purpose: Client side version of API
//-----------------------------------------------------------------------------
void TE_ArmorRicochet( IRecipientFilter& filter, float delay, const Vector* pos, const Vector* dir ) { g_pEffects->Ricochet( *pos, *dir ); RecordArmorRicochet( *pos, *dir ); }
//-----------------------------------------------------------------------------
// Purpose:
// Input : bool -
//-----------------------------------------------------------------------------
void C_TEArmorRicochet::PostDataUpdate( DataUpdateType_t updateType ) { g_pEffects->Ricochet( m_vecPos, m_vecDir ); RecordArmorRicochet( m_vecPos, m_vecDir ); }
// Expose the TE to the engine.
IMPLEMENT_CLIENTCLASS_EVENT( C_TEMetalSparks, DT_TEMetalSparks, CTEMetalSparks );
BEGIN_RECV_TABLE_NOBASE(C_TEMetalSparks, DT_TEMetalSparks) RecvPropVector(RECVINFO(m_vecPos)), RecvPropVector(RECVINFO(m_vecDir)), END_RECV_TABLE()
IMPLEMENT_CLIENTCLASS_EVENT( C_TEArmorRicochet, DT_TEArmorRicochet, CTEArmorRicochet ); BEGIN_RECV_TABLE(C_TEArmorRicochet, DT_TEArmorRicochet) END_RECV_TABLE()
|