summaryrefslogtreecommitdiff
path: root/src/d/lyt/d_lyt_pause_back.cpp
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-08-03 12:35:45 +0200
committerrobojumper <robojumper@gmail.com>2025-09-13 10:12:38 +0200
commitb4200519b168b970b3afdccf357d1ef42001b52a (patch)
treea8c6420bd02d662d4c69402779d91a810fa07965 /src/d/lyt/d_lyt_pause_back.cpp
parente97f2d6a4ad0c75a3f1c5eced7656b89b81633ae (diff)
d_lyt_pause_back OK
Diffstat (limited to 'src/d/lyt/d_lyt_pause_back.cpp')
-rw-r--r--src/d/lyt/d_lyt_pause_back.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/src/d/lyt/d_lyt_pause_back.cpp b/src/d/lyt/d_lyt_pause_back.cpp
new file mode 100644
index 00000000..c2070a61
--- /dev/null
+++ b/src/d/lyt/d_lyt_pause_back.cpp
@@ -0,0 +1,159 @@
+#include "d/lyt/d_lyt_pause_back.h"
+
+#include "common.h"
+#include "d/d_stage_mgr.h"
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_pause.h"
+#include "rvl/GX/GXTexture.h"
+
+STATE_DEFINE(dLytPauseBack_c, None);
+STATE_DEFINE(dLytPauseBack_c, In);
+STATE_DEFINE(dLytPauseBack_c, Wait);
+STATE_DEFINE(dLytPauseBack_c, Out);
+
+static const d2d::LytBrlanMapping brlanMap[] = {
+ { "pauseBace_00_in.brlan", "G_inOut_00"},
+ {"pauseBace_00_out.brlan", "G_inOut_00"},
+};
+
+#define PAUSE_BACK_ANIM_IN 0
+#define PAUSE_BACK_ANIM_OUT 1
+
+#define PAUSE_BACK_NUM_ANIMS 2
+
+dLytPauseBack_c::dLytPauseBack_c() : mStateMgr(*this) {}
+
+bool dLytPauseBack_c::build() {
+ d2d::ResAccIf_c *resAcc = dLytPauseMgr_c::GetInstance()->getResAcc1();
+ mLyt.setResAcc(resAcc);
+ mLyt.build("pauseBace_00.brlyt", nullptr);
+ mLyt.setPriority(0x86);
+
+ for (int i = 0; i < PAUSE_BACK_NUM_ANIMS; i++) {
+ mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
+ }
+
+ mStateMgr.changeState(StateID_None);
+ return true;
+}
+
+bool dLytPauseBack_c::remove() {
+ mLyt.unbindAnims();
+ for (int i = 0; i < PAUSE_BACK_NUM_ANIMS; i++) {
+ mAnm[i].remove();
+ }
+ return true;
+}
+
+bool dLytPauseBack_c::execute() {
+ mStateMgr.executeState();
+ mLyt.calc();
+ return true;
+}
+
+bool dLytPauseBack_c::draw() {
+ if (mVisible == true) {
+ mLyt.addToDrawList();
+ }
+ return true;
+}
+
+void dLytPauseBack_c::requestIn() {
+ mInRequest = true;
+}
+
+void dLytPauseBack_c::requestOut() {
+ mOutRequest = true;
+}
+
+void dLytPauseBack_c::initializeState_None() {
+ mLyt.unbindAnims();
+ field_0x156 = false;
+ mInRequest = false;
+ mOutRequest = false;
+ mVisible = false;
+ mOutStep = 0;
+}
+void dLytPauseBack_c::executeState_None() {
+ if (mInRequest == true) {
+ mInRequest = false;
+ mStateMgr.changeState(StateID_In);
+ }
+}
+void dLytPauseBack_c::finalizeState_None() {}
+
+void dLytPauseBack_c::initializeState_In() {
+ startAnim(PAUSE_BACK_ANIM_IN);
+ mVisible = true;
+ if (dStageMgr_c::GetInstance()->getField_0x8898() != nullptr) {
+ GXTexObj texObj;
+ dStageMgr_c::GetInstance()->getField_0x8898()->getTexObj(&texObj);
+ mLyt.findPicture("P_capture_00")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ mLyt.findPicture("P_capture_01")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ }
+}
+void dLytPauseBack_c::executeState_In() {
+ d2d::AnmGroup_c &anm = mAnm[PAUSE_BACK_ANIM_IN];
+ if (anm.isEndReached() == true) {
+ mStateMgr.changeState(StateID_Wait);
+ } else {
+ anm.play();
+ }
+}
+void dLytPauseBack_c::finalizeState_In() {}
+
+void dLytPauseBack_c::initializeState_Wait() {
+ field_0x156 = true;
+}
+void dLytPauseBack_c::executeState_Wait() {
+ field_0x156 = false;
+ if (mOutRequest == true) {
+ mOutRequest = false;
+ mStateMgr.changeState(StateID_Out);
+ }
+}
+void dLytPauseBack_c::finalizeState_Wait() {}
+
+void dLytPauseBack_c::initializeState_Out() {
+ stopAnim(PAUSE_BACK_ANIM_IN);
+ startAnim(PAUSE_BACK_ANIM_OUT);
+ mOutStep = 0;
+}
+void dLytPauseBack_c::executeState_Out() {
+ d2d::AnmGroup_c &anm = mAnm[PAUSE_BACK_ANIM_OUT];
+ switch (mOutStep) {
+ case 0: {
+ if (anm.isEndReached() == true) {
+ mOutStep = 1;
+ field_0x156 = true;
+ }
+ break;
+ }
+ case 1: {
+ mStateMgr.changeState(StateID_None);
+ return;
+ }
+ }
+ anm.play();
+}
+void dLytPauseBack_c::finalizeState_Out() {}
+
+void dLytPauseBack_c::startAnim(int idx) {
+ d2d::AnmGroup_c &anm = mAnm[idx];
+ anm.bind(false);
+ anm.setFrame(0.0f);
+}
+
+void dLytPauseBack_c::stopAnim(int idx) {
+ d2d::AnmGroup_c &anm = mAnm[idx];
+ anm.unbind();
+}
+
+void dLytPauseBack_c::loadBgTexture() {
+ if (dLytPauseMgr_c::GetInstance()->getBgTexture() != nullptr) {
+ GXTexObj texObj;
+ dLytPauseMgr_c::GetInstance()->getBgTexture()->getTexObj(&texObj);
+ mLyt.findPicture("P_capture_00")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ mLyt.findPicture("P_capture_01")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ }
+}