summaryrefslogtreecommitdiff
path: root/src/revolution/homebuttonLib/HBMFrameController.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-12-16 06:55:07 -0800
committerGitHub <noreply@github.com>2025-12-16 16:55:07 +0200
commit8185d87f855baff0d55d0e3ffc1a3cbdcfc4b5e2 (patch)
tree2a3c01f1a2a8b81de5a0748a5bcb187a97e7a114 /src/revolution/homebuttonLib/HBMFrameController.cpp
parentc8104b6d62cc424318c7e0c44c92d94234bfef15 (diff)
copy homebuttonLib from oot-vc (#2960)
* initial copy of hbm from sdk_2009-12-11 * some more nw4hbm cleanup * nw4hbm db mostly done * nw4hbm snd copied from oot-vc * nw4hbm ut copied * nw4hbm lyt copied * nw4hbm copied, mostly matching usa 1.0 * setup nw4hbm debug define * fix HBMDataInfo struct * add rvl sdk card lib
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