33 Q_PROPERTY(QQuick3DParticleSystem *system READ system WRITE setSystem NOTIFY systemChanged)
34 Q_PROPERTY(QQmlListProperty<QQuick3DParticle> particles READ particles)
35 Q_PROPERTY(
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
36 QML_NAMED_ELEMENT(Affector3D)
37 QML_UNCREATABLE(
"Affector3D is abstract")
38 QML_ADDED_IN_VERSION(6, 2)
41 QQuick3DParticleAffector(QQuick3DNode *parent =
nullptr);
42 ~QQuick3DParticleAffector() override;
44 QQuick3DParticleSystem *system()
const;
48 QQmlListProperty<QQuick3DParticle> particles();
49 void appendParticle(QQuick3DParticle *);
50 qsizetype particleCount()
const;
51 QQuick3DParticle *particle(qsizetype)
const;
52 void clearParticles();
53 void replaceParticle(qsizetype, QQuick3DParticle *);
54 void removeLastParticle();
57 void setSystem(QQuick3DParticleSystem *system);
58 void setEnabled(
bool enabled);
63 void enabledChanged();
66 QList<QQuick3DParticle *> m_particles;
67 QQuick3DNode *m_systemSharedParent =
nullptr;
70 friend class QQuick3DParticleSystem;
72 void componentComplete() override;
75 virtual void prepareToAffect();
77 virtual void affectParticle(
const QQuick3DParticleData &sd, QQuick3DParticleDataCurrent *d,
float time) = 0;
79 static void appendParticle(QQmlListProperty<QQuick3DParticle> *, QQuick3DParticle *);
80 static qsizetype particleCount(QQmlListProperty<QQuick3DParticle> *);
81 static QQuick3DParticle *particle(QQmlListProperty<QQuick3DParticle> *, qsizetype);
82 static void clearParticles(QQmlListProperty<QQuick3DParticle> *);
83 static void replaceParticle(QQmlListProperty<QQuick3DParticle> *, qsizetype, QQuick3DParticle *);
84 static void removeLastParticle(QQmlListProperty<QQuick3DParticle> *);
86 QQuick3DParticleSystem *m_system =
nullptr;
87 bool m_enabled =
true;
88 QMap<QQuick3DParticle *, QMetaObject::Connection> m_connections;