Counter Strike : Global Offensive Source Code
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.
|
|
//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
// $NoKeywords: $
//===========================================================================//
#include "cbase.h"
#include "c_entityflame.h"
#include "particle_property.h"
#include "iefx.h"
#include "dlight.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
// Datadesc
//-----------------------------------------------------------------------------
IMPLEMENT_CLIENTCLASS_DT( C_EntityFlame, DT_EntityFlame, CEntityFlame ) RecvPropEHandle(RECVINFO(m_hEntAttached)), RecvPropBool(RECVINFO(m_bCheapEffect)), END_RECV_TABLE()
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_EntityFlame::C_EntityFlame( void ) : m_hEffect( NULL ) { m_hOldAttached = NULL; AddToEntityList( ENTITY_LIST_SIMULATE ); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_EntityFlame::~C_EntityFlame( void ) { StopEffect(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_EntityFlame::StopEffect( void ) { if ( m_hEffect ) { ParticleProp()->StopEmission( m_hEffect, true ); m_hEffect = NULL; }
if ( m_hEntAttached ) { m_hEntAttached->RemoveFlag( FL_ONFIRE ); m_hEntAttached->SetEffectEntity( NULL ); m_hEntAttached->StopSound( "General.BurningFlesh" ); m_hEntAttached->StopSound( "General.BurningObject" ); m_hEntAttached = NULL; } }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_EntityFlame::UpdateOnRemove( void ) { StopEffect(); BaseClass::UpdateOnRemove(); }
void C_EntityFlame::CreateEffect( void ) { if ( m_hEffect ) { m_hOldAttached = m_hEntAttached; ParticleProp()->StopEmission( m_hEffect, true ); m_hEffect = NULL; }
C_BaseEntity *pEntity = m_hEntAttached; if ( pEntity && !pEntity->IsAbleToHaveFireEffect() ) return;
m_hEffect = ParticleProp()->Create( m_bCheapEffect ? "burning_gib_01" : "burning_character", PATTACH_ABSORIGIN_FOLLOW ); if ( m_hEffect ) { m_hOldAttached = m_hEntAttached;
ParticleProp()->AddControlPoint( m_hEffect, 1, pEntity, PATTACH_ABSORIGIN_FOLLOW ); m_hEffect->SetControlPoint( 0, GetAbsOrigin() ); m_hEffect->SetControlPoint( 1, GetAbsOrigin() ); m_hEffect->SetControlPointEntity( 0, pEntity ); m_hEffect->SetControlPointEntity( 1, pEntity ); } }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_EntityFlame::OnDataChanged( DataUpdateType_t updateType ) { if ( updateType == DATA_UPDATE_CREATED ) { CreateEffect(); }
// FIXME: This is a bit of a shady path
if ( updateType == DATA_UPDATE_DATATABLE_CHANGED ) { // If our owner changed, then recreate the effect
if ( m_hEntAttached != m_hOldAttached ) { CreateEffect(); } }
BaseClass::OnDataChanged( updateType ); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool C_EntityFlame::Simulate( void ) { if ( gpGlobals->frametime <= 0.0f ) return true;
#ifdef HL2_EPISODIC
if ( IsEffectActive(EF_BRIGHTLIGHT) || IsEffectActive(EF_DIMLIGHT) ) { dlight_t *dl = effects->CL_AllocDlight( index ); dl->origin = GetAbsOrigin(); dl->origin[2] += 16; dl->color.r = 254; dl->color.g = 174; dl->color.b = 10; dl->radius = random->RandomFloat(400,431); dl->die = gpGlobals->curtime + 0.001; }
#endif // HL2_EPISODIC
return true; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_EntityFlame::ClientThink( void ) { StopEffect(); Release(); }
|