33 Q_PROPERTY(QQuick3DParticleSystem *system READ system WRITE setSystem NOTIFY systemChanged)
34 Q_PROPERTY(QQmlListProperty<QQuick3DParticleEmitBurst> emitBursts READ emitBursts)
35 Q_PROPERTY(QQuick3DParticleDirection *velocity READ velocity WRITE setVelocity NOTIFY velocityChanged)
36 Q_PROPERTY(QQuick3DParticle *particle READ particle WRITE setParticle NOTIFY particleChanged)
37 Q_PROPERTY(
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
38 Q_PROPERTY(QQuick3DParticleAbstractShape *shape READ shape WRITE setShape NOTIFY shapeChanged)
39 Q_PROPERTY(
float emitRate READ emitRate WRITE setEmitRate NOTIFY emitRateChanged)
40 Q_PROPERTY(
int lifeSpan READ lifeSpan WRITE setLifeSpan NOTIFY lifeSpanChanged)
41 Q_PROPERTY(
int lifeSpanVariation READ lifeSpanVariation WRITE setLifeSpanVariation NOTIFY lifeSpanVariationChanged)
42 Q_PROPERTY(
float particleScale READ particleScale WRITE setParticleScale NOTIFY particleScaleChanged)
43 Q_PROPERTY(
float particleEndScale READ particleEndScale WRITE setParticleEndScale NOTIFY particleEndScaleChanged)
44 Q_PROPERTY(
float particleScaleVariation READ particleScaleVariation WRITE setParticleScaleVariation NOTIFY particleScaleVariationChanged)
45 Q_PROPERTY(
float particleEndScaleVariation READ particleEndScaleVariation WRITE setParticleEndScaleVariation NOTIFY particleEndScaleVariationChanged)
46 Q_PROPERTY(QVector3D particleRotation READ particleRotation WRITE setParticleRotation NOTIFY particleRotationChanged)
47 Q_PROPERTY(QVector3D particleRotationVariation READ particleRotationVariation WRITE setParticleRotationVariation NOTIFY particleRotationVariationChanged)
48 Q_PROPERTY(QVector3D particleRotationVelocity READ particleRotationVelocity WRITE setParticleRotationVelocity NOTIFY particleRotationVelocityChanged)
49 Q_PROPERTY(QVector3D particleRotationVelocityVariation READ particleRotationVelocityVariation WRITE setParticleRotationVelocityVariation NOTIFY particleRotationVariationVelocityChanged)
50 Q_PROPERTY(
float depthBias READ depthBias WRITE setDepthBias NOTIFY depthBiasChanged)
51 Q_PROPERTY(
bool reversed READ reversed WRITE setReversed NOTIFY reversedChanged REVISION(6, 10))
53 Q_PROPERTY(EmitMode emitMode READ emitMode WRITE setEmitMode NOTIFY emitModeChanged REVISION(6, 10))
54 QML_NAMED_ELEMENT(ParticleEmitter3D)
55 QML_ADDED_IN_VERSION(6, 2)
59 enum EmitMode { Default = 0, SurfaceNormal, SurfaceReflected };
62 QQuick3DParticleEmitter(QQuick3DNode *parent =
nullptr);
63 ~QQuick3DParticleEmitter() override;
66 QQuick3DParticleDirection *velocity()
const;
67 QQuick3DParticleSystem *system()
const;
68 float emitRate()
const;
69 float particleScale()
const;
70 float particleEndScale()
const;
71 float particleScaleVariation()
const;
72 float particleEndScaleVariation()
const;
74 int lifeSpanVariation()
const;
75 QQuick3DParticle *particle()
const;
76 QQuick3DParticleAbstractShape *shape()
const;
77 QVector3D particleRotation()
const;
78 QVector3D particleRotationVariation()
const;
79 QVector3D particleRotationVelocity()
const;
80 QVector3D particleRotationVelocityVariation()
const;
81 float depthBias()
const;
82 Q_REVISION(6, 10)
bool reversed()
const;
84 Q_REVISION(6, 10) EmitMode emitMode()
const;
85 QQmlListProperty<QQuick3DParticleEmitBurst> emitBursts();
87 Q_INVOKABLE
virtual void burst(
int count);
88 Q_INVOKABLE
virtual void burst(
int count,
int duration);
89 Q_INVOKABLE
virtual void burst(
int count,
int duration,
const QVector3D &position);
92 void setEnabled(
bool enabled);
93 void setVelocity(QQuick3DParticleDirection *velocity);
94 void setSystem(QQuick3DParticleSystem *system);
95 void setEmitRate(
float emitRate);
96 void setParticleScale(
float particleScale);
97 void setParticleEndScale(
float particleEndScale);
98 void setParticleScaleVariation(
float particleScaleVariation);
99 void setParticleEndScaleVariation(
float particleEndScaleVariation);
100 void setLifeSpan(
int lifeSpan);
101 void setLifeSpanVariation(
int lifeSpanVariation);
102 void setParticle(QQuick3DParticle *particle);
103 void setShape(QQuick3DParticleAbstractShape *shape);
104 void setParticleRotation(
const QVector3D &particleRotation);
105 void setParticleRotationVariation(
const QVector3D &particleRotationVariation);
106 void setParticleRotationVelocity(
const QVector3D &particleRotationVelocity);
107 void setParticleRotationVelocityVariation(
const QVector3D &particleRotationVelocityVariation);
108 void setDepthBias(
float bias);
109 Q_REVISION(6, 10)
void setReversed(
bool reversed);
111 Q_REVISION(6, 10)
void setEmitMode(EmitMode mode);
113 void velocityChanged();
114 void systemChanged();
115 void emitRateChanged();
116 void particleScaleChanged();
117 void particleEndScaleChanged();
118 void particleScaleVariationChanged();
119 void particleEndScaleVariationChanged();
120 void lifeSpanChanged();
121 void lifeSpanVariationChanged();
122 void particleChanged();
124 void particleRotationChanged();
125 void particleRotationVariationChanged();
126 void particleRotationVelocityChanged();
127 void particleRotationVariationVelocityChanged();
128 void enabledChanged();
129 void depthBiasChanged();
130 Q_REVISION(6, 10)
void reversedChanged();
131 Q_REVISION(6, 10)
void emitModeChanged();
134 friend class QQuick3DParticleSystem;
135 friend class QQuick3DParticleEmitBurst;
136 friend class QQuick3DParticleTrailEmitter;
138 void componentComplete() override;
139 void registerEmitBurst(QQuick3DParticleEmitBurst *emitBurst);
140 void unRegisterEmitBurst(QQuick3DParticleEmitBurst *emitBurst);
141 void generateEmitBursts();
142 void emitParticle(QQuick3DParticle *particle,
float startTime,
const QMatrix4x4 &transform,
const QQuaternion &parentRotation,
const QVector3D ¢erPos,
int index = -1,
143 const QVector3D &velocity = QVector3D(),
const QVector3D &normal = QVector3D());
144 void emitParticles();
145 void emitActivationNodeParticles(QQuick3DParticleModelBlendParticle *particle);
146 void emitParticlesBurst(
const QQuick3DParticleEmitBurstData &burst);
148 int getEmitAmountFromDynamicBursts(
int triggerType = 0);
153 void appendEmitBurst(QQuick3DParticleEmitBurst *);
154 qsizetype emitBurstCount()
const;
155 QQuick3DParticleEmitBurst *emitBurst(qsizetype)
const;
156 void clearEmitBursts();
157 void replaceEmitBurst(qsizetype, QQuick3DParticleEmitBurst *);
158 void removeLastEmitBurst();
161 static void appendEmitBurst(QQmlListProperty<QQuick3DParticleEmitBurst> *, QQuick3DParticleEmitBurst *);
162 static qsizetype emitBurstCount(QQmlListProperty<QQuick3DParticleEmitBurst> *);
163 static QQuick3DParticleEmitBurst *emitBurst(QQmlListProperty<QQuick3DParticleEmitBurst> *, qsizetype);
164 static void clearEmitBursts(QQmlListProperty<QQuick3DParticleEmitBurst> *);
165 static void replaceEmitBurst(QQmlListProperty<QQuick3DParticleEmitBurst> *, qsizetype, QQuick3DParticleEmitBurst *);
166 static void removeLastEmitBurst(QQmlListProperty<QQuick3DParticleEmitBurst> *);
177 QQuick3DParticleDirection *m_velocity =
nullptr;
178 QQuick3DParticleSystem *m_system =
nullptr;
179 float m_emitRate = 0.0f;
181 int m_prevEmitTime = 0;
183 int m_prevBurstTime = 0;
184 float m_particleScale = 1.0f;
185 float m_particleEndScale = -1.0f;
186 float m_particleScaleVariation = 0.0f;
187 float m_particleEndScaleVariation = -1.0f;
188 int m_lifeSpan = 1000;
189 int m_lifeSpanVariation = 0;
190 float m_unemittedF = 0.0f;
191 float m_depthBias = 0.0f;
192 QQuick3DParticle *m_particle =
nullptr;
193 QQuick3DParticleAbstractShape *m_shape =
nullptr;
194 QVector3D m_particleRotation;
195 QVector3D m_particleRotationVariation;
196 QVector3D m_particleRotationVelocity;
197 QVector3D m_particleRotationVelocityVariation;
198 bool m_enabled =
true;
199 const QQuick3DParticleData m_clearData = {};
200 bool m_burstGenerated =
false;
201 QQuick3DNode *m_systemSharedParent =
nullptr;
203 QList<QQuick3DParticleEmitBurst *> m_emitBursts;
204 QList<BurstEmitData> m_burstEmitData;
205 bool m_reversed =
false;
206 EmitMode m_emitMode = EmitMode::Default;