10
11
12
13
14
15
16
17
18
19
20
22QQuick3DParticleSpriteSequence::QQuick3DParticleSpriteSequence(QObject *parent)
28QQuick3DParticleSpriteSequence::~QQuick3DParticleSpriteSequence()
31 m_parentParticle->setSpriteSequence(
nullptr);
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50int QQuick3DParticleSpriteSequence::frameCount()
const
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71int QQuick3DParticleSpriteSequence::frameIndex()
const
77
78
79
80
81
82
83
84
85
86bool QQuick3DParticleSpriteSequence::interpolate()
const
92
93
94
95
96
97
98
99
100
101int QQuick3DParticleSpriteSequence::duration()
const
107
108
109
110
111
112
113
114
115int QQuick3DParticleSpriteSequence::durationVariation()
const
117 return m_durationVariation;
121
122
123
124
125
126
127
128
129
130bool QQuick3DParticleSpriteSequence::randomStart()
const
132 return m_randomStart;
136
137
138
139
140
141
142
143
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164QQuick3DParticleSpriteSequence::AnimationDirection QQuick3DParticleSpriteSequence::animationDirection()
const
166 return m_animationDirection;
169void QQuick3DParticleSpriteSequence::setFrameCount(
int frameCount)
171 if (m_frameCount == frameCount)
173 m_frameCount = std::max(1, frameCount);
175 Q_EMIT frameCountChanged();
178void QQuick3DParticleSpriteSequence::setFrameIndex(
int frameIndex)
180 if (m_frameIndex == frameIndex)
182 m_frameIndex = std::max(0, frameIndex);
184 Q_EMIT frameIndexChanged();
187void QQuick3DParticleSpriteSequence::setInterpolate(
bool interpolate)
189 if (m_interpolate == interpolate)
191 m_interpolate = interpolate;
193 Q_EMIT interpolateChanged();
196void QQuick3DParticleSpriteSequence::setDuration(
int duration)
198 if (m_duration == duration)
201 m_duration = duration;
203 Q_EMIT durationChanged();
206void QQuick3DParticleSpriteSequence::setDurationVariation(
int durationVariation)
208 if (m_durationVariation == durationVariation)
211 m_durationVariation = durationVariation;
213 Q_EMIT durationVariationChanged();
216void QQuick3DParticleSpriteSequence::setRandomStart(
bool randomStart)
218 if (m_randomStart == randomStart)
220 m_randomStart = randomStart;
222 Q_EMIT randomStartChanged();
225void QQuick3DParticleSpriteSequence::setAnimationDirection(QQuick3DParticleSpriteSequence::AnimationDirection animationDirection)
227 if (m_animationDirection == animationDirection)
229 m_animationDirection = animationDirection;
231 Q_EMIT animationDirectionChanged();
234void QQuick3DParticleSpriteSequence::componentComplete()
236 m_parentParticle = qobject_cast<QQuick3DParticleSpriteParticle *>(parent());
237 if (!m_parentParticle)
238 qWarning() <<
"SpriteSequence3D requires parent SpriteParticle3D to function correctly!";
241void QQuick3DParticleSpriteSequence::markNodesDirty()
243 if (m_parentParticle)
244 m_parentParticle->markNodesDirty();
249float QQuick3DParticleSpriteSequence::firstFrame(
int index,
bool singleFrame)
251 float firstFrame = 0.0f;
253 if (!m_parentParticle || !m_parentParticle->m_system)
255 auto rand = m_parentParticle->m_system->rand();
256 firstFrame = rand->get(index, QPRand::SpriteAnimationI);
257 }
else if (m_frameCount > 1 && m_frameIndex > 0) {
258 int frameIndex = std::min(m_frameIndex, m_frameCount - 1);
260 firstFrame =
float(frameIndex) / (
float(m_frameCount - 1) + 0.0001f);
262 firstFrame =
float(frameIndex) /
float(m_frameCount);