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(); 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, }; } }