aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/particles/qquickparticleaffector.cpp3
-rw-r--r--src/declarative/particles/qquickparticlesystem.cpp8
-rw-r--r--src/declarative/particles/qquickparticlesystem_p.h3
3 files changed, 12 insertions, 2 deletions
diff --git a/src/declarative/particles/qquickparticleaffector.cpp b/src/declarative/particles/qquickparticleaffector.cpp
index f50efc55e7..5bfc699548 100644
--- a/src/declarative/particles/qquickparticleaffector.cpp
+++ b/src/declarative/particles/qquickparticleaffector.cpp
@@ -220,7 +220,8 @@ void QQuickParticleAffector::affectSystem(qreal dt)
m_system->timeInt -= myDt * 1000.0;
while (myDt > simulationDelta) {
m_system->timeInt += simulationDelta * 1000.0;
- affected = affectParticle(d, simulationDelta) || affected;
+ if (d->alive())//Only affect during the parts it was alive for
+ affected = affectParticle(d, simulationDelta) || affected;
myDt -= simulationDelta;
}
m_system->timeInt = realTime;
diff --git a/src/declarative/particles/qquickparticlesystem.cpp b/src/declarative/particles/qquickparticlesystem.cpp
index 767e1b94cc..613587a46a 100644
--- a/src/declarative/particles/qquickparticlesystem.cpp
+++ b/src/declarative/particles/qquickparticlesystem.cpp
@@ -580,6 +580,14 @@ bool QQuickParticleData::stillAlive()
return (t + lifeSpan - EPSILON) > ((qreal)system->timeInt/1000.0);
}
+bool QQuickParticleData::alive()
+{
+ if (!system)
+ return false;
+ qreal st = ((qreal)system->timeInt/1000.0);
+ return (t + EPSILON) < st && (t + lifeSpan - EPSILON) > st;
+}
+
float QQuickParticleData::curSize()
{
if (!system || !lifeSpan)
diff --git a/src/declarative/particles/qquickparticlesystem_p.h b/src/declarative/particles/qquickparticlesystem_p.h
index 6e35f0b7b0..87f2f2adce 100644
--- a/src/declarative/particles/qquickparticlesystem_p.h
+++ b/src/declarative/particles/qquickparticlesystem_p.h
@@ -219,7 +219,8 @@ public:
QQuickImageParticle* animationOwner;
void debugDump();
- bool stillAlive();
+ bool stillAlive();//Only checks end, because usually that's all you need and it's a little faster.
+ bool alive();
float lifeLeft();
float curSize();
void clone(const QQuickParticleData& other);//Not =, leaves meta-data like index