//----------------------------------------------------------------------------- // Purpose: Burn targets around us //----------------------------------------------------------------------------- void CEntityDissolve::DissolveThink( void ) { CBaseAnimating *pTarget = ( GetMoveParent() ) ? GetMoveParent()->GetBaseAnimating() : NULL; if ( GetModelName() == NULL_STRING && pTarget == NULL ) return; if ( pTarget == NULL ) { UTIL_Remove( this ); return; } // Turn them into debris pTarget->SetCollisionGroup( COLLISION_GROUP_DISSOLVING ); if ( pTarget && pTarget->GetFlags() & FL_TRANSRAGDOLL ) { SetRenderColorA( 0 ); } float dt = gpGlobals->curtime - m_flStartTime; if ( dt < m_flFadeInStart ) { SetNextThink( m_flStartTime + m_flFadeInStart ); return; } // If we're done fading, then kill our target entity and us if ( dt >= m_flFadeOutStart + m_flFadeOutLength ) { // Necessary to cause it to do the appropriate death cleanup // Yeah, the player may have nothing to do with it, but // passing NULL to TakeDamage causes bad things to happen CBasePlayer *pPlayer = UTIL_PlayerByIndex( 1 ); int iNoPhysicsDamage = g_pGameRules->Damage_GetNoPhysicsForce(); CTakeDamageInfo info( pPlayer, pPlayer, 10000.0, DMG_GENERIC | DMG_REMOVENORAGDOLL | iNoPhysicsDamage ); pTarget->TakeDamage( info ); if ( pTarget != pPlayer ) { UTIL_Remove( pTarget ); } UTIL_Remove( this ); return; } SetNextThink( gpGlobals->curtime + TICK_INTERVAL ); }