diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2012-01-19 20:57:07 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-27 06:17:58 +0100 |
commit | 16ca1d7d65e66969724d4b490fa9a614b88f4bc3 (patch) | |
tree | cd87312bcb9af7c9a276af666889b86250342352 /src/quick/particles | |
parent | cc3716f899fb683e1e8270ba5127f9899264072b (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.cpp | 18 |
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(); |