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