summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_fx_particleeffect.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/tf_fx_particleeffect.cpp
downloadarchived-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.cpp148
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