aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/particles
diff options
context:
space:
mode:
authorAlan Alpert <alan.alpert@nokia.com>2012-01-19 20:57:07 +1000
committerQt by Nokia <qt-info@nokia.com>2012-01-27 06:17:58 +0100
commit16ca1d7d65e66969724d4b490fa9a614b88f4bc3 (patch)
treecd87312bcb9af7c9a276af666889b86250342352 /src/quick/particles
parentcc3716f899fb683e1e8270ba5127f9899264072b (diff)
Implement reverse mode for sprites
Change-Id: I1e8c124e883b881938fce01aeb67ac369fe0bc28 Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'src/quick/particles')
-rw-r--r--src/quick/particles/qquickimageparticle.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/quick/particles/qquickimageparticle.cpp b/src/quick/particles/qquickimageparticle.cpp
index b8b05f2330..e910c94513 100644
--- a/src/quick/particles/qquickimageparticle.cpp
+++ b/src/quick/particles/qquickimageparticle.cpp
@@ -1474,8 +1474,17 @@ void QQuickImageParticle::spritesUpdate(qreal time)
//TODO: Interpolate between two different animations if it's going to transition next frame
// This is particularly important for cut-up sprites.
QQuickParticleData* datum = (mainDatum->animationOwner == this ? mainDatum : getShadowDatum(mainDatum));
+ int spriteIdx = 0;
+ for (int i = 0; i<m_startsIdx.count(); i++) {
+ if (m_startsIdx[i].second == gIdx){
+ spriteIdx = m_startsIdx[i].first + datum->index;
+ break;
+ }
+ }
+
double frameAt;
qreal progress = 0;
+
if (datum->frameDuration > 0) {
qreal frame = (time - datum->animT)/(datum->frameDuration / 1000.0);
frame = qBound((qreal)0.0, frame, (qreal)((qreal)datum->frameCount - 1.0));//Stop at count-1 frames until we have between anim interpolation
@@ -1487,15 +1496,12 @@ void QQuickImageParticle::spritesUpdate(qreal time)
datum->frameAt++;
if (datum->frameAt >= datum->frameCount){
datum->frameAt = 0;
- for (int i = 0; i<m_startsIdx.count(); i++) {
- if (m_startsIdx[i].second == gIdx){
- m_spriteEngine->advance(m_startsIdx[i].first + datum->index);
- break;
- }
- }
+ m_spriteEngine->advance(spriteIdx);
}
frameAt = datum->frameAt;
}
+ if (m_spriteEngine->sprite(spriteIdx)->reverse())//### Store this in datum too?
+ frameAt = (datum->frameCount - 1) - frameAt;
QSizeF sheetSize = getState<ImageMaterialData>(m_material)->animSheetSize;
qreal y = datum->animY / sheetSize.height();
qreal w = datum->animWidth / sheetSize.width();