mirror of
https://github.com/nillerusr/source-engine.git
synced 2025-04-02 13:32:37 +00:00
116 lines
3.3 KiB
C++
116 lines
3.3 KiB
C++
//========= Copyright © 1996-2006, 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"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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;
|
|
}
|
|
|
|
DispatchEffect( "ParticleEffect", data );
|
|
}
|
|
|
|
static void RecvProxy_ParticleSystemEntIndex( const CRecvProxyData *pData, void *pStruct, void *pOut )
|
|
{
|
|
int nEntIndex = pData->m_Value.m_Int;
|
|
((C_TETFParticleEffect*)pStruct)->m_hEntity = (nEntIndex < 0) ? 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 ) ),
|
|
END_RECV_TABLE() |