diff --git a/TestGame/Resources/test_emitter.toml b/TestGame/Resources/test_emitter.toml index 8ab88e7..7d530d2 100644 --- a/TestGame/Resources/test_emitter.toml +++ b/TestGame/Resources/test_emitter.toml @@ -1,6 +1,6 @@ [ParticleEmitterSettings] -MaxParticles = 4096 +MaxParticles = 8096 EmitRadius = 128 Explosiveness = 1.0 LifeTime = 1.0 diff --git a/Voile/Source/Systems/ParticleSystem.cs b/Voile/Source/Systems/ParticleSystem.cs index b0ec2bf..ba59dac 100644 --- a/Voile/Source/Systems/ParticleSystem.cs +++ b/Voile/Source/Systems/ParticleSystem.cs @@ -165,23 +165,21 @@ public class ParticleEmitter : IUpdatableSystem Emit(); } + var deltaTimeVector = new Vector2((float)deltaTime); + var lifeTimeInv = 1.0f / Settings.LifeTime; + var gravityVector = Settings.Gravity * (float)deltaTime; + var dampingFactor = Settings.Damping * (float)deltaTime; + for (int i = 0; i < _maxParticles; i++) { - // var particle = _particles[i]; - _lifetimes[i] = Math.Max(0.0f, _lifetimes[i] - (float)deltaTime); - var t = _lifetimes[i] / Settings.LifeTime; + var t = _lifetimes[i] * lifeTimeInv; - _velocities[i] += Settings.Gravity * (float)deltaTime; - _positions[i] += _velocities[i] * (float)deltaTime; - // particle.Rotation += particle.AngularVelocity * (float)deltaTime; - // particle.Scale = MathUtils.Lerp(Settings.ScaleEnd, Settings.ScaleBegin, t); + _velocities[i] += gravityVector; + _positions[i] += _velocities[i] * deltaTimeVector; - var color = MathUtils.LerpColor(Settings.ColorEnd, Settings.ColorBegin, t); - // particle.ColorArgb = color.Argb; - - _velocities[i] -= _velocities[i] * Settings.Damping * (float)deltaTime; + _velocities[i] -= _velocities[i] * dampingFactor; } }