@@ -472,27 +472,31 @@ void MOSprite::Update() {
472
472
}
473
473
474
474
// 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 ;
494
499
}
495
- m_SpriteAnimIsReversingFrames ? m_Frame-- : m_Frame++;
496
500
m_SpriteAnimTimer.Reset ();
497
501
}
498
502
}
0 commit comments