aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickspriteengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickspriteengine.cpp')
-rw-r--r--src/quick/items/qquickspriteengine.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/quick/items/qquickspriteengine.cpp b/src/quick/items/qquickspriteengine.cpp
index 38be93f1ce..470aa6d160 100644
--- a/src/quick/items/qquickspriteengine.cpp
+++ b/src/quick/items/qquickspriteengine.cpp
@@ -139,12 +139,12 @@ int QQuickSpriteEngine::spriteState(int sprite)
if (!m_sprites[state]->m_generatedCount)
return state;
int extra;
- if (m_sprites[state]->duration() < 0) {
+ if (m_sprites[state]->frameSync()) {
extra = m_startTimes[sprite];
} else {
if (!m_duration[sprite])
return state;
- int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow;
+ int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames;
extra = (m_timeOffset - m_startTimes[sprite])/rowDuration;
}
return state + extra;
@@ -157,7 +157,7 @@ int QQuickSpriteEngine::spriteStart(int sprite)
int state = m_things[sprite];
if (!m_sprites[state]->m_generatedCount)
return m_startTimes[sprite];
- int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow;
+ int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames;
int extra = (m_timeOffset - m_startTimes[sprite])/rowDuration;
return m_startTimes[sprite] + extra*rowDuration;
}
@@ -168,12 +168,12 @@ int QQuickSpriteEngine::spriteFrames(int sprite)
if (!m_sprites[state]->m_generatedCount)
return m_sprites[state]->frames();
int extra;
- if (m_sprites[state]->duration() < 0) {
+ if (m_sprites[state]->frameSync()) {
extra = m_startTimes[sprite];
} else {
if (!m_duration[sprite])
return state;
- int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow;
+ int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames;
extra = (m_timeOffset - m_startTimes[sprite])/rowDuration;
}
if (extra == m_sprites[state]->m_generatedCount - 1)//last state
@@ -188,11 +188,11 @@ int QQuickSpriteEngine::spriteDuration(int sprite)//Full duration, not per frame
return m_duration[sprite];
int state = m_things[sprite];
if (!m_sprites[state]->m_generatedCount)
- return m_duration[sprite] * m_sprites[state]->frames();
- int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow;
+ return m_duration[sprite];
+ int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames;
int extra = (m_timeOffset - m_startTimes[sprite])/rowDuration;
if (extra == m_sprites[state]->m_generatedCount - 1)//last state
- return (m_duration[sprite] * m_sprites[state]->frames()) % rowDuration;
+ return m_duration[sprite] % rowDuration;
else
return rowDuration;
}
@@ -203,12 +203,12 @@ int QQuickSpriteEngine::spriteY(int sprite)
if (!m_sprites[state]->m_generatedCount)
return m_sprites[state]->m_rowY;
int extra;
- if (m_sprites[state]->duration() < 0) {
+ if (m_sprites[state]->frameSync()) {
extra = m_startTimes[sprite];
} else {
if (!m_duration[sprite])
return state;
- int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow;
+ int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames;
extra = (m_timeOffset - m_startTimes[sprite])/rowDuration;
}
return m_sprites[state]->m_rowY + m_sprites[state]->m_frameHeight * extra;
@@ -397,7 +397,7 @@ void QQuickStochasticEngine::restart(int index)
m_startTimes[index] = m_timeOffset;
if (m_addAdvance)
m_startTimes[index] += m_advanceTime.elapsed();
- int time = m_duration[index] * m_states[m_things[index]]->frames() + m_startTimes[index];
+ int time = m_duration[index] + m_startTimes[index];
for (int i=0; i<m_stateUpdates.count(); i++)
m_stateUpdates[i].second.removeAll(index);
if (m_duration[index] >= 0)
@@ -406,7 +406,7 @@ void QQuickStochasticEngine::restart(int index)
void QQuickSpriteEngine::restart(int index) //Reimplemented to recognize and handle pseudostates
{
- if (m_sprites[m_things[index]]->duration() < 0) {//Manually advanced
+ if (m_sprites[m_things[index]]->frameSync()) {//Manually advanced
m_startTimes[index] = 0;
} else {
m_startTimes[index] = m_timeOffset;
@@ -436,7 +436,7 @@ void QQuickSpriteEngine::advance(int idx) //Reimplemented to recognize and handl
if (idx >= m_things.count())
return;//TODO: Proper fix(because this has happened and I just ignored it)
if (m_duration[idx] == 0) {
- if (m_sprites[m_things[idx]]->duration() < 0) {
+ if (m_sprites[m_things[idx]]->frameSync()) {
//Manually called, advance inner substate count
m_startTimes[idx]++;
if (m_startTimes[idx] < m_sprites[m_things[idx]]->m_generatedCount) {
@@ -446,8 +446,8 @@ void QQuickSpriteEngine::advance(int idx) //Reimplemented to recognize and handl
}
}
//just go past the pseudostate logic
- } else if (m_startTimes[idx] + m_duration[idx] * m_states[m_things[idx]]->frames()
- > m_timeOffset + (m_addAdvance ? m_advanceTime.elapsed() : 0)) {
+ } else if (m_startTimes[idx] + m_duration[idx]
+ > int(m_timeOffset + (m_addAdvance ? m_advanceTime.elapsed() : 0))) {
//only a pseduostate ended
emit stateChanged(idx);
addToUpdateList(m_timeOffset + spriteDuration(idx), idx);