Example #1
0
        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);
        }
Example #2
0
        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);
        }