public bool TrySpawnParticle(Vector3D worldPosition, MyTuple <int, ContactPropertyParticleProperties> particle) { if (!MyFakes.ENABLE_DRIVING_PARTICLES) { return(false); } MyWheel wheel = Entity as MyWheel; if (wheel == null) { return(false); } if (MyUtils.GetRandomInt(10) < 8)//spawn only about 20% of particles { return(false); } var speedMultiplier = wheel.GetTopMostParent().Physics.LinearVelocity.Length() / MyGridPhysics.ShipMaxLinearVelocity(); var currentTime = MySandboxGame.TotalGamePlayTimeInMilliseconds; if (currentTime - m_lastEffectCreationTime < 50) { return(false); } MyParticleEffect drivingEffect = null; if (!MyParticlesManager.TryCreateParticleEffect(particle.Item1, out drivingEffect)) { return(false); } m_lastEffectCreationTime = currentTime; m_lastGlobalEffectCreationTime = m_lastEffectCreationTime; drivingEffect.WorldMatrix = MatrixD.CreateTranslation(worldPosition); var speedScaleMultiplier = 1.0f + speedMultiplier * 6.0f; if (particle.Item2 != null) { drivingEffect.UserScale = particle.Item2.SizeMultiplier * speedScaleMultiplier; drivingEffect.UserColorMultiplier = particle.Item2.ColorMultiplier; drivingEffect.SetPreload(particle.Item2.Preload); } return(true); }
public bool TrySpawnParticle(Vector3 position, Vector3 normal, string particleName) { if (!MyFakes.ENABLE_DRIVING_PARTICLES) { return(false); } MyWheel wheel = Entity as MyWheel; if (wheel == null) { return(false); } if (MyUtils.GetRandomInt(10) < 5)//spawn only about 20% of particles { return(false); } var speedMultiplier = wheel.GetTopMostParent().Physics.LinearVelocity.Length() / MyGridPhysics.ShipMaxLinearVelocity(); var currentTime = MySandboxGame.TotalGamePlayTimeInMilliseconds; if (currentTime - m_lastEffectCreationTime < 5) { return(false); } MyParticleEffect drivingEffect = null; if (!MyParticlesManager.TryCreateParticleEffect(particleName, out drivingEffect)) { return(false); } m_lastEffectCreationTime = currentTime; m_lastGlobalEffectCreationTime = m_lastEffectCreationTime; drivingEffect.WorldMatrix = MatrixD.CreateWorld(position, normal, Vector3.CalculatePerpendicularVector(normal)); var speedScaleMultiplier = 1.0f + speedMultiplier * 6.0f; drivingEffect.UserScale = speedScaleMultiplier; return(true); }
public bool TrySpawnParticle(Vector3D worldPosition, MyParticleEffectsIDEnum particleEffect = MyParticleEffectsIDEnum.Collision_Meteor) { if (!MyFakes.ENABLE_DRIVING_PARTICLES) { return(false); } MyWheel wheel = Entity as MyWheel; if (wheel == null) { return(false); } var speedMultiplier = wheel.GetTopMostParent().Physics.LinearVelocity.Length() / MyGridPhysics.ShipMaxLinearVelocity(); var currentTime = MySandboxGame.TotalGamePlayTimeInMilliseconds; if (currentTime - m_lastGlobalEffectCreationTime < 5 || currentTime - m_lastEffectCreationTime < m_effectCreationInterval * MyUtils.GetRandomFloat(0.9f * (1.5f - speedMultiplier), 1.1f / (0.25f + speedMultiplier))) { return(false); } MyParticleEffect drivingEffect = null; if (!MyParticlesManager.TryCreateParticleEffect((int)particleEffect, out drivingEffect)) { return(false); } m_lastEffectCreationTime = currentTime; m_lastGlobalEffectCreationTime = m_lastEffectCreationTime; drivingEffect.WorldMatrix = MatrixD.CreateTranslation(worldPosition); drivingEffect.Preload = 1.0f; var speedScaleMultiplier = 1.0f + speedMultiplier * 6.0f; drivingEffect.UserScale = 0.25f * speedScaleMultiplier; return(true); }