void C_EntityFlame::CreateEffect( void )
{
	if ( m_hEffect )
	{
		ParticleProp()->StopEmission( m_hEffect, true );
		m_hEffect->SetControlPointEntity( 0, NULL );
		m_hEffect->SetControlPointEntity( 1, NULL );
		m_hEffect = NULL;
	}

#ifdef TF_CLIENT_DLL
	m_hEffect = ParticleProp()->Create( "burningplayer_red", PATTACH_ABSORIGIN_FOLLOW );
#else
	m_hEffect = ParticleProp()->Create( "burning_character", PATTACH_ABSORIGIN_FOLLOW );
#endif

	if ( m_hEffect )
	{
		C_BaseEntity *pEntity = m_hEntAttached;
		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 );
	}
}
void C_ASW_AOEGrenade_Projectile::UpdateParticleAttachments( CNewParticleEffect *pEffect, C_BaseEntity *pTarget )
{
	if ( GetArcAttachmentName() )
	{
		bool bAttachWeapon = false;
		if ( ShouldAttachEffectToWeapon() )
		{
			C_ASW_Marine *pMarine = C_ASW_Marine::AsMarine( pTarget );
			if ( pMarine && pMarine->GetActiveASWWeapon() )
			{
				C_ASW_Weapon *pWeapon = pMarine->GetActiveASWWeapon();
				int iAttachment = pWeapon->LookupAttachment( "muzzle" );
				if ( pWeapon->IsOffensiveWeapon() && iAttachment > 0 )
				{
					bAttachWeapon = true;
					ParticleProp()->AddControlPoint( pEffect, 1, pWeapon, PATTACH_POINT_FOLLOW, "muzzle" );
				}
			}
		}

		if ( !bAttachWeapon )
			ParticleProp()->AddControlPoint( pEffect, 1, pTarget, PATTACH_POINT_FOLLOW, GetArcAttachmentName() );
	}
	else
	{
		ParticleProp()->AddControlPoint( pEffect, 1, pTarget, PATTACH_ABSORIGIN_FOLLOW );
	}
}
//-----------------------------------------------------------------------------
// Purpose: 
// Input  : updateType - 
//-----------------------------------------------------------------------------
void CTFGrenadePipebombProjectile::OnDataChanged(DataUpdateType_t updateType)
{
	BaseClass::OnDataChanged( updateType );

	if ( updateType == DATA_UPDATE_CREATED )
	{
		m_flCreationTime = gpGlobals->curtime;
		ParticleProp()->Create( GetTrailParticleName(), PATTACH_ABSORIGIN_FOLLOW );
		m_bPulsed = false;

		CTFPipebombLauncher *pLauncher = dynamic_cast<CTFPipebombLauncher*>( m_hLauncher.Get() );

		if ( pLauncher )
		{
			pLauncher->AddPipeBomb( this );
		}

		if ( m_bCritical )
		{
			switch( GetTeamNumber() )
			{
			case TF_TEAM_BLUE:

				if ( m_iType == TF_GL_MODE_REMOTE_DETONATE )
				{
					ParticleProp()->Create( "critical_grenade_blue", PATTACH_ABSORIGIN_FOLLOW );
				}
				else
				{
					ParticleProp()->Create( "critical_pipe_blue", PATTACH_ABSORIGIN_FOLLOW );
				}
				break;
			case TF_TEAM_RED:

				if ( m_iType == TF_GL_MODE_REMOTE_DETONATE )
				{
					ParticleProp()->Create( "critical_grenade_red", PATTACH_ABSORIGIN_FOLLOW );
				}
				else
				{
					ParticleProp()->Create( "critical_pipe_red", PATTACH_ABSORIGIN_FOLLOW );
				}
				break;
			default:
				break;
			}
		}

	}
	else if ( m_bTouched )
	{
		//ParticleProp()->StopEmission();
	}
}
Пример #4
0
void C_AI_BaseNPC::UpdateOnRemove( void )
{
#ifdef TF_CLASSIC_CLIENT
	ParticleProp()->OwnerSetDormantTo( true );
	ParticleProp()->StopParticlesInvolving( this );

	RemoveAllCond();
#endif

	BaseClass::UpdateOnRemove();
}
Пример #5
0
//-----------------------------------------------------------------------------
// Create a telekinetic beam effect from my head to an object
// TODO: use a point attachment.
//-----------------------------------------------------------------------------
void C_NPC_Advisor::StartBeamFX( C_BaseEntity *pOnEntity )
{
	Assert(pOnEntity);
	if (!pOnEntity)
		return;

	CNewParticleEffect *pEffect = ParticleProp()->Create( "Advisor_Psychic_Beam", PATTACH_ABSORIGIN_FOLLOW );

	Assert(pEffect); 
	if (!pEffect) return;

	ParticleProp()->AddControlPoint( pEffect, 1, pOnEntity, PATTACH_ABSORIGIN_FOLLOW );
}
Пример #6
0
void CWeaponDrainGrenade::OnDataChanged( DataUpdateType_t updateType )
{
	if (updateType == DATA_UPDATE_CREATED)
	{
		m_apEffects.AddToTail(ParticleProp()->Create( "grenade_particle", PATTACH_ABSORIGIN_FOLLOW ));
	}
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_FireSmoke::Start( void )
{
	const char *lpszEffectName;
	int nSize = (int) floor( m_flStartScale / 36.0f );
	switch ( nSize )
	{
	case 0:
		lpszEffectName = ( m_nFlags & bitsFIRESMOKE_SMOKE ) ? "env_fire_tiny_smoke" : "env_fire_tiny";
		break;

	case 1:
		lpszEffectName = ( m_nFlags & bitsFIRESMOKE_SMOKE ) ? "env_fire_small_smoke" : "env_fire_small";
		break;

	case 2:
		lpszEffectName = ( m_nFlags & bitsFIRESMOKE_SMOKE ) ? "env_fire_medium_smoke" : "env_fire_medium";
		break;

	case 3:
	default:
		lpszEffectName = ( m_nFlags & bitsFIRESMOKE_SMOKE ) ? "env_fire_large_smoke" : "env_fire_large";
		break;
	}

	// Create the effect of the correct size
	m_hEffect = ParticleProp()->Create( lpszEffectName, PATTACH_ABSORIGIN );

}
Пример #8
0
void C_ASW_Buzzer::UpdateFireEmitters()
{
	bool bOnFire = (m_bOnFire && !IsEffectActive(EF_NODRAW));
	if (bOnFire != m_bClientOnFire)
	{
		m_bClientOnFire = bOnFire;
		if (m_bClientOnFire)
		{
			if ( !m_pBurningEffect )
			{
				m_pBurningEffect = UTIL_ASW_CreateFireEffect( this );
			}
			EmitSound( "ASWFire.BurningFlesh" );
		}
		else
		{
			if ( m_pBurningEffect )
			{
				ParticleProp()->StopEmission( m_pBurningEffect );
				m_pBurningEffect = NULL;
			}
			StopSound("ASWFire.BurningFlesh");
			if ( C_BaseEntity::IsAbsQueriesValid() )
				EmitSound("ASWFire.StopBurning");
		}
	}
}
Пример #9
0
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_ParticleSystem::PostDataUpdate( DataUpdateType_t updateType )
{
	BaseClass::PostDataUpdate( updateType );

	// Always restart if just created and updated
	// FIXME: Does this play fairly with PVS?
	if ( updateType == DATA_UPDATE_CREATED )
	{
		if ( m_bActive )
		{
			// Delayed here so that we don't get invalid abs queries on level init with active particle systems
			SetNextClientThink( gpGlobals->curtime );
		}
	}
	else
	{
		if ( m_bOldActive != m_bActive )
		{
			if ( m_bActive )
			{
				// Delayed here so that we don't get invalid abs queries on level init with active particle systems
				SetNextClientThink( gpGlobals->curtime );
			}
			else
			{
				ParticleProp()->StopEmission();
			}
		}
	}
}
Пример #10
0
C_ASW_TeslaTrap::~C_ASW_TeslaTrap()
{
	if ( m_hEffects )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hEffects );
		m_hEffects = NULL;
	}
}
Пример #11
0
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_ParticleSystem::ClientThink( void )
{
	if ( m_bActive )
	{
		const char *pszName = GetParticleSystemNameFromIndex( m_iEffectIndex );
		if ( pszName && pszName[0] )
		{
			CNewParticleEffect *pEffect = ParticleProp()->Create( pszName, PATTACH_ABSORIGIN_FOLLOW );
			AssertMsg1( pEffect, "Particle system couldn't make %s", pszName );
			if (pEffect)
			{
				for ( int i = 0 ; i < kMAXCONTROLPOINTS ; ++i )
				{
					CBaseEntity *pOnEntity = m_hControlPointEnts[i].Get();
					if ( pOnEntity )
					{
						ParticleProp()->AddControlPoint( pEffect, i + 1, pOnEntity, PATTACH_ABSORIGIN_FOLLOW );
					}

					AssertMsg2( m_iControlPointParents[i] >= 0 && m_iControlPointParents[i] <= kMAXCONTROLPOINTS ,
						"Particle system specified bogus control point parent (%d) for point %d.",
						m_iControlPointParents[i], i );

					if (m_iControlPointParents[i] != 0)
					{
						pEffect->SetControlPointParent(i+1, m_iControlPointParents[i]);
					}
				}

				// NOTE: What we really want here is to compare our lifetime and that of our children and see if this delta is
				//		 already past the end of it, denoting that we're finished.  In that case, just destroy us and be done. -- jdw

				// TODO: This can go when the SkipToTime code below goes
				ParticleProp()->OnParticleSystemUpdated( pEffect, 0.0f );

				// Skip the effect ahead if we're restarting it
				float flTimeDelta = gpGlobals->curtime - m_flStartTime;
				if ( flTimeDelta > 0.01f )
				{
					VPROF_BUDGET( "C_ParticleSystem::ClientThink SkipToTime", "Particle Simulation" );
					pEffect->SkipToTime( flTimeDelta );
				}
			}
		}
	}
}
Пример #12
0
//-----------------------------------------------------------------------------
// terminate a telekinetic beam effect from my head to an object
//-----------------------------------------------------------------------------
void C_NPC_Advisor::StopBeamFX( C_BaseEntity *pOnEntity )
{
	Assert(pOnEntity);
	if (!pOnEntity)
		return;

	ParticleProp()->StopParticlesInvolving( pOnEntity );
}
Пример #13
0
void C_ASW_Sentry_Top::CreateRadiusBeamEdges( const Vector &vecStart, const Vector &vecDir, int iControlPoint )
{
	if ( !m_hRadiusDisplay )
		return;

	ParticleProp()->AddControlPoint( m_hRadiusDisplay, iControlPoint, this, PATTACH_CUSTOMORIGIN );
	m_hRadiusDisplay->SetControlPointEntity( iControlPoint, this );

	AdjustRadiusBeamEdges( vecStart, vecDir, iControlPoint );
}
Пример #14
0
void C_ASW_Sentry_Top::OnDataChanged( DataUpdateType_t updateType )
{
	if ( updateType == DATA_UPDATE_CREATED )
	{
		SetNextClientThink(gpGlobals->curtime);
		m_fPrevDeployYaw = m_fDeployYaw;
	}

	if ( m_bLowAmmo && !m_hWarningLight )
	{
		m_hWarningLight = ParticleProp()->Create( "sentry_light_lowammo", PATTACH_ABSORIGIN_FOLLOW );
		if ( m_hWarningLight )
		{
			ParticleProp()->AddControlPoint( m_hWarningLight, 0, this, PATTACH_POINT_FOLLOW, "attach_light" );
		}
	}

	BaseClass::OnDataChanged( updateType );
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CTFRocketLauncher::CreateMuzzleFlashEffects( C_BaseEntity *pAttachEnt, int nIndex )
{
	BaseClass::CreateMuzzleFlashEffects( pAttachEnt, nIndex );

	// Don't do backblast effects in first person
	C_TFPlayer *pOwner = ToTFPlayer( GetOwnerEntity() );
	if ( pOwner->IsLocalPlayer() )
		return;

	ParticleProp()->Create( "rocketbackblast", PATTACH_POINT_FOLLOW, "backblast" );
}
Пример #16
0
C_ASW_Sentry_Top::~C_ASW_Sentry_Top()
{
	if ( m_hRadiusDisplay )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hRadiusDisplay );
		m_hRadiusDisplay = NULL;
	}

	if ( m_hWarningLight )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hWarningLight );
		m_hWarningLight = NULL;
	}

	if ( m_hPilotLight )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hPilotLight );
		m_hPilotLight = NULL;
	}
}
Пример #17
0
void CEconWearable::OnDataChanged( DataUpdateType_t type )
{
	BaseClass::OnDataChanged( type );
	if ( type == DATA_UPDATE_DATATABLE_CHANGED )
	{
		if (Q_stricmp(m_ParticleName, "") && !m_pUnusualParticle)
		{
			m_pUnusualParticle = ParticleProp()->Create(m_ParticleName, PATTACH_ABSORIGIN_FOLLOW);
		}
	}
}
Пример #18
0
C_ASW_Buzzer::~C_ASW_Buzzer()
{
	m_bOnFire = false;
	UpdateFireEmitters();

	if ( m_pTrailEffect )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_pTrailEffect );
		m_pTrailEffect = NULL;
	}
}
void CASW_Weapon_Welder::CreateWeldingEffects( C_ASW_Door* pDoor )
{
	if ( !m_bIsFiring || !GetOwner() || !pDoor )
		return;

	if ( m_hWeldEffects )
	{
		RemoveWeldingEffects();
	}

	if ( !m_hWeldEffects )
	{
		if ( m_bWeldSeal )
			m_hWeldEffects = ParticleProp()->Create( "welding_door_seal", PATTACH_CUSTOMORIGIN );
		else
			m_hWeldEffects = ParticleProp()->Create( "welding_door_cut", PATTACH_CUSTOMORIGIN );

		if ( m_hWeldEffects )
		{
			m_hWeldEffects->SetControlPoint( 0, pDoor->GetSparkNormal( GetMarine() ) );
			m_hWeldEffects->SetControlPointForwardVector( 0, pDoor->GetWeldFacingPoint( GetMarine() ) );
		}

		/*
		m_pLaserPointerEffect->SetControlPoint( 1, vecOrigin );
		m_pLaserPointerEffect->SetControlPoint( 2, tr.endpos );
		m_pLaserPointerEffect->SetControlPointForwardVector ( 1, vecDirShooting );
		Vector vecImpactY, vecImpactZ;
		VectorVectors( tr.plane.normal, vecImpactY, vecImpactZ ); 
		vecImpactY *= -1.0f;
		m_pLaserPointerEffect->SetControlPointOrientation( 2, vecImpactY, vecImpactZ, tr.plane.normal );
		m_pLaserPointerEffect->SetControlPoint( 3, Vector( alpha, 0, 0 ) );

		if ( m_hWeldEffects )
		{
		ParticleProp()->AddControlPoint( m_pLaserPointerEffect, 1, this, PATTACH_CUSTOMORIGIN );
		ParticleProp()->AddControlPoint( m_pLaserPointerEffect, 2, this, PATTACH_CUSTOMORIGIN );
		}
		*/
	}
}
Пример #20
0
void C_CFPlayer::OnDataChanged( DataUpdateType_t type )
{
	BaseClass::OnDataChanged( type );

	if ( type == DATA_UPDATE_CREATED )
	{
		SetNextClientThink( CLIENT_THINK_ALWAYS );
	}

	UpdateVisibility();

	if ( m_bOverdrive && !m_pOverdriveEffect )
	{
		m_pOverdriveEffect = ParticleProp()->Create( "overdrive", PATTACH_ABSORIGIN_FOLLOW );
	}
	else if ( !m_bOverdrive && m_pOverdriveEffect )
	{
		ParticleProp()->StopEmission( m_pOverdriveEffect );
		m_pOverdriveEffect = NULL;
	}
}
Пример #21
0
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_TFProjectile_Rocket::CreateRocketTrails( void )
{
	if ( IsDormant() )
		return;

	if ( enginetrace->GetPointContents( GetAbsOrigin() ) & MASK_WATER )
	{
		ParticleProp()->Create( "rockettrail_underwater", PATTACH_POINT_FOLLOW, "trail" );
	}
	else
	{
		ParticleProp()->Create( GetTrailParticleName(), PATTACH_POINT_FOLLOW, "trail" );
	}

	if ( m_bCritical )
	{
		switch( GetTeamNumber() )
		{
		case TF_TEAM_RED:
			ParticleProp()->Create("critical_rocket_red", PATTACH_ABSORIGIN_FOLLOW);
			break;
		case TF_TEAM_BLUE:
			ParticleProp()->Create( "critical_rocket_blue", PATTACH_ABSORIGIN_FOLLOW );
			break;
		case TF_TEAM_GREEN:
			ParticleProp()->Create("critical_rocket_green", PATTACH_ABSORIGIN_FOLLOW);
			break;
		case TF_TEAM_YELLOW:
			ParticleProp()->Create("critical_rocket_yellow", PATTACH_ABSORIGIN_FOLLOW);
			break;
		default:
			break;
		}
	}
}
Пример #22
0
void CDABViewModel::DoMuzzleFlash()
{
#ifdef CLIENT_DLL
	int id;
	switch (GetDAWeapon()->GetWeaponType())
	{
	case WT_PISTOL:
	default:
		id = GetDAWeapon ()->GetWeaponID ();
		if (SDK_WEAPON_AKIMBO_BERETTA == id || SDK_WEAPON_AKIMBO_M1911 == id)
		{/*HACK: Alternate attachment for akimbos, where else to put this?*/
			if (((CAkimbobase *)GetDAWeapon ())->shootright)
				ParticleProp()->Create ("muzzleflash_pistol", PATTACH_POINT_FOLLOW, "2");
			else
				ParticleProp()->Create ("muzzleflash_pistol", PATTACH_POINT_FOLLOW, "1");
		}
		else ParticleProp()->Create( "muzzleflash_pistol", PATTACH_POINT_FOLLOW, "1" );
		break;

	case WT_SMG:
		ParticleProp()->Create( "muzzleflash_smg", PATTACH_POINT_FOLLOW, "1" );
		break;

	case WT_RIFLE:
		ParticleProp()->Create( "muzzleflash_rifle", PATTACH_POINT_FOLLOW, "1" );
		break;

	case WT_SHOTGUN:
		ParticleProp()->Create( "muzzleflash_shotgun", PATTACH_POINT_FOLLOW, "1" );
		break;
	}
#endif
}
Пример #23
0
//-----------------------------------------------------------------------------
// Purpose: Start the buzzer's engine sound.
//-----------------------------------------------------------------------------
void C_ASW_Buzzer::UpdateOnRemove( void )
{
	BaseClass::UpdateOnRemove();
	SoundShutdown();
	m_bOnFire = false;
	UpdateFireEmitters();

	if ( m_pTrailEffect )
	{
		ParticleProp()->StopEmission( m_pTrailEffect, false, true, false );
		m_pTrailEffect = NULL;
	}
}
Пример #24
0
void C_ASW_Sentry_Top::UpdateOnRemove()
{
	BaseClass::UpdateOnRemove();
	
	if ( m_hRadiusDisplay )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hRadiusDisplay );
		m_hRadiusDisplay = NULL;
	}

	if ( m_hWarningLight )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hWarningLight );
		m_hWarningLight = NULL;
	}

	if ( m_hPilotLight )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hPilotLight );
		m_hPilotLight = NULL;
	}
}
Пример #25
0
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_TFProjectile_Rocket::CreateRocketTrails( void )
{
	if ( IsDormant() )
		return;

	if ( enginetrace->GetPointContents( GetAbsOrigin() ) & MASK_WATER )
	{
		ParticleProp()->Create( "rockettrail_underwater", PATTACH_POINT_FOLLOW, "trail" );
	}
	else
	{
		ParticleProp()->Create( GetTrailParticleName(), PATTACH_POINT_FOLLOW, "trail" );
	}

	if ( m_bCritical )
	{
		if ( TFGameRules() && TFGameRules()->IsDeathmatch() )
		{
			C_TFPlayer *pPlayer = ToTFPlayer(GetOwnerEntity());
			if (pPlayer)
			{
				pPlayer->m_Shared.SetParticleToMercColor(
					ParticleProp()->Create("critical_rocket_dm", PATTACH_ABSORIGIN_FOLLOW)
					);
				return;
			}
			ParticleProp()->Create("critical_rocket_red", PATTACH_ABSORIGIN_FOLLOW);
		}

		switch( GetTeamNumber() )
		{
		case TF_TEAM_RED:
			ParticleProp()->Create("critical_rocket_red", PATTACH_ABSORIGIN_FOLLOW);
			break;
		case TF_TEAM_BLUE:
			ParticleProp()->Create("critical_rocket_blue", PATTACH_ABSORIGIN_FOLLOW );
			break;
		case TF_TEAM_GREEN:
			ParticleProp()->Create("critical_rocket_green", PATTACH_ABSORIGIN_FOLLOW);
			break;
		case TF_TEAM_YELLOW:
			ParticleProp()->Create("critical_rocket_yellow", PATTACH_ABSORIGIN_FOLLOW);
			break;
		default:
			break;
		}
	}
}
Пример #26
0
void C_TFVehicle::Simulate(void)
{
	// The dim light is the flashlight.
	if ( m_bHeadlightIsOn )
	{
		if ( m_pHeadlight == NULL )
		{
			// Turned on the headlight; create it.
			m_pHeadlight = new CHeadlightEffect;

			if ( m_pHeadlight == NULL )
				return;

			m_pHeadlight->TurnOn();
		}

		QAngle vAngle;
		Vector vVector;
		Vector vecForward, vecRight, vecUp;

		int iAttachment = LookupAttachment( "headlight" );

		if ( iAttachment != INVALID_PARTICLE_ATTACHMENT )
		{
			GetAttachment( iAttachment, vVector, vAngle );
			AngleVectors( vAngle, &vecForward, &vecRight, &vecUp );
		
			m_pHeadlight->UpdateLight( vVector, vecForward, vecRight, vecUp, JEEP_HEADLIGHT_DISTANCE );
		}
	}
	else if ( m_pHeadlight )
	{
		// Turned off the flashlight; delete it.
		delete m_pHeadlight;
		m_pHeadlight = NULL;
	}

	// TODO: Move this to OnDataChanged
	if ( m_bEnableDamageEffects && !m_pSmokeParticle )
	{
		m_pSmokeParticle = ParticleProp()->Create( m_iszSmokeParticleName , PATTACH_ABSORIGIN_FOLLOW );
	}
	else if ( !m_bEnableDamageEffects && m_pSmokeParticle )
	{
		m_pSmokeParticle->StopEmission( false, false );
		m_pSmokeParticle = NULL;
	}

	BaseClass::Simulate();
}
Пример #27
0
void C_ASW_Shaman::UpdateEffects()
{
	if ( !m_hHealingTarget.Get() || GetHealth() <= 0 )
	{
		if ( m_pHealEffect )
		{
			m_pHealEffect->StopEmission();
			m_pHealEffect = NULL;
		}
		return;
	}

	if ( m_pHealEffect )
	{
		if ( m_pHealEffect->GetControlPointEntity( 1 ) != m_hHealingTarget.Get() )
		{
			m_pHealEffect->StopEmission();
			m_pHealEffect = NULL;
		}
	}
			
	if ( !m_pHealEffect )
	{				
		m_pHealEffect = ParticleProp()->Create( "shaman_heal_attach", PATTACH_POINT_FOLLOW, "nozzle" );	// "heal_receiver"
	}

	Assert( m_pHealEffect );

	if ( m_pHealEffect->GetControlPointEntity( 1 ) == NULL )
	{
		C_BaseEntity *pTarget = m_hHealingTarget.Get();
		Vector vOffset( 0.0f, 0.0f, pTarget->WorldSpaceCenter().z - pTarget->GetAbsOrigin().z );

		ParticleProp()->AddControlPoint( m_pHealEffect, 1, pTarget, PATTACH_ABSORIGIN_FOLLOW, NULL, vOffset );
		m_pHealEffect->SetControlPointOrientation( 0, pTarget->Forward(), -pTarget->Left(), pTarget->Up() );
	}
}
Пример #28
0
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_TFProjectile_Rocket::OnDataChanged( DataUpdateType_t updateType )
{
	BaseClass::OnDataChanged(updateType);

	if ( updateType == DATA_UPDATE_CREATED )
	{
		CreateRocketTrails();		
	}

	if ( m_iOldTeamNum && m_iOldTeamNum != m_iTeamNum )
	{
		ParticleProp()->StopEmission();
		CreateRocketTrails();
	}
}
CASW_Weapon_Welder::~CASW_Weapon_Welder()
{
	if ( m_pWeldingSound )
	{
		CSoundEnvelopeController::GetController().Shutdown(m_pWeldingSound);
	}

#ifdef CLIENT_DLL
	if ( m_hWeldEffects )
	{
		ParticleProp()->StopEmissionAndDestroyImmediately( m_hWeldEffects );
		m_hWeldEffects = NULL;
	}
#endif
}
void CTFGrenadePipebombProjectile::Simulate( void )
{
	BaseClass::Simulate();

	if ( m_iType != TF_GL_MODE_REMOTE_DETONATE )
		return;

	if ( m_bPulsed == false )
	{
		if ( (gpGlobals->curtime - m_flCreationTime) >= tf_grenadelauncher_livetime.GetFloat() )
		{
			if ( GetTeamNumber() == TF_TEAM_RED )
			{
				ParticleProp()->Create( "stickybomb_pulse_red", PATTACH_ABSORIGIN );
			}
			else
			{
				ParticleProp()->Create( "stickybomb_pulse_blue", PATTACH_ABSORIGIN );
			}

			m_bPulsed = true;
		}
	}
}