10
11
12
13
14
15
16
17
18
19
20
21
23QQuick3DParticleAffector::QQuick3DParticleAffector(QQuick3DNode *parent)
24 : QQuick3DNode(parent)
28QQuick3DParticleAffector::~QQuick3DParticleAffector()
30 for (
const auto &connection : std::as_const(m_connections))
31 QObject::disconnect(connection);
33 m_system->unRegisterParticleAffector(
this);
37
38
39
40
41
42QQuick3DParticleSystem *QQuick3DParticleAffector::system()
const
47void QQuick3DParticleAffector::setSystem(QQuick3DParticleSystem *system)
49 if (m_system == system)
53 m_system->unRegisterParticleAffector(
this);
57 m_system->registerParticleAffector(
this);
59 m_systemSharedParent = getSharedParentNode(
this, m_system);
61 Q_EMIT systemChanged();
66
67
68
69
70
71
72
73bool QQuick3DParticleAffector::enabled()
const
78void QQuick3DParticleAffector::setEnabled(
bool enabled)
80 if (m_enabled == enabled)
84 Q_EMIT enabledChanged();
88void QQuick3DParticleAffector::componentComplete()
90 if (!m_system && qobject_cast<QQuick3DParticleSystem*>(parent()))
91 setSystem(qobject_cast<QQuick3DParticleSystem*>(parent()));
94void QQuick3DParticleAffector::prepareToAffect()
101
102
103
104
105
106QQmlListProperty<QQuick3DParticle> QQuick3DParticleAffector::particles()
109 &QQuick3DParticleAffector::appendParticle,
110 &QQuick3DParticleAffector::particleCount,
111 &QQuick3DParticleAffector::particle,
112 &QQuick3DParticleAffector::clearParticles,
113 &QQuick3DParticleAffector::replaceParticle,
114 &QQuick3DParticleAffector::removeLastParticle};
117void QQuick3DParticleAffector::appendParticle(QQuick3DParticle *n) {
118 m_particles.append(n);
119 m_connections.insert(n, QObject::connect(n, &QObject::destroyed,
this, [
this](QObject *obj) {
120 QQuick3DParticle *particle = qobject_cast<QQuick3DParticle *>(obj);
121 m_particles.removeAll(particle);
122 QObject::disconnect(m_connections[particle]);
123 m_connections.remove(particle);
127qsizetype QQuick3DParticleAffector::particleCount()
const
129 return m_particles.size();
132QQuick3DParticle *QQuick3DParticleAffector::particle(qsizetype index)
const
134 return m_particles.at(index);
137void QQuick3DParticleAffector::clearParticles() {
141void QQuick3DParticleAffector::replaceParticle(qsizetype index, QQuick3DParticle *n)
143 QQuick3DParticle *remove = m_particles[index];
144 QObject::disconnect(m_connections[remove]);
145 m_connections.remove(remove);
146 m_particles[index] = n;
147 m_connections.insert(n, QObject::connect(n, &QObject::destroyed,
this, [
this](QObject *obj) {
148 QQuick3DParticle *particle = qobject_cast<QQuick3DParticle *>(obj);
149 m_particles.removeAll(particle);
150 QObject::disconnect(m_connections[particle]);
151 m_connections.remove(particle);
155void QQuick3DParticleAffector::removeLastParticle()
157 QQuick3DParticle *last = m_particles.last();
158 QObject::disconnect(m_connections[last]);
159 m_connections.remove(last);
160 m_particles.removeLast();
164void QQuick3DParticleAffector::appendParticle(QQmlListProperty<QQuick3DParticle> *list, QQuick3DParticle *p) {
165 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->appendParticle(p);
168void QQuick3DParticleAffector::clearParticles(QQmlListProperty<QQuick3DParticle> *list) {
169 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->clearParticles();
172void QQuick3DParticleAffector::replaceParticle(QQmlListProperty<QQuick3DParticle> *list, qsizetype i, QQuick3DParticle *p)
174 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->replaceParticle(i, p);
177void QQuick3DParticleAffector::removeLastParticle(QQmlListProperty<QQuick3DParticle> *list)
179 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->removeLastParticle();
182QQuick3DParticle *QQuick3DParticleAffector::particle(QQmlListProperty<QQuick3DParticle> *list, qsizetype i) {
183 return reinterpret_cast<QQuick3DParticleAffector *>(list->data)->particle(i);
186qsizetype QQuick3DParticleAffector::particleCount(QQmlListProperty<QQuick3DParticle> *list) {
187 return reinterpret_cast<QQuick3DParticleAffector *>(list->data)->particleCount();