Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit 32ac46f

Browse files
committed
Further improve MOSprite animation
1 parent 3449bd1 commit 32ac46f

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

Entities/MOSprite.cpp

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -472,27 +472,31 @@ void MOSprite::Update() {
472472
}
473473

474474
// Animate the sprite, if applicable
475-
int frameTime = m_SpriteAnimDuration / m_FrameCount;
476-
477-
if (m_SpriteAnimMode == ALWAYSLOOP) {
478-
float cycleTime = (static_cast<long>(m_SpriteAnimTimer.GetElapsedSimTimeMS())) % m_SpriteAnimDuration;
479-
m_Frame = floorf((cycleTime / static_cast<float>(m_SpriteAnimDuration)) * static_cast<float>(m_FrameCount));
480-
481-
} else if (m_SpriteAnimMode == ALWAYSRANDOM && m_SpriteAnimTimer.GetElapsedSimTimeMS() > frameTime) {
482-
int prevFrame = m_Frame;
483-
// Keep trying to find a new frame
484-
do {
485-
m_Frame = floorf(static_cast<float>(m_FrameCount) * PosRand());
486-
} while (m_Frame == prevFrame);
487-
m_SpriteAnimTimer.Reset();
488-
489-
} else if (m_SpriteAnimMode == ALWAYSPINGPONG && m_SpriteAnimTimer.GetElapsedSimTimeMS() > frameTime) {
490-
if (m_Frame == m_FrameCount - 1) {
491-
m_SpriteAnimIsReversingFrames = true;
492-
} else if (m_Frame == 0) {
493-
m_SpriteAnimIsReversingFrames = false;
475+
unsigned int frameTime = m_SpriteAnimDuration / m_FrameCount;
476+
unsigned int prevFrame;
477+
478+
if (m_SpriteAnimTimer.GetElapsedSimTimeMS() > frameTime) {
479+
switch (m_SpriteAnimMode) {
480+
case ALWAYSLOOP:
481+
m_Frame = ((m_Frame + 1) % m_FrameCount);
482+
break;
483+
case ALWAYSRANDOM:
484+
prevFrame = m_Frame;
485+
while (m_Frame == prevFrame) {
486+
m_Frame = floorf(static_cast<float>(m_FrameCount) * PosRand());
487+
}
488+
break;
489+
case ALWAYSPINGPONG:
490+
if (m_Frame == m_FrameCount - 1) {
491+
m_SpriteAnimIsReversingFrames = true;
492+
} else if (m_Frame == 0) {
493+
m_SpriteAnimIsReversingFrames = false;
494+
}
495+
m_SpriteAnimIsReversingFrames ? m_Frame-- : m_Frame++;
496+
break;
497+
default:
498+
break;
494499
}
495-
m_SpriteAnimIsReversingFrames ? m_Frame-- : m_Frame++;
496500
m_SpriteAnimTimer.Reset();
497501
}
498502
}

0 commit comments

Comments
 (0)