From 58539171a31287bbbc6a200fc7b28fa9399dfc91 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Sat, 20 Feb 2016 22:46:19 +0100 Subject: [PATCH] give particle trails a nice smooth path between frames --- libraries/entities/src/ParticleEffectEntityItem.cpp | 9 ++++++--- libraries/entities/src/ParticleEffectEntityItem.h | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 16196aa129..4b798cbcd9 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -103,6 +103,7 @@ EntityItemPointer ParticleEffectEntityItem::factory(const EntityItemID& entityID // our non-pure virtual subclass for now... ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityItemID) : EntityItem(entityItemID), + _previousPosition(getPosition()), _lastSimulated(usecTimestampNow()) { _type = EntityTypes::ParticleEffect; @@ -623,7 +624,8 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { } // emit a new particle at tail index. - _particles.push_back(createParticle()); + _particles.push_back(createParticle(glm::mix(_previousPosition, getPosition(), + (deltaTime - timeLeftInFrame) / deltaTime))); auto particle = _particles.back(); particle.lifetime += timeLeftInFrame; @@ -637,15 +639,16 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { _timeUntilNextEmit -= timeLeftInFrame; } + _previousPosition = getPosition(); } -ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { +ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle(const glm::vec3& position) { Particle particle; particle.seed = randFloatInRange(-1.0f, 1.0f); if (getEmitterShouldTrail()) { - particle.position = getPosition(); + particle.position = position; } // Position, velocity, and acceleration if (_polarStart == 0.0f && _polarFinish == 0.0f && _emitDimensions.z == 0.0f) { diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 5afcbe2ae1..ba6f32b51f 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -227,7 +227,7 @@ protected: bool isAnimatingSomething() const; - Particle createParticle(); + Particle createParticle(const glm::vec3& position); void stepSimulation(float deltaTime); void integrateParticle(Particle& particle, float deltaTime); @@ -275,7 +275,7 @@ protected: float _azimuthStart = DEFAULT_AZIMUTH_START; float _azimuthFinish = DEFAULT_AZIMUTH_FINISH; - + glm::vec3 _previousPosition; quint64 _lastSimulated { 0 }; bool _isEmitting { true };