31 Q_PROPERTY(QQuick3DParticleSystem *system READ system WRITE setSystem NOTIFY systemChanged)
32 Q_PROPERTY(QQmlListProperty<QQuick3DParticle> particles READ particles)
33 Q_PROPERTY(
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
34 QML_NAMED_ELEMENT(Affector3D)
35 QML_UNCREATABLE(
"Affector3D is abstract")
36 QML_ADDED_IN_VERSION(6, 2)
39 QQuick3DParticleAffector(QQuick3DNode *parent =
nullptr);
40 ~QQuick3DParticleAffector() override;
42 QQuick3DParticleSystem *system()
const;
46 QQmlListProperty<QQuick3DParticle> particles();
47 void appendParticle(QQuick3DParticle *);
48 qsizetype particleCount()
const;
49 QQuick3DParticle *particle(qsizetype)
const;
50 void clearParticles();
51 void replaceParticle(qsizetype, QQuick3DParticle *);
52 void removeLastParticle();
55 void setSystem(QQuick3DParticleSystem *system);
56 void setEnabled(
bool enabled);
61 void enabledChanged();
64 QList<QQuick3DParticle *> m_particles;
65 QQuick3DNode *m_systemSharedParent =
nullptr;
68 friend class QQuick3DParticleSystem;
70 void componentComplete() override;
73 virtual void prepareToAffect();
75 virtual void affectParticle(
const QQuick3DParticleData &sd, QQuick3DParticleDataCurrent *d,
float time) = 0;
77 static void appendParticle(QQmlListProperty<QQuick3DParticle> *, QQuick3DParticle *);
78 static qsizetype particleCount(QQmlListProperty<QQuick3DParticle> *);
79 static QQuick3DParticle *particle(QQmlListProperty<QQuick3DParticle> *, qsizetype);
80 static void clearParticles(QQmlListProperty<QQuick3DParticle> *);
81 static void replaceParticle(QQmlListProperty<QQuick3DParticle> *, qsizetype, QQuick3DParticle *);
82 static void removeLastParticle(QQmlListProperty<QQuick3DParticle> *);
84 QQuick3DParticleSystem *m_system =
nullptr;
85 bool m_enabled =
true;
86 QMap<QQuick3DParticle *, QMetaObject::Connection> m_connections;