Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquick3dparticleaffector_p.h
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// Qt-Security score:significant reason:default
4
5
6#ifndef QQUICK3DPARTICLEAFFECTOR_H
7#define QQUICK3DPARTICLEAFFECTOR_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QObject>
21#include <QList>
22#include <QQmlListProperty>
23#include <QtQuick3D/private/qquick3dnode_p.h>
24#include <QtQuick3DParticles/private/qquick3dparticledata_p.h>
25#include <QtQuick3DParticles/private/qquick3dparticlesystem_p.h>
26#include <QtQuick3DParticles/private/qquick3dparticleemitter_p.h>
27
29
31{
32 Q_OBJECT
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)
39
40public:
41 QQuick3DParticleAffector(QQuick3DNode *parent = nullptr);
42 ~QQuick3DParticleAffector() override;
43
44 QQuick3DParticleSystem *system() const;
45 bool enabled() const;
46
47 // Particles list handling
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();
55
56public Q_SLOTS:
57 void setSystem(QQuick3DParticleSystem *system);
58 void setEnabled(bool enabled);
59
60Q_SIGNALS:
61 void update();
62 void systemChanged();
63 void enabledChanged();
64
65protected:
66 QList<QQuick3DParticle *> m_particles;
67 QQuick3DNode *m_systemSharedParent = nullptr;
68
69private:
70 friend class QQuick3DParticleSystem;
71 // From QQmlParserStatus
72 void componentComplete() override;
73
74 // Called once per frame for all the enabled affectors.
75 virtual void prepareToAffect();
76 // Called for each living particle attached to the attractor.
77 virtual void affectParticle(const QQuick3DParticleData &sd, QQuick3DParticleDataCurrent *d, float time) = 0;
78
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> *);
85
86 QQuick3DParticleSystem *m_system = nullptr;
87 bool m_enabled = true;
88 QMap<QQuick3DParticle *, QMetaObject::Connection> m_connections;
89};
90
91QT_END_NAMESPACE
92
93#endif // QQUICK3DPARTICLEAFFECTOR_H
Combined button and popup list for selecting options.