68QQuickAttractorAffector::QQuickAttractorAffector(QQuickItem *parent) :
69 QQuickParticleAffector(parent), m_strength(0.0), m_x(0), m_y(0)
70 , m_physics(Velocity), m_proportionalToDistance(Linear)
74bool QQuickAttractorAffector::affectParticle(QQuickParticleData *d, qreal dt)
76 if (m_strength == 0.0)
78 qreal dx = m_x+m_offset.x() - d->curX(m_system);
79 qreal dy = m_y+m_offset.y() - d->curY(m_system);
80 qreal r = std::sqrt((dx*dx) + (dy*dy));
81 qreal theta = std::atan2(dy,dx);
83 switch (m_proportionalToDistance){
84 case InverseQuadratic:
85 ds = (m_strength / qMax<qreal>(1.,r*r));
88 ds = (m_strength / qMax<qreal>(1.,r));
91 ds = (m_strength * qMax<qreal>(1.,r*r));
94 ds = (m_strength * qMax<qreal>(1.,r));
100 dx = ds * std::cos(theta);
101 dy = ds * std::sin(theta);
109 d->setInstantaneousAX(d->ax + dx, m_system);
110 d->setInstantaneousAY(d->ay + dy, m_system);
114 vx = d->curVX(m_system);
115 vy = d->curVY(m_system);
116 d->setInstantaneousVX(vx + dx, m_system);
117 d->setInstantaneousVY(vy + dy, m_system);