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
134 void updateBurstIndex(int amount);
135 // This will return the next available index
136 virtual int nextCurrentIndex(const QQuick3DParticleEmitter *emitter);
137 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override
138 {
139 return node;
140 }
141
142 QList<QQuick3DParticleData> m_particleData;
143 QQuick3DParticleSpriteSequence *m_spriteSequence = nullptr;
144
145 int m_maxAmount = 100;
146 int m_currentIndex = -1;
147 int m_lastBurstIndex = 0;
148 AlignMode m_alignMode = AlignNone;
149 QVector3D m_alignTarget;
150 virtual void setDepthBias(float bias)
151 {
152 m_depthBias = bias;
153 }
154 float depthBias() const
155 {
156 return m_depthBias;
157 }
158
159private:
160 friend class QQuick3DParticleSystem;
161 friend class QQuick3DParticleEmitter;
162 friend class QQuick3DParticleSpriteSequence;
163
164 QQuick3DParticleSystem *m_system = nullptr;
165
166 QColor m_color;
167 QVector4D m_colorVariation;
168 bool m_unifiedColorVariation = false;
169 FadeType m_fadeInEffect = FadeOpacity;
170 FadeType m_fadeOutEffect = FadeOpacity;
171 int m_fadeInDuration = 250;
172 int m_fadeOutDuration = 250;
173 float m_depthBias = 0.0f;
174 bool m_hasTransparency = true;
175 SortMode m_sortMode = SortNone;
176};
177
178QT_END_NAMESPACE
179
180#endif
Combined button and popup list for selecting options.