56 Q_PROPERTY(
bool running READ isRunning WRITE setRunning NOTIFY runningChanged)
57 Q_PROPERTY(
bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
58 Q_PROPERTY(
int startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged)
59 Q_PROPERTY(
int time READ time WRITE setTime NOTIFY timeChanged)
60 Q_PROPERTY(
bool useRandomSeed READ useRandomSeed WRITE setUseRandomSeed NOTIFY useRandomSeedChanged)
61 Q_PROPERTY(
int seed READ seed WRITE setSeed NOTIFY seedChanged)
62 Q_PROPERTY(
bool logging READ logging WRITE setLogging NOTIFY loggingChanged)
63 Q_PROPERTY(QQuick3DParticleSystemLogging *loggingData READ loggingData NOTIFY loggingDataChanged)
64 QML_NAMED_ELEMENT(ParticleSystem3D)
65 QML_ADDED_IN_VERSION(6, 2)
68 QQuick3DParticleSystem(QQuick3DNode *parent =
nullptr);
69 ~QQuick3DParticleSystem() override;
71 bool isRunning()
const;
72 bool isPaused()
const;
73 int startTime()
const;
75 bool useRandomSeed()
const;
78 int particleCount()
const;
80 QQuick3DParticleSystemLogging *loggingData()
const;
83 void registerParticle(QQuick3DParticle *particle);
84 void unRegisterParticle(QQuick3DParticle *particle);
85 void registerParticleEmitter(QQuick3DParticleEmitter* e);
86 void unRegisterParticleEmitter(QQuick3DParticleEmitter* e);
87 void registerParticleAffector(QQuick3DParticleAffector* a);
88 void unRegisterParticleAffector(QQuick3DParticleAffector* a);
90 void updateCurrentTime(
int currentTime);
93 bool isShared(
const QQuick3DParticle *particle)
const;
94 int currentTime()
const;
97 QQuick3DParticleTrailEmitter *emitter =
nullptr;
101 Q_INVOKABLE
void reset();
104 void setRunning(
bool running);
105 void setPaused(
bool paused);
106 void setStartTime(
int startTime);
107 void setTime(
int time);
108 void setUseRandomSeed(
bool randomize);
109 void setSeed(
int seed);
110 void setLogging(
bool logging);
112 void setEditorTime(
int time);
115 void runningChanged();
116 void pausedChanged();
118 void startTimeChanged();
119 void useRandomSeedChanged();
121 void loggingChanged();
122 void loggingDataChanged();
125 void componentComplete() override;
128 void registerParticleModel(QQuick3DParticleModelParticle* m);
129 void registerParticleSprite(QQuick3DParticleSpriteParticle* m);
130 void updateLoggingData();
131 void resetLoggingVariables();
132 void doSeedRandomization();
135 void processModelParticle(QQuick3DParticleModelParticle *modelParticle,
const QVector<TrailEmits> &trailEmits,
float timeS);
136 void processSpriteParticle(QQuick3DParticleSpriteParticle *spriteParticle,
const QVector<TrailEmits> &trailEmits,
float timeS);
137 void processModelBlendParticle(QQuick3DParticleModelBlendParticle *particle,
const QVector<TrailEmits> &trailEmits,
float timeS);
138 void processParticleCommon(QQuick3DParticleDataCurrent ¤tData,
const QQuick3DParticleData *d,
float particleTimeS);
139 void processParticleFadeInOut(QQuick3DParticleDataCurrent ¤tData,
const QQuick3DParticle *particle,
float particleTimeS,
float particleTimeLeftS);
140 void processParticleAlignment(QQuick3DParticleDataCurrent ¤tData,
const QQuick3DParticle *particle,
const QQuick3DParticleData *d);
141 static bool isGloballyDisabled();
142 static bool isEditorModeOn();
145 friend class QQuick3DParticleEmitter;
146 friend class QQuick3DParticleTrailEmitter;
147 friend class QQuick3DParticleSystemUpdate;
148 friend class QQuick3DParticleSystemAnimation;
149 friend class QQuick3DParticleModelBlendParticle;
154 bool m_componentComplete;
156 QQuick3DParticleSystemAnimation *m_animation =
nullptr;
159 QQuick3DParticleSystemUpdate *m_updateAnimation =
nullptr;
161 QList<QQuick3DParticle *> m_particles;
162 QList<QQuick3DParticleEmitter *> m_emitters;
163 QList<QQuick3DParticleTrailEmitter *> m_trailEmitters;
164 QList<QQuick3DParticleAffector *> m_affectors;
165 QMap<QQuick3DParticleAffector *, QMetaObject::Connection> m_connections;
170 int m_currentTime = 0;
173 int m_editorTime = 0;
175 QElapsedTimer m_perfTimer;
176 QTimer m_loggingTimer;
177 qint64 m_timeAnimation = 0;
178 int m_particlesMax = 0;
179 int m_particlesUsed = 0;
181 bool m_useRandomSeed =
true;
184 QQuick3DParticleSystemLogging *m_loggingData =
nullptr;
186 int m_particleIdIndex = 0;