diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/tf_fx_particleeffect.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf/tf_fx_particleeffect.cpp')
| -rw-r--r-- | game/client/tf/tf_fx_particleeffect.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/game/client/tf/tf_fx_particleeffect.cpp b/game/client/tf/tf_fx_particleeffect.cpp new file mode 100644 index 0000000..f9932d3 --- /dev/null +++ b/game/client/tf/tf_fx_particleeffect.cpp @@ -0,0 +1,148 @@ +//========= 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()
\ No newline at end of file |