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
qquick3dparticle_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 QQUICK3DPARTICLE_H
7#define QQUICK3DPARTICLE_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 <QColor>
21#include <QVector4D>
22
23#include <QtQuick3DParticles/private/qquick3dparticlesystem_p.h>
24#include <QtQuick3DParticles/private/qquick3dparticledata_p.h>
25
26QT_BEGIN_NAMESPACE
27
28class QQuick3DParticleSpriteSequence;
29
30class Q_QUICK3DPARTICLES_EXPORT QQuick3DParticle : public QQuick3DObject
31{
32 Q_OBJECT
33 Q_PROPERTY(int maxAmount READ maxAmount WRITE setMaxAmount NOTIFY maxAmountChanged)
34 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged RESET resetColor)
35 Q_PROPERTY(QVector4D colorVariation READ colorVariation WRITE setColorVariation NOTIFY colorVariationChanged)
36 Q_PROPERTY(bool unifiedColorVariation READ unifiedColorVariation WRITE setUnifiedColorVariation NOTIFY unifiedColorVariationChanged)
37 Q_PROPERTY(FadeType fadeInEffect READ fadeInEffect WRITE setFadeInEffect NOTIFY fadeInEffectChanged)
38 Q_PROPERTY(FadeType fadeOutEffect READ fadeOutEffect WRITE setFadeOutEffect NOTIFY fadeOutEffectChanged)
39 Q_PROPERTY(int fadeInDuration READ fadeInDuration WRITE setFadeInDuration NOTIFY fadeInDurationChanged)
40 Q_PROPERTY(int fadeOutDuration READ fadeOutDuration WRITE setFadeOutDuration NOTIFY fadeOutDurationChanged)
41 Q_PROPERTY(AlignMode alignMode READ alignMode WRITE setAlignMode NOTIFY alignModeChanged)
42 Q_PROPERTY(QVector3D alignTargetPosition READ alignTargetPosition WRITE setAlignTargetPosition NOTIFY alignTargetPositionChanged)
43 Q_PROPERTY(bool hasTransparency READ hasTransparency WRITE setHasTransparency NOTIFY hasTransparencyChanged)
44 Q_PROPERTY(SortMode sortMode READ sortMode WRITE setSortMode NOTIFY sortModeChanged)
45
46 QML_NAMED_ELEMENT(Particle3D)
47 QML_UNCREATABLE("Particle3D is abstract")
48 QML_ADDED_IN_VERSION(6, 2)
49
50public:
51 QQuick3DParticle(QQuick3DObject *parent = nullptr);
52 ~QQuick3DParticle() override;
53
54 enum FadeType
55 {
56 FadeNone,
57 FadeOpacity,
58 FadeScale
59 };
60 Q_ENUM(FadeType)
61
62 enum AlignMode
63 {
64 AlignNone,
65 AlignTowardsTarget,
66 AlignTowardsStartVelocity
67 };
68 Q_ENUM(AlignMode)
69
70 enum SortMode
71 {
72 SortNone,
73 SortNewest,
74 SortOldest,
75 SortDistance,
76 };
77 Q_ENUM(SortMode)
78
79 QQuick3DParticleSystem *system() const;
80 int maxAmount() const;
81 QColor color() const;
82 QVector4D colorVariation() const;
83 bool unifiedColorVariation() const;
84 FadeType fadeInEffect() const;
85 FadeType fadeOutEffect() const;
86 int fadeInDuration() const;
87 int fadeOutDuration() const;
88 AlignMode alignMode() const;
89 QVector3D alignTargetPosition() const;
90 bool hasTransparency() const;
91 SortMode sortMode() const;
92
93 float opacity() const;
94 void resetColor();
95
96public Q_SLOTS:
97 void setSystem(QQuick3DParticleSystem *system);
98 void setMaxAmount(int maxAmount);
99 void setColor(QColor color);
100 void setColorVariation(QVector4D colorVariation);
101 void setUnifiedColorVariation(bool unified);
102 void setFadeInEffect(QQuick3DParticle::FadeType fadeInEffect);
103 void setFadeOutEffect(QQuick3DParticle::FadeType fadeOutEffect);
104 void setFadeInDuration(int fadeInDuration);
105 void setFadeOutDuration(int fadeOutDuration);
106 void setAlignMode(QQuick3DParticle::AlignMode alignMode);
107 void setAlignTargetPosition(const QVector3D &alignPosition);
108 void setHasTransparency(bool transparency);
109 void setSortMode(QQuick3DParticle::SortMode sortMode);
110
111Q_SIGNALS:
112 void systemChanged();
113 void maxAmountChanged();
114 void colorChanged();
115 void colorVariationChanged();
116 void unifiedColorVariationChanged();
117 void fadeInEffectChanged();
118 void fadeOutEffectChanged();
119 void fadeInDurationChanged();
120 void fadeOutDurationChanged();
121 void alignModeChanged();
122 void alignTargetPositionChanged();
123 void hasTransparencyChanged();
124 void sortModeChanged();
125
126protected:
127 // From QQmlParserStatus
128 void componentComplete() override;
129 QQuick3DParticle(QQuick3DObjectPrivate &dd, QQuick3DNode *parent = nullptr);
130
131 virtual void reset();
132 virtual void doSetMaxAmount(int amount);
133 // Pushes the owning system's content layers onto the hidden internal
134 // render node(s) this particle produces. The layers property is not
135 // inherited, so the system value has to be forwarded explicitly. This
136 // only applies to internal nodes the user cannot reach; user-provided
137 // delegate content is never touched and manages its own layers.
138 virtual void updateNodeLayers() { }
139
140 void updateBurstIndex(int amount);
141 // This will return the next available index
142 virtual int nextCurrentIndex(const QQuick3DParticleEmitter *emitter);
143 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override
144 {
145 return node;
146 }
147
148 QList<QQuick3DParticleData> m_particleData;
149 QQuick3DParticleSpriteSequence *m_spriteSequence = nullptr;
150
151 int m_maxAmount = 100;
152 int m_currentIndex = -1;
153 int m_lastBurstIndex = 0;
154 AlignMode m_alignMode = AlignNone;
155 QVector3D m_alignTarget;
156 virtual void setDepthBias(float bias)
157 {
158 m_depthBias = bias;
159 }
160 float depthBias() const
161 {
162 return m_depthBias;
163 }
164
165private:
166 friend class QQuick3DParticleSystem;
167 friend class QQuick3DParticleEmitter;
168 friend class QQuick3DParticleSpriteSequence;
169
170 QQuick3DParticleSystem *m_system = nullptr;
171
172 QColor m_color;
173 QVector4D m_colorVariation;
174 bool m_unifiedColorVariation = false;
175 FadeType m_fadeInEffect = FadeOpacity;
176 FadeType m_fadeOutEffect = FadeOpacity;
177 int m_fadeInDuration = 250;
178 int m_fadeOutDuration = 250;
179 float m_depthBias = 0.0f;
180 bool m_hasTransparency = true;
181 SortMode m_sortMode = SortNone;
182};
183
184QT_END_NAMESPACE
185
186#endif
Combined button and popup list for selecting options.