179 if (speed < m_ComponentData.m_fDustStartSpeed || distanceFromCamera >=
m_ComponentData.m_fMaxDistanceVisibleSqr)
181 vehicleDust.m_Material = null;
182 if (vehicleDust.m_pParticleEffectEntity)
184 vehicleDust.m_pParticleEffectEntity.StopEmission();
190 int ticks =
System.GetTickCount();
191 int dif =
Math.AbsInt(ticks - vehicleDust.m_iLastSwap);
201 if (
m_Simulation.WheelGetContactLiquidState(wheelIdx) > 0)
202 newMaterial =
m_Simulation.WheelGetContactLiquidMaterial(wheelIdx);
204 newMaterial =
m_Simulation.WheelGetContactMaterial(wheelIdx);
206 bool wheelHasContact =
m_Simulation.WheelHasContact(wheelIdx);
208 vehicleDust.m_bWheelHasContact = wheelHasContact;
213 if (newMaterial && newMaterial != currentMaterial)
217 newResource = effectInfo.GetVehicleDustResource(
m_ComponentData.m_iVehicleIndex);
221 if (currentMaterial && vehicleDust.m_pParticleEffectEntity && (newMaterial == currentMaterial || (currentMaterial.GetParticleEffectInfo() && currentMaterial.GetParticleEffectInfo().GetResourceName() == newResource)))
223 if (newMaterial != currentMaterial)
225 vehicleDust.m_Material = newMaterial;
232 vehicleDust.m_Material = newMaterial;
233 if (vehicleDust.m_pParticleEffectEntity)
235 vehicleDust.m_pParticleEffectEntity.StopEmission();
236 vehicleDust.m_pParticleEffectEntity = null;
240 if (newResource && newResource.Length() > 0)
245 spawnParams.UseFrameEvent =
true;
246 vehicleDust.m_pParticleEffectEntity =
ParticleEffectEntity.SpawnParticleEffect(newResource, spawnParams);
247 vehicleDust.m_iLastSwap = ticks;
279 float gravityCoef = 0;
281 float longitudinalSlip =
m_Simulation.WheelGetLongitudinalSlip(wheelIdx);
282 float lateralSlip =
m_Simulation.WheelGetLateralSlip(wheelIdx);
284 float effectiveSlip =
Math.Clamp(longitudinalSlip + lateralSlip, 0, 1);
286 if (vehicleDust.m_bWheelHasContact)
288 speedCoef =
Math.AbsFloat(0.5 + speed * 0.5 / endSpeed + effectiveSlip);
289 birthCoef =
Math.AbsFloat(0.5 + speed * 0.5 / endSpeed + effectiveSlip * 2);
290 gravityCoef =
Math.AbsFloat(0.8 + speed * 0.2 / endSpeed);
293 Particles particles = vehicleDust.m_pParticleEffectEntity.GetParticles();
294 particles.MultParam(-1,
EmitterParam.BIRTH_RATE, birthCoef);
295 particles.MultParam(-1,
EmitterParam.GRAVITY_SCALE_RND, gravityCoef);
296 particles.MultParam(-1,
EmitterParam.VELOCITY, speedCoef);
297 particles.MultParam(-1,
EmitterParam.VELOCITY_RND, speedCoef);
303 if (!vehicleDust.m_bWheelHasContact)
306 if (!vehicleDust.m_Material)
309 vector effectPosition = vehicleDust.m_pParticleEffectEntity.GetWorldTransformAxis(3);
310 DebugTextWorldSpace.Create(
GetOwner().GetWorld(), vehicleDust.m_Material.GetName() +
"\nlongSlip: " + longitudinalSlip.ToString(-1, 3) +
" latSlip: " + lateralSlip.ToString(-1, 3),
DebugTextFlags.CENTER |
DebugTextFlags.ONCE, effectPosition[0], effectPosition[1] - 1, effectPosition[2]);