private void UpdateParticlesData(ParticleEmitterComponent smokeParticleEmitterComponent)
        {
            bool isUptoDate = true;
            if (ParticleData == null || ParticleData.Length != Count)
            {
                ParticleData = new ScriptParticleSmoke.ParticleData[Count];
                isUptoDate = false;
            }

            if (isUptoDate)
                return;

            var description = Description;
            var random = new Random();
            var particlesBuffer = (ScriptParticleSmoke.ParticleData[])ParticleData;

            for (int i = 0; i < particlesBuffer.Length; i++)
            {
                particlesBuffer[i] = new ScriptParticleSmoke.ParticleData
                    {
                        Position = description.Position,
                        Velocity = (Half3)(description.Velocity + Vector3.Modulate(new Vector3((float)(random.NextDouble() * 2 - 1), (float)(random.NextDouble() * 2 - 1), (float)(random.NextDouble())), description.Scatter)),
                        Size = (Half)description.InitialSize,
                        Time = (float)random.NextDouble() * description.MaxTime,
                        Opacity = (Half)description.Opacity,
                        Factors = new Half4((Half)random.NextDouble(), (Half)0, (Half)description.Opacity, (Half)0),
                        TimeStep = (Half)10.0f,
                    };
                particlesBuffer[i].Position += ((Vector3)particlesBuffer[i].Velocity) * particlesBuffer[i].Time * 100.0f / 1000.0f;
            }
        }
Beispiel #2
0
        private void UpdateParticlesData(ParticleEmitterComponent smokeParticleEmitterComponent)
        {
            bool isUptoDate = true;

            if (ParticleData == null || ParticleData.Length != Count)
            {
                ParticleData = new ScriptParticleSmoke.ParticleData[Count];
                isUptoDate   = false;
            }

            if (isUptoDate)
            {
                return;
            }

            var description     = Description;
            var random          = new Random();
            var particlesBuffer = (ScriptParticleSmoke.ParticleData[])ParticleData;

            for (int i = 0; i < particlesBuffer.Length; i++)
            {
                particlesBuffer[i] = new ScriptParticleSmoke.ParticleData
                {
                    Position = description.Position,
                    Velocity = (Half3)(description.Velocity + Vector3.Modulate(new Vector3((float)(random.NextDouble() * 2 - 1), (float)(random.NextDouble() * 2 - 1), (float)(random.NextDouble())), description.Scatter)),
                    Size     = (Half)description.InitialSize,
                    Time     = (float)random.NextDouble() * description.MaxTime,
                    Opacity  = (Half)description.Opacity,
                    Factors  = new Half4((Half)random.NextDouble(), (Half)0, (Half)description.Opacity, (Half)0),
                    TimeStep = (Half)10.0f,
                };
                particlesBuffer[i].Position += ((Vector3)particlesBuffer[i].Velocity) * particlesBuffer[i].Time * 100.0f / 1000.0f;
            }
        }
        private void UpdateParticlesData(ParticleEmitterComponent smokeParticleEmitterComponent)
        {
            bool isUptoDate = true;

            if (ParticleData == null || ParticleData.Length != Count)
            {
                ParticleData = new ScriptParticleSmoke.ParticleData[Count];
                isUptoDate   = false;
            }

            if (isUptoDate)
            {
                return;
            }

            var description     = Description;
            var random          = new Random(0);
            var particlesBuffer = (ScriptParticleSmoke.ParticleData[])ParticleData;

            for (int i = 0; i < particlesBuffer.Length; i++)
            {
                var timeProb       = (float)random.NextDouble();
                var timeStepFactor = 50 * Math.Pow(1 - timeProb, 3.0) + 1.0;
                var time           = (((int)(random.NextDouble() * description.MaxTimeTarget / timeStepFactor) + 1) * timeStepFactor) % description.MaxTimeTarget;
                particlesBuffer[i] = new ScriptParticleSmoke.ParticleData
                {
                    Time     = (float)time,
                    Opacity  = (Half)0.0f,
                    Factors  = new Half4(Half.Zero, Half.Zero, Half.One, Half.Zero),
                    TimeStep = (Half)timeStepFactor,
                };
            }
        }
        private void UpdateParticlesData(ParticleEmitterComponent smokeParticleEmitterComponent)
        {
            bool isUptoDate = true;
            if (ParticleData == null || ParticleData.Length != Count)
            {
                ParticleData = new ScriptParticleSmoke.ParticleData[Count];
                isUptoDate = false;
            }

            if (isUptoDate)
                return;

            var description = Description;
            var random = new Random(0);
            var particlesBuffer = (ScriptParticleSmoke.ParticleData[])ParticleData;

            for (int i = 0; i < particlesBuffer.Length; i++)
            {
                var timeProb = (float)random.NextDouble();
                var timeStepFactor = 50 * Math.Pow(1 - timeProb, 3.0) + 1.0;
                var time = (((int)(random.NextDouble() * description.MaxTimeTarget / timeStepFactor) + 1) * timeStepFactor) % description.MaxTimeTarget;
                particlesBuffer[i] = new ScriptParticleSmoke.ParticleData
                    {
                        Time = (float)time,
                        Opacity = (Half)0.0f,
                        Factors = new Half4(Half.Zero, Half.Zero, Half.One, Half.Zero),
                        TimeStep = (Half)timeStepFactor,
                    };
            }
        }