summaryrefslogtreecommitdiff
path: root/src/revolution/homebuttonLib/HBMFrameController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/revolution/homebuttonLib/HBMFrameController.cpp')
-rw-r--r--src/revolution/homebuttonLib/HBMFrameController.cpp68
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