54 Q_PROPERTY(
bool running READ isRunning WRITE setRunning NOTIFY runningChanged)
55 Q_PROPERTY(
bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
56 Q_PROPERTY(
int startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged)
57 Q_PROPERTY(
int time READ time WRITE setTime NOTIFY timeChanged)
58 Q_PROPERTY(
bool useRandomSeed READ useRandomSeed WRITE setUseRandomSeed NOTIFY useRandomSeedChanged)
59 Q_PROPERTY(
int seed READ seed WRITE setSeed NOTIFY seedChanged)
60 Q_PROPERTY(
bool logging READ logging WRITE setLogging NOTIFY loggingChanged)
61 Q_PROPERTY(QQuick3DParticleSystemLogging *loggingData READ loggingData NOTIFY loggingDataChanged)
62 QML_NAMED_ELEMENT(ParticleSystem3D)
63 QML_ADDED_IN_VERSION(6, 2)
66 QQuick3DParticleSystem(QQuick3DNode *parent =
nullptr);
67 ~QQuick3DParticleSystem() override;
69 bool isRunning()
const;
70 bool isPaused()
const;
71 int startTime()
const;
73 bool useRandomSeed()
const;
76 int particleCount()
const;
78 QQuick3DParticleSystemLogging *loggingData()
const;
81 void registerParticle(QQuick3DParticle *particle);
82 void unRegisterParticle(QQuick3DParticle *particle);
83 void registerParticleEmitter(QQuick3DParticleEmitter* e);
84 void unRegisterParticleEmitter(QQuick3DParticleEmitter* e);
85 void registerParticleAffector(QQuick3DParticleAffector* a);
86 void unRegisterParticleAffector(QQuick3DParticleAffector* a);
88 void updateCurrentTime(
int currentTime);
91 bool isShared(
const QQuick3DParticle *particle)
const;
92 int currentTime()
const;
95 QQuick3DParticleTrailEmitter *emitter =
nullptr;
99 Q_INVOKABLE
void reset();
102 void setRunning(
bool running);
103 void setPaused(
bool paused);
104 void setStartTime(
int startTime);
105 void setTime(
int time);
106 void setUseRandomSeed(
bool randomize);
107 void setSeed(
int seed);
108 void setLogging(
bool logging);
110 void setEditorTime(
int time);
113 void runningChanged();
114 void pausedChanged();
116 void startTimeChanged();
117 void useRandomSeedChanged();
119 void loggingChanged();
120 void loggingDataChanged();
123 void componentComplete() override;
126 void registerParticleModel(QQuick3DParticleModelParticle* m);
127 void registerParticleSprite(QQuick3DParticleSpriteParticle* m);
128 void updateLoggingData();
129 void resetLoggingVariables();
130 void doSeedRandomization();
133 void processModelParticle(QQuick3DParticleModelParticle *modelParticle,
const QVector<TrailEmits> &trailEmits,
float timeS);
134 void processSpriteParticle(QQuick3DParticleSpriteParticle *spriteParticle,
const QVector<TrailEmits> &trailEmits,
float timeS);
135 void processModelBlendParticle(QQuick3DParticleModelBlendParticle *particle,
const QVector<TrailEmits> &trailEmits,
float timeS);
136 void processParticleCommon(QQuick3DParticleDataCurrent ¤tData,
const QQuick3DParticleData *d,
float particleTimeS);
137 void processParticleFadeInOut(QQuick3DParticleDataCurrent ¤tData,
const QQuick3DParticle *particle,
float particleTimeS,
float particleTimeLeftS);
138 void processParticleAlignment(QQuick3DParticleDataCurrent ¤tData,
const QQuick3DParticle *particle,
const QQuick3DParticleData *d);
139 static bool isGloballyDisabled();
140 static bool isEditorModeOn();
143 friend class QQuick3DParticleEmitter;
144 friend class QQuick3DParticleTrailEmitter;
145 friend class QQuick3DParticleSystemUpdate;
146 friend class QQuick3DParticleSystemAnimation;
147 friend class QQuick3DParticleModelBlendParticle;
152 bool m_componentComplete;
154 QQuick3DParticleSystemAnimation *m_animation =
nullptr;
157 QQuick3DParticleSystemUpdate *m_updateAnimation =
nullptr;
159 QList<QQuick3DParticle *> m_particles;
160 QList<QQuick3DParticleEmitter *> m_emitters;
161 QList<QQuick3DParticleTrailEmitter *> m_trailEmitters;
162 QList<QQuick3DParticleAffector *> m_affectors;
163 QMap<QQuick3DParticleAffector *, QMetaObject::Connection> m_connections;
168 int m_currentTime = 0;
171 int m_editorTime = 0;
173 QElapsedTimer m_perfTimer;
174 QTimer m_loggingTimer;
175 qint64 m_timeAnimation = 0;
176 int m_particlesMax = 0;
177 int m_particlesUsed = 0;
179 bool m_useRandomSeed =
true;
182 QQuick3DParticleSystemLogging *m_loggingData =
nullptr;
184 int m_particleIdIndex = 0;