|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Game-specific explosion effects
//
//=============================================================================//
#include "cbase.h"
#include "c_te_effect_dispatch.h"
#include "tempent.h"
#include "c_te_legacytempents.h"
#include "tf_shareddefs.h"
#include "c_basetempentity.h"
#include "tier0/vprof.h"
#include "c_tf_fx.h"
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class C_TETFParticleEffect : public C_BaseTempEntity { public: DECLARE_CLASS( C_TETFParticleEffect, C_BaseTempEntity ); DECLARE_CLIENTCLASS();
C_TETFParticleEffect( void );
virtual void PostDataUpdate( DataUpdateType_t updateType );
public: Vector m_vecOrigin; Vector m_vecStart; QAngle m_vecAngles;
int m_iParticleSystemIndex;
ClientEntityHandle_t m_hEntity;
int m_iAttachType; int m_iAttachmentPointIndex;
bool m_bResetParticles;
bool m_bCustomColors; te_tf_particle_effects_colors_t m_CustomColors;
bool m_bControlPoint1; te_tf_particle_effects_control_point_t m_ControlPoint1; };
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_TETFParticleEffect::C_TETFParticleEffect( void ) { m_vecOrigin.Init(); m_vecStart.Init(); m_vecAngles.Init();
m_iParticleSystemIndex = -1;
m_hEntity = INVALID_EHANDLE_INDEX;
m_iAttachType = PATTACH_ABSORIGIN; m_iAttachmentPointIndex = 0;
m_bResetParticles = false;
m_bCustomColors = false; m_CustomColors.m_vecColor1.Init(); m_CustomColors.m_vecColor2.Init();
m_bControlPoint1 = false; m_ControlPoint1.m_eParticleAttachment = PATTACH_ABSORIGIN; m_ControlPoint1.m_vecOffset.Init(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_TETFParticleEffect::PostDataUpdate( DataUpdateType_t updateType ) { VPROF( "C_TETFParticleEffect::PostDataUpdate" );
CEffectData data;
data.m_nHitBox = m_iParticleSystemIndex;
data.m_vOrigin = m_vecOrigin; data.m_vStart = m_vecStart; data.m_vAngles = m_vecAngles;
if ( m_hEntity != INVALID_EHANDLE_INDEX ) { data.m_hEntity = m_hEntity; data.m_fFlags |= PARTICLE_DISPATCH_FROM_ENTITY; } else { data.m_hEntity = NULL; }
data.m_nDamageType = m_iAttachType; data.m_nAttachmentIndex = m_iAttachmentPointIndex;
if ( m_bResetParticles ) { data.m_fFlags |= PARTICLE_DISPATCH_RESET_PARTICLES; }
data.m_bCustomColors = m_bCustomColors; data.m_CustomColors = m_CustomColors;
data.m_bControlPoint1 = m_bControlPoint1; data.m_ControlPoint1 = m_ControlPoint1;
DispatchEffect( "ParticleEffect", data ); }
static void RecvProxy_ParticleSystemEntIndex( const CRecvProxyData *pData, void *pStruct, void *pOut ) { int nEntIndex = pData->m_Value.m_Int; // The 'new' encoding for INVALID_EHANDLE_INDEX is 2047, but the old encoding
// was -1. Old demos and replays will use the old encoding so we have to check
// for it. The field is now unsigned so -1 will not be created in new replays.
((C_TETFParticleEffect*)pStruct)->m_hEntity = (nEntIndex == kInvalidEHandleParticleEffect || nEntIndex == -1) ? INVALID_EHANDLE_INDEX : ClientEntityList().EntIndexToHandle( nEntIndex ); }
IMPLEMENT_CLIENTCLASS_EVENT_DT( C_TETFParticleEffect, DT_TETFParticleEffect, CTETFParticleEffect ) RecvPropFloat( RECVINFO( m_vecOrigin[0] ) ), RecvPropFloat( RECVINFO( m_vecOrigin[1] ) ), RecvPropFloat( RECVINFO( m_vecOrigin[2] ) ), RecvPropFloat( RECVINFO( m_vecStart[0] ) ), RecvPropFloat( RECVINFO( m_vecStart[1] ) ), RecvPropFloat( RECVINFO( m_vecStart[2] ) ), RecvPropQAngles( RECVINFO( m_vecAngles ) ), RecvPropInt( RECVINFO( m_iParticleSystemIndex ) ), RecvPropInt( "entindex", 0, SIZEOF_IGNORE, 0, RecvProxy_ParticleSystemEntIndex ), RecvPropInt( RECVINFO( m_iAttachType ) ), RecvPropInt( RECVINFO( m_iAttachmentPointIndex ) ), RecvPropInt( RECVINFO( m_bResetParticles ) ), RecvPropBool( RECVINFO( m_bCustomColors ) ), RecvPropVector( RECVINFO( m_CustomColors.m_vecColor1 ) ), RecvPropVector( RECVINFO( m_CustomColors.m_vecColor2 ) ), RecvPropBool( RECVINFO( m_bControlPoint1 ) ), RecvPropInt( RECVINFO( m_ControlPoint1.m_eParticleAttachment ) ), RecvPropFloat( RECVINFO( m_ControlPoint1.m_vecOffset[0] ) ), RecvPropFloat( RECVINFO( m_ControlPoint1.m_vecOffset[1] ) ), RecvPropFloat( RECVINFO( m_ControlPoint1.m_vecOffset[2] ) ), END_RECV_TABLE()
|