//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======// // // Purpose: Muzzle flash temp ent // // $NoKeywords: $ //===========================================================================// #include "cbase.h" #include "c_basetempentity.h" #include "IEffects.h" #include "tier1/keyvalues.h" #include "toolframework_client.h" #include "tier0/vprof.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" //----------------------------------------------------------------------------- // Purpose: User Tracer TE //----------------------------------------------------------------------------- class C_TEMuzzleFlash : public C_BaseTempEntity { public: DECLARE_CLASS( C_TEMuzzleFlash, C_BaseTempEntity ); DECLARE_CLIENTCLASS(); C_TEMuzzleFlash( void ); virtual ~C_TEMuzzleFlash( void ); virtual void PostDataUpdate( DataUpdateType_t updateType ); public: Vector m_vecOrigin; QAngle m_vecAngles; float m_flScale; int m_nType; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- C_TEMuzzleFlash::C_TEMuzzleFlash( void ) { m_vecOrigin.Init(); m_vecAngles.Init(); m_flScale = 1.0f; m_nType = 0; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- C_TEMuzzleFlash::~C_TEMuzzleFlash( void ) { } //----------------------------------------------------------------------------- // Recording //----------------------------------------------------------------------------- static inline void RecordMuzzleFlash( const Vector &start, const QAngle &angles, float scale, int type ) { if ( !ToolsEnabled() ) return; if ( clienttools->IsInRecordingMode() ) { KeyValues *msg = new KeyValues( "TempEntity" ); msg->SetInt( "te", TE_MUZZLE_FLASH ); msg->SetString( "name", "TE_MuzzleFlash" ); msg->SetFloat( "time", gpGlobals->curtime ); msg->SetFloat( "originx", start.x ); msg->SetFloat( "originy", start.y ); msg->SetFloat( "originz", start.z ); msg->SetFloat( "anglesx", angles.x ); msg->SetFloat( "anglesy", angles.y ); msg->SetFloat( "anglesz", angles.z ); msg->SetFloat( "scale", scale ); msg->SetInt( "type", type ); ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg ); msg->deleteThis(); } } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_TEMuzzleFlash::PostDataUpdate( DataUpdateType_t updateType ) { VPROF( "C_TEMuzzleFlash::PostDataUpdate" ); //FIXME: Index is incorrect g_pEffects->MuzzleFlash( m_vecOrigin, m_vecAngles, m_flScale, m_nType ); RecordMuzzleFlash( m_vecOrigin, m_vecAngles, m_flScale, m_nType ); } void TE_MuzzleFlash( IRecipientFilter& filter, float delay, const Vector &start, const QAngle &angles, float scale, int type ) { g_pEffects->MuzzleFlash( start, angles, scale, 0 ); RecordMuzzleFlash( start, angles, scale, 0 ); } IMPLEMENT_CLIENTCLASS_EVENT_DT(C_TEMuzzleFlash, DT_TEMuzzleFlash, CTEMuzzleFlash) RecvPropVector( RECVINFO(m_vecOrigin)), RecvPropVector( RECVINFO(m_vecAngles)), RecvPropFloat( RECVINFO(m_flScale)), RecvPropInt( RECVINFO(m_nType)), END_RECV_TABLE()