12
13
14
15
16
17
18
19
20
21
22
23
25QQuick3DParticleAffector::QQuick3DParticleAffector(QQuick3DNode *parent)
26 : QQuick3DNode(parent)
30QQuick3DParticleAffector::~QQuick3DParticleAffector()
32 for (
const auto &connection : std::as_const(m_connections))
33 QObject::disconnect(connection);
35 m_system->unRegisterParticleAffector(
this);
39
40
41
42
43
44QQuick3DParticleSystem *QQuick3DParticleAffector::system()
const
49void QQuick3DParticleAffector::setSystem(QQuick3DParticleSystem *system)
51 if (m_system == system)
55 m_system->unRegisterParticleAffector(
this);
59 m_system->registerParticleAffector(
this);
61 m_systemSharedParent = getSharedParentNode(
this, m_system);
63 Q_EMIT systemChanged();
68
69
70
71
72
73
74
75bool QQuick3DParticleAffector::enabled()
const
80void QQuick3DParticleAffector::setEnabled(
bool enabled)
82 if (m_enabled == enabled)
86 Q_EMIT enabledChanged();
90void QQuick3DParticleAffector::componentComplete()
92 if (!m_system && qobject_cast<QQuick3DParticleSystem*>(parent()))
93 setSystem(qobject_cast<QQuick3DParticleSystem*>(parent()));
96void QQuick3DParticleAffector::prepareToAffect()
103
104
105
106
107
108QQmlListProperty<QQuick3DParticle> QQuick3DParticleAffector::particles()
111 &QQuick3DParticleAffector::appendParticle,
112 &QQuick3DParticleAffector::particleCount,
113 &QQuick3DParticleAffector::particle,
114 &QQuick3DParticleAffector::clearParticles,
115 &QQuick3DParticleAffector::replaceParticle,
116 &QQuick3DParticleAffector::removeLastParticle};
119void QQuick3DParticleAffector::appendParticle(QQuick3DParticle *n) {
120 m_particles.append(n);
121 m_connections.insert(n, QObject::connect(n, &QObject::destroyed,
this, [
this](QObject *obj) {
122 QQuick3DParticle *particle = qobject_cast<QQuick3DParticle *>(obj);
123 m_particles.removeAll(particle);
124 QObject::disconnect(m_connections[particle]);
125 m_connections.remove(particle);
129qsizetype QQuick3DParticleAffector::particleCount()
const
131 return m_particles.size();
134QQuick3DParticle *QQuick3DParticleAffector::particle(qsizetype index)
const
136 return m_particles.at(index);
139void QQuick3DParticleAffector::clearParticles() {
143void QQuick3DParticleAffector::replaceParticle(qsizetype index, QQuick3DParticle *n)
145 QQuick3DParticle *remove = m_particles[index];
146 QObject::disconnect(m_connections[remove]);
147 m_connections.remove(remove);
148 m_particles[index] = n;
149 m_connections.insert(n, QObject::connect(n, &QObject::destroyed,
this, [
this](QObject *obj) {
150 QQuick3DParticle *particle = qobject_cast<QQuick3DParticle *>(obj);
151 m_particles.removeAll(particle);
152 QObject::disconnect(m_connections[particle]);
153 m_connections.remove(particle);
157void QQuick3DParticleAffector::removeLastParticle()
159 QQuick3DParticle *last = m_particles.last();
160 QObject::disconnect(m_connections[last]);
161 m_connections.remove(last);
162 m_particles.removeLast();
166void QQuick3DParticleAffector::appendParticle(QQmlListProperty<QQuick3DParticle> *list, QQuick3DParticle *p) {
167 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->appendParticle(p);
170void QQuick3DParticleAffector::clearParticles(QQmlListProperty<QQuick3DParticle> *list) {
171 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->clearParticles();
174void QQuick3DParticleAffector::replaceParticle(QQmlListProperty<QQuick3DParticle> *list, qsizetype i, QQuick3DParticle *p)
176 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->replaceParticle(i, p);
179void QQuick3DParticleAffector::removeLastParticle(QQmlListProperty<QQuick3DParticle> *list)
181 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->removeLastParticle();
184QQuick3DParticle *QQuick3DParticleAffector::particle(QQmlListProperty<QQuick3DParticle> *list, qsizetype i) {
185 return reinterpret_cast<QQuick3DParticleAffector *>(list->data)->particle(i);
188qsizetype QQuick3DParticleAffector::particleCount(QQmlListProperty<QQuick3DParticle> *list) {
189 return reinterpret_cast<QQuick3DParticleAffector *>(list->data)->particleCount();
Combined button and popup list for selecting options.