diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/particles/qquickparticleaffector.cpp | 15 | ||||
-rw-r--r-- | src/particles/qquickparticleaffector_p.h | 3 | ||||
-rw-r--r-- | src/particles/qquickparticlesystem.cpp | 3 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/particles/qquickparticleaffector.cpp b/src/particles/qquickparticleaffector.cpp index 3e3346997e..9aae0db280 100644 --- a/src/particles/qquickparticleaffector.cpp +++ b/src/particles/qquickparticleaffector.cpp @@ -147,6 +147,9 @@ void QQuickParticleAffector::componentComplete() } bool QQuickParticleAffector::activeGroup(int g) { + if (!m_system) + return false; + if (m_updateIntSet){ //This can occur before group ids are properly assigned, but that resets the flag m_groupIds.clear(); foreach (const QString &p, m_groups) @@ -160,6 +163,9 @@ bool QQuickParticleAffector::shouldAffect(QQuickParticleData* d) { if (!d) return false; + if (!m_system) + return false; + if (activeGroup(d->groupId)){ if ((m_onceOff && m_onceOffed.contains(qMakePair(d->groupId, d->index))) || !d->stillAlive(m_system)) @@ -178,6 +184,9 @@ bool QQuickParticleAffector::shouldAffect(QQuickParticleData* d) void QQuickParticleAffector::postAffect(QQuickParticleData* d) { + if (!m_system) + return; + m_system->needsReset << d; if (m_onceOff) m_onceOffed << qMakePair(d->groupId, d->index); @@ -192,6 +201,9 @@ void QQuickParticleAffector::affectSystem(qreal dt) { if (!m_enabled) return; + if (!m_system) + return; + //If not reimplemented, calls affectParticle per particle //But only on particles in targeted system/area updateOffsets();//### Needed if an ancestor is transformed. @@ -244,6 +256,9 @@ void QQuickParticleAffector::updateOffsets() bool QQuickParticleAffector::isColliding(QQuickParticleData *d) const { + if (!m_system) + return false; + qreal myCurX = d->curX(m_system); qreal myCurY = d->curY(m_system); qreal myCurSize = d->curSize(m_system) / 2; diff --git a/src/particles/qquickparticleaffector_p.h b/src/particles/qquickparticleaffector_p.h index f5975708fa..4f60389e04 100644 --- a/src/particles/qquickparticleaffector_p.h +++ b/src/particles/qquickparticleaffector_p.h @@ -128,7 +128,8 @@ void setSystem(QQuickParticleSystem* arg) { if (m_system != arg) { m_system = arg; - m_system->registerParticleAffector(this); + if (m_system) + m_system->registerParticleAffector(this); Q_EMIT systemChanged(arg); } } diff --git a/src/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp index 9049892c83..386efed122 100644 --- a/src/particles/qquickparticlesystem.cpp +++ b/src/particles/qquickparticlesystem.cpp @@ -638,7 +638,8 @@ void QQuickParticleSystem::registerParticleAffector(QQuickParticleAffector* a) { if (m_debugMode) qDebug() << "Registering Affector" << a << "to" << this; - m_affectors << QPointer<QQuickParticleAffector>(a); + if (!m_affectors.contains(a)) + m_affectors << QPointer<QQuickParticleAffector>(a); } void QQuickParticleSystem::registerParticleGroup(QQuickParticleGroup* g) |