43bool QQuickFrictionAffector::affectParticle(QQuickParticleData *d, qreal dt)
47 qreal curVX = d->curVX(m_system);
48 qreal curVY = d->curVY(m_system);
51 qreal newVX = curVX + (curVX * m_factor * -1 * dt);
52 qreal newVY = curVY + (curVY * m_factor * -1 * dt);
55 if (sign(curVX) != sign(newVX))
57 if (sign(curVY) != sign(newVY))
60 qreal curMag = qSqrt(curVX*curVX + curVY*curVY);
61 if (curMag <= m_threshold + epsilon)
63 qreal newMag = qSqrt(newVX*newVX + newVY*newVY);
64 if (newMag <= m_threshold + epsilon ||
65 sign(curVX) != sign(newVX) ||
66 sign(curVY) != sign(newVY)) {
67 qreal theta = qAtan2(curVY, curVX);
68 newVX = m_threshold * qCos(theta);
69 newVY = m_threshold * qSin(theta);
73 d->setInstantaneousVX(newVX, m_system);
74 d->setInstantaneousVY(newVY, m_system);