34 Q_PROPERTY(QQuickParticleSystem* system READ system WRITE setSystem NOTIFY systemChanged)
35 Q_PROPERTY(QString group READ group WRITE setGroup NOTIFY groupChanged)
36 Q_PROPERTY(QQuickParticleExtruder* shape READ extruder WRITE setExtruder NOTIFY extruderChanged)
37 Q_PROPERTY(
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
38 Q_PROPERTY(
int startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged)
40 Q_PROPERTY(qreal emitRate READ particlesPerSecond WRITE setParticlesPerSecond NOTIFY particlesPerSecondChanged)
41 Q_PROPERTY(
int lifeSpan READ particleDuration WRITE setParticleDuration NOTIFY particleDurationChanged)
42 Q_PROPERTY(
int lifeSpanVariation READ particleDurationVariation WRITE setParticleDurationVariation NOTIFY particleDurationVariationChanged)
43 Q_PROPERTY(
int maximumEmitted READ maxParticleCount WRITE setMaxParticleCount NOTIFY maximumEmittedChanged)
45 Q_PROPERTY(qreal size READ particleSize WRITE setParticleSize NOTIFY particleSizeChanged)
46 Q_PROPERTY(qreal endSize READ particleEndSize WRITE setParticleEndSize NOTIFY particleEndSizeChanged)
47 Q_PROPERTY(qreal sizeVariation READ particleSizeVariation WRITE setParticleSizeVariation NOTIFY particleSizeVariationChanged)
49 Q_PROPERTY(QQuickDirection *velocity READ velocity WRITE setVelocity NOTIFY velocityChanged)
50 Q_PROPERTY(QQuickDirection *acceleration READ acceleration WRITE setAcceleration NOTIFY accelerationChanged)
51 Q_PROPERTY(qreal velocityFromMovement READ velocityFromMovement WRITE setVelocityFromMovement NOTIFY velocityFromMovementChanged)
52 QML_NAMED_ELEMENT(Emitter)
53 QML_ADDED_IN_VERSION(2, 0)
56 explicit QQuickParticleEmitter(QQuickItem *parent =
nullptr);
57 virtual ~QQuickParticleEmitter();
58 virtual void emitWindow(
int timeStamp);
61 InfiniteLife = QQuickParticleSystem::maxLife
70 qreal particlesPerSecond()
const
72 return m_particlesPerSecond;
75 int particleDuration()
const
77 return m_particleDuration;
80 QQuickParticleSystem* system()
const
90 QQuickParticleGroupData::ID groupId()
const
92 if (m_groupIdNeedRecalculation)
97 int particleDurationVariation()
const
99 return m_particleDurationVariation;
102 qreal velocityFromMovement()
const {
return m_velocity_from_movement; }
103 void setVelocityFromMovement(qreal s);
104 void componentComplete() override;
106 void emitParticles(
const QList<QQuickV4ParticleData> &particles);
107 void particlesPerSecondChanged(qreal);
108 void particleDurationChanged(
int);
109 void enabledChanged(
bool);
111 void systemChanged(QQuickParticleSystem* arg);
113 void groupChanged(
const QString &arg);
115 void particleDurationVariationChanged(
int arg);
117 void extruderChanged(QQuickParticleExtruder* arg);
119 void particleSizeChanged(qreal arg);
121 void particleEndSizeChanged(qreal arg);
123 void particleSizeVariationChanged(qreal arg);
125 void velocityChanged(QQuickDirection * arg);
127 void accelerationChanged(QQuickDirection * arg);
129 void maximumEmittedChanged(
int arg);
130 void particleCountChanged();
132 void velocityFromMovementChanged();
134 void startTimeChanged(
int arg);
137 void pulse(
int milliseconds);
139 void burst(
int num, qreal x, qreal y);
141 void setEnabled(
bool arg);
143 void setParticlesPerSecond(qreal arg)
145 if (m_particlesPerSecond != arg) {
146 m_particlesPerSecond = arg;
147 Q_EMIT particlesPerSecondChanged(arg);
151 void setParticleDuration(
int arg)
153 if (m_particleDuration != arg) {
154 m_particleDuration = arg;
155 Q_EMIT particleDurationChanged(arg);
159 void setSystem(QQuickParticleSystem* arg)
161 if (m_system != arg) {
163 m_groupIdNeedRecalculation =
true;
165 m_system->registerParticleEmitter(
this);
166 Q_EMIT systemChanged(arg);
170 void setGroup(
const QString &arg)
172 if (m_group != arg) {
174 m_groupIdNeedRecalculation =
true;
175 Q_EMIT groupChanged(arg);
179 void setParticleDurationVariation(
int arg)
181 if (m_particleDurationVariation != arg) {
182 m_particleDurationVariation = arg;
183 Q_EMIT particleDurationVariationChanged(arg);
186 void setExtruder(QQuickParticleExtruder* arg)
188 if (m_extruder != arg) {
190 Q_EMIT extruderChanged(arg);
194 void setParticleSize(qreal arg)
196 if (m_particleSize != arg) {
197 m_particleSize = arg;
198 Q_EMIT particleSizeChanged(arg);
202 void setParticleEndSize(qreal arg)
204 if (m_particleEndSize != arg) {
205 m_particleEndSize = arg;
206 Q_EMIT particleEndSizeChanged(arg);
210 void setParticleSizeVariation(qreal arg)
212 if (m_particleSizeVariation != arg) {
213 m_particleSizeVariation = arg;
214 Q_EMIT particleSizeVariationChanged(arg);
218 void setVelocity(QQuickDirection * arg)
220 if (m_velocity != arg) {
222 Q_EMIT velocityChanged(arg);
226 void setAcceleration(QQuickDirection * arg)
228 if (m_acceleration != arg) {
229 m_acceleration = arg;
230 Q_EMIT accelerationChanged(arg);
234 void setMaxParticleCount(
int arg);
236 void setStartTime(
int arg)
238 if (m_startTime != arg) {
240 Q_EMIT startTimeChanged(arg);
244 virtual void reset();
246 int particleCount()
const
248 if (m_maxParticleCount >= 0)
249 return m_maxParticleCount;
250 return m_particlesPerSecond*((m_particleDuration+m_particleDurationVariation)/1000.0);
253 QQuickParticleExtruder* extruder()
const
258 qreal particleSize()
const
260 return m_particleSize;
263 qreal particleEndSize()
const
265 return m_particleEndSize;
268 qreal particleSizeVariation()
const
270 return m_particleSizeVariation;
273 QQuickDirection * velocity()
const
278 QQuickDirection * acceleration()
const
280 return m_acceleration;
283 int maxParticleCount()
const
285 return m_maxParticleCount;
288 int startTime()
const
293 void reclaculateGroupId()
const;
296 qreal m_particlesPerSecond;
297 int m_particleDuration;
298 int m_particleDurationVariation;
300 QQuickParticleSystem* m_system;
301 QQuickParticleExtruder* m_extruder;
302 QQuickParticleExtruder* m_defaultExtruder;
303 QQuickParticleExtruder* effectiveExtruder();
304 QQuickDirection * m_velocity;
305 QQuickDirection * m_acceleration;
306 qreal m_particleSize;
307 qreal m_particleEndSize;
308 qreal m_particleSizeVariation;
314 QList<std::pair<
int, QPointF > > m_burstQueue;
315 int m_maxParticleCount;
318 qreal m_velocity_from_movement;
322 qreal m_last_timestamp;
323 qreal m_last_emission;
325 QPointF m_last_emitter;
326 QPointF m_last_last_emitter;
328 bool isEmitConnected();
332 mutable bool m_groupIdNeedRecalculation;
333 mutable QQuickParticleGroupData::ID m_groupId;
334 QQuickDirection m_nullVector;
QSet< QQuickParticleData * > data