DIFF

EffWheelContact.c

class EffWheelContact: EffectParticle
{
	const float SPEED_THRESHOLD = 3.0;
	
	override void ParticleParamsOverride(notnull ParticleParamsOverrideData data)
	{
		if (data.m_FloatModifiers.Count() < 2)
			return;

		Particle particle = Particle.Cast(GetParticle());
		if (!particle)
			return;
		
		float speed 	= data.m_FloatModifiers[0];
		float weight 	= data.m_FloatModifiers[1];

		particle.SetParticleParam(EmitorParam.LIFETIME, 1.0 * weight);
		particle.SetParticleParam(EmitorParam.SPRING, 15.0);
		particle.SetParticleParam(EmitorParam.REPEAT, false);
		particle.SetParticleParam(EmitorParam.WIND, false);
		particle.SetParticleParam(EmitorParam.SIZE, 1);
		particle.SetParticleParam(EmitorParam.AIR_RESISTANCE, 1.0);
	}
	
	override void SelectFromSurface(SurfaceInfo surfaceInfo)
	{
		int particleID = surfaceInfo.GetWheelContactParticleId();
		string soundSet = surfaceInfo.GetWheelContactSoundSetName();
		
		if (soundSet != "")
		{
			if (m_EffectSound == null || m_EffectSound.GetSoundSet() != soundSet)
			{
				EffectSound effectSound = SEffectManager.CreateSound(soundSet, vector.Zero, 0.0, 0.0, true);
				SetEffectSound(effectSound);
			}
		}
		else
		{
			if (m_EffectSound)
			{
				m_EffectSound.Stop();
				SetEffectSound(null);
			}
		}
		
		if (m_ParticleID != particleID)
		{
			if (particleID != 0)
				SetParticleState(particleID);
			else
			{
				Stop();
				m_EffectSound.Stop();
				SetEffectSound(null);
			}
		}
	}
	
	override void SetParticleState(int state)
	{
		bool wasPlaying = IsPlaying();

		Stop();
		SetParticleID(state);
		
		if (wasPlaying)
			Start();
	}
}