You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#include "cbase.h" |
|
#include "c_entity_burn_effect.h" |
|
|
|
|
|
#define NUM_BURN_PARTICLES_PER_SEC 50 |
|
|
|
|
|
|
|
IMPLEMENT_CLIENTCLASS_DT( C_EntityBurnEffect, DT_EntityBurnEffect, CEntityBurnEffect ) |
|
RecvPropInt( RECVINFO( m_hBurningEntity ) ) |
|
END_RECV_TABLE() |
|
|
|
|
|
|
|
C_EntityBurnEffect::C_EntityBurnEffect() |
|
{ |
|
m_pEmitter = CSimpleEmitter::Create( "Entity burn effect" ); |
|
if ( m_pEmitter.IsValid() ) |
|
{ |
|
m_hFireMaterial = m_pEmitter->GetPMaterial( "particle/fire" ); |
|
} |
|
else |
|
{ |
|
m_hFireMaterial = INVALID_MATERIAL_HANDLE; |
|
} |
|
m_Timer.Init( NUM_BURN_PARTICLES_PER_SEC ); |
|
} |
|
|
|
|
|
void C_EntityBurnEffect::OnDataChanged( DataUpdateType_t updateType ) |
|
{ |
|
if ( updateType == DATA_UPDATE_CREATED ) |
|
{ |
|
SetNextClientThink( CLIENT_THINK_ALWAYS ); |
|
} |
|
} |
|
|
|
|
|
void C_EntityBurnEffect::ClientThink() |
|
{ |
|
if ( !m_pEmitter.IsValid() || IsDormant() ) |
|
return; |
|
|
|
// Add some burning particles to our target entity. |
|
C_BaseEntity *pEnt = ClientEntityList().GetBaseEntity( m_hBurningEntity ); |
|
if ( !pEnt ) |
|
return; |
|
|
|
float dt = gpGlobals->frametime; |
|
while ( m_Timer.NextEvent( dt ) ) |
|
{ |
|
Vector vDims = (pEnt->WorldAlignMaxs() - pEnt->WorldAlignMins()) * 0.5f; |
|
Vector vCenter = pEnt->GetAbsOrigin() + pEnt->WorldAlignMins() + vDims; |
|
Vector vPos = vCenter + vDims * RandomVector( -0.7, 0.7 ); |
|
|
|
float flLifetime = 1; |
|
float flRadius = 3; |
|
unsigned char uchColor[4] = { 255, 100, 0, 100 }; |
|
|
|
SimpleParticle *pParticle = m_pEmitter->AddSimpleParticle( m_hFireMaterial, vPos, flLifetime, flRadius ); |
|
if ( pParticle ) |
|
{ |
|
pParticle->m_uchColor[0] = uchColor[0]; |
|
pParticle->m_uchColor[1] = uchColor[1]; |
|
pParticle->m_uchColor[2] = uchColor[2]; |
|
|
|
pParticle->m_uchEndAlpha = 0; |
|
pParticle->m_uchStartAlpha = uchColor[3]; |
|
|
|
pParticle->m_vecVelocity.x = RandomFloat( -2, 2 ); |
|
pParticle->m_vecVelocity.y = RandomFloat( -2, 2 ); |
|
pParticle->m_vecVelocity.z = RandomFloat( 3, 29 ); |
|
|
|
// Pick up some velocity from the burning guy running around. |
|
pParticle->m_vecVelocity += pEnt->GetAbsVelocity() * 0.6; |
|
} |
|
} |
|
} |
|
|
|
|