diff options
Diffstat (limited to 'src/revolution/homebuttonLib/HBMFrameController.cpp')
| -rw-r--r-- | src/revolution/homebuttonLib/HBMFrameController.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/revolution/homebuttonLib/HBMFrameController.cpp b/src/revolution/homebuttonLib/HBMFrameController.cpp new file mode 100644 index 0000000000..dccaf15996 --- /dev/null +++ b/src/revolution/homebuttonLib/HBMFrameController.cpp @@ -0,0 +1,68 @@ + +#include "HBMFrameController.h" + +namespace homebutton { + + void FrameController::init(int anm_type, f32 max_frame, f32 min_frame, f32 delta) { + mAnmType = anm_type; + mMaxFrame = max_frame; + mMinFrame = min_frame; + + mDelta = delta; + mState = ANIM_STATE_STOP; + mbAlternateBack = false; + + initFrame(); + } + + void FrameController::initFrame() { + mFrame = mAnmType == ANIM_TYPE_BACKWARD ? mMaxFrame : mMinFrame; + } + + void FrameController::calc() { + if (mState != ANIM_STATE_PLAY) { + return; + } + + switch (mAnmType) { + case ANIM_TYPE_FORWARD: + if ((mFrame += mDelta) >= getLastFrame()) { + mFrame = getLastFrame(); + stop(); + } + + break; + + case ANIM_TYPE_BACKWARD: + if ((mFrame -= mDelta) <= mMinFrame) { + mFrame = mMinFrame; + stop(); + } + + break; + + case ANIM_TYPE_LOOP: + if ((mFrame += mDelta) >= mMaxFrame) { + mFrame -= mMaxFrame - mMinFrame; + } + + break; + + case ANIM_TYPE_ALTERNATE: + if (!mbAlternateBack) { + if ((mFrame += mDelta) >= getLastFrame()) { + mFrame = getLastFrame(); + mbAlternateBack = true; + } + } else { + if ((mFrame -= mDelta) <= mMinFrame) { + mFrame = mMinFrame; + mbAlternateBack = false; + } + } + + break; + } + } + +} // namespace homebutton |
