Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dparticleaffector.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
6
8
27
29{
30 for (const auto &connection : std::as_const(m_connections))
32 if (m_system)
33 m_system->unRegisterParticleAffector(this);
34}
35
43{
44 return m_system;
45}
46
48{
49 if (m_system == system)
50 return;
51
52 if (m_system)
53 m_system->unRegisterParticleAffector(this);
54
55 m_system = system;
56 if (m_system)
57 m_system->registerParticleAffector(this);
58
60
62 Q_EMIT update();
63}
64
74{
75 return m_enabled;
76}
77
79{
80 if (m_enabled == enabled)
81 return;
82
83 m_enabled = enabled;
85 Q_EMIT update();
86}
87
89{
90 if (!m_system && qobject_cast<QQuick3DParticleSystem*>(parent()))
91 setSystem(qobject_cast<QQuick3DParticleSystem*>(parent()));
92}
93
97
98// Particles
99
106QQmlListProperty<QQuick3DParticle> QQuick3DParticleAffector::particles()
107{
108 return {this, this,
115}
116
119 m_connections.insert(n, QObject::connect(n, &QObject::destroyed, this, [this](QObject *obj) {
120 QQuick3DParticle *particle = qobject_cast<QQuick3DParticle *>(obj);
122 QObject::disconnect(m_connections[particle]);
123 m_connections.remove(particle);
124 }));
125}
126
131
136
140
142{
144 QObject::disconnect(m_connections[remove]);
145 m_connections.remove(remove);
147 m_connections.insert(n, QObject::connect(n, &QObject::destroyed, this, [this](QObject *obj) {
148 QQuick3DParticle *particle = qobject_cast<QQuick3DParticle *>(obj);
150 QObject::disconnect(m_connections[particle]);
151 m_connections.remove(particle);
152 }));
153}
154
156{
158 QObject::disconnect(m_connections[last]);
159 m_connections.remove(last);
161}
162
163// Particles - static
164void QQuick3DParticleAffector::appendParticle(QQmlListProperty<QQuick3DParticle> *list, QQuick3DParticle *p) {
165 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->appendParticle(p);
166}
167
168void QQuick3DParticleAffector::clearParticles(QQmlListProperty<QQuick3DParticle> *list) {
169 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->clearParticles();
170}
171
172void QQuick3DParticleAffector::replaceParticle(QQmlListProperty<QQuick3DParticle> *list, qsizetype i, QQuick3DParticle *p)
173{
174 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->replaceParticle(i, p);
175}
176
177void QQuick3DParticleAffector::removeLastParticle(QQmlListProperty<QQuick3DParticle> *list)
178{
179 reinterpret_cast<QQuick3DParticleAffector *>(list->data)->removeLastParticle();
180}
181
182QQuick3DParticle *QQuick3DParticleAffector::particle(QQmlListProperty<QQuick3DParticle> *list, qsizetype i) {
183 return reinterpret_cast<QQuick3DParticleAffector *>(list->data)->particle(i);
184}
185
186qsizetype QQuick3DParticleAffector::particleCount(QQmlListProperty<QQuick3DParticle> *list) {
187 return reinterpret_cast<QQuick3DParticleAffector *>(list->data)->particleCount();
188}
189
qsizetype size() const noexcept
Definition qlist.h:397
T & last()
Definition qlist.h:648
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
qsizetype removeAll(const AT &t)
Definition qlist.h:592
pointer data()
Definition qlist.h:431
void removeLast() noexcept
Definition qlist.h:815
void append(parameter_type t)
Definition qlist.h:458
void clear()
Definition qlist.h:434
iterator insert(const Key &key, const T &value)
Definition qmap.h:688
size_type remove(const Key &key)
Definition qmap.h:300
\inmodule QtCore
Definition qobject.h:103
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
static bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *member)
\threadsafe
Definition qobject.cpp:3236
void destroyed(QObject *=nullptr)
This signal is emitted immediately before the object obj is destroyed, after any instances of QPointe...
QQuick3DObject * parent
\qmlproperty Object3D QtQuick3D::Object3D::parent This property holds the parent of the Object3D in a...
QQuick3DParticleSystem * system
QQuick3DParticle * particle(qsizetype) const
void appendParticle(QQuick3DParticle *)
QList< QQuick3DParticle * > m_particles
QQuick3DParticleAffector(QQuick3DNode *parent=nullptr)
\qmltype Affector3D \inherits Node \inqmlmodule QtQuick3D.Particles3D
QQmlListProperty< QQuick3DParticle > particles
\qmlproperty List<Particle3D> Affector3D::particles
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
void replaceParticle(qsizetype, QQuick3DParticle *)
void setSystem(QQuick3DParticleSystem *system)
void registerParticleAffector(QQuick3DParticleAffector *a)
void unRegisterParticleAffector(QQuick3DParticleAffector *a)
Combined button and popup list for selecting options.
DBusConnection * connection
GLuint index
[2]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLfloat n
GLhandleARB obj
[2]
GLfloat GLfloat p
[1]
QQuick3DNode * getSharedParentNode(QQuick3DNode *node, QQuick3DNode *system)
#define Q_EMIT
ptrdiff_t qsizetype
Definition qtypes.h:165
QList< int > list
[14]
settings remove("monkey")