mirror of
https://github.com/zeldaret/ss
synced 2026-07-29 23:46:59 -04:00
26af4db82d
* update from dtk-template and start work towards using clangd * include <a> -> "a" * Update build.yml * remove/add non-trivial class in union warning
178 lines
5.6 KiB
C++
178 lines
5.6 KiB
C++
#include "d/lyt/d_lyt_do_button.h"
|
|
|
|
struct DoButtonClass {
|
|
DoButtonClass();
|
|
virtual ~DoButtonClass();
|
|
|
|
u8 field_0x04;
|
|
u8 field_0x05;
|
|
u8 field_0x06;
|
|
u8 field_0x07;
|
|
f32 field_0x08;
|
|
f32 field_0x0C;
|
|
f32 field_0x10;
|
|
u8 field_0x14;
|
|
u8 field_0x15;
|
|
u8 field_0x16;
|
|
};
|
|
|
|
static DoButtonClass sDoButtonClass;
|
|
|
|
DoButtonClass::DoButtonClass() {
|
|
field_0x04 = 0;
|
|
field_0x05 = 0x29;
|
|
field_0x06 = 0x5E;
|
|
field_0x07 = 0;
|
|
field_0x08 = 0.0f;
|
|
field_0x0C = 0.0f;
|
|
field_0x14 = 0xFF;
|
|
field_0x10 = 76.0f;
|
|
field_0x15 = 0;
|
|
field_0x16 = 0;
|
|
}
|
|
DoButtonClass::~DoButtonClass() {}
|
|
|
|
STATE_DEFINE(dLytDobutton_c, InvisibleWait);
|
|
STATE_DEFINE(dLytDobutton_c, InvisibleTimeCnt);
|
|
STATE_DEFINE(dLytDobutton_c, In);
|
|
STATE_DEFINE(dLytDobutton_c, Wait);
|
|
STATE_DEFINE(dLytDobutton_c, Out);
|
|
|
|
#define DO_BUTTON_ANIM_IN 0
|
|
#define DO_BUTTON_ANIM 1
|
|
#define DO_BUTTON_ANIM_LOOP_BTN 2
|
|
#define DO_BUTTON_ANIM_LOOP_BTN_Z 3
|
|
#define DO_BUTTON_ANIM_LOOP_NUN 4
|
|
#define DO_BUTTON_ANIM_LOOP_REMO_CON 5
|
|
#define DO_BUTTON_ANIM_LOOP_RECOVER 6
|
|
#define DO_BUTTON_ANIM_LOOP_ROTATE 7
|
|
#define DO_BUTTON_ANIM_LOOP_MOVE_INFO 8
|
|
#define DO_BUTTON_ANIM_MOVE_ALPHA 9
|
|
#define DO_BUTTON_ANIM_MOVE_OUT 10
|
|
#define DO_BUTTON_ANIM_LOOP_BG 11
|
|
|
|
static const d2d::LytBrlanMapping brlanMap[] = {
|
|
{ "basicInfo_00_in.brlan", "G_inOut_00"},
|
|
{ "basicInfo_00_basicInfo.brlan", "G_basicInfo_00"},
|
|
{ "basicInfo_00_loopBtn.brlan", "G_loopBtn_00"},
|
|
{ "basicInfo_00_loopBtn.brlan", "G_loopBtnZ_00"},
|
|
{ "basicInfo_00_loopNun.brlan", "G_loopNun_00"},
|
|
{"basicInfo_00_loopRemoCon.brlan", "G_loopRemoCon_00"},
|
|
{"basicInfo_00_loopRecover.brlan", "G_loopRecover_00"},
|
|
{ "basicInfo_00_loopRotate.brlan", "G_loopRotate"},
|
|
{ "basicInfo_00_moveInfo.brlan", "G_moveInfo_00"},
|
|
{ "basicInfo_00_moveAlpha.brlan", "G_moveAlpha_00"},
|
|
{ "basicInfo_00_out.brlan", "G_inOut_00"},
|
|
{ "basicInfo_00_loopBg.brlan", "G_loopBg_00"},
|
|
};
|
|
|
|
void dLytDobutton_c::initializeState_InvisibleWait() {}
|
|
void dLytDobutton_c::executeState_InvisibleWait() {
|
|
if (field_0x488 == field_0x474 && mNextDoActionToShow == mDoActionToShow) {
|
|
return;
|
|
}
|
|
|
|
field_0x478 = field_0x474;
|
|
field_0x474 = field_0x488;
|
|
mDoActionToShow = mNextDoActionToShow;
|
|
if (field_0x488 == 0x29) {
|
|
return;
|
|
}
|
|
|
|
if (mNextDoActionToShow == 0x5E) {
|
|
return;
|
|
}
|
|
mStateMgr.changeState(StateID_InvisibleTimeCnt);
|
|
}
|
|
void dLytDobutton_c::finalizeState_InvisibleWait() {}
|
|
|
|
void dLytDobutton_c::initializeState_InvisibleTimeCnt() {
|
|
field_0x48C = 0;
|
|
}
|
|
|
|
extern "C" void fn_8010DF00(dLytDobutton_c *);
|
|
|
|
void dLytDobutton_c::executeState_InvisibleTimeCnt() {
|
|
if (field_0x488 != field_0x474 || mNextDoActionToShow != mDoActionToShow) {
|
|
field_0x478 = field_0x474;
|
|
field_0x474 = field_0x488;
|
|
mDoActionToShow = mNextDoActionToShow;
|
|
if (field_0x488 == 0x29 || mNextDoActionToShow == 0x5E) {
|
|
mStateMgr.changeState(StateID_InvisibleWait);
|
|
} else {
|
|
field_0x48C = 0;
|
|
}
|
|
} else {
|
|
if (field_0x48C < sDoButtonClass.field_0x15) {
|
|
field_0x48C++;
|
|
} else {
|
|
fn_8010DF00(this);
|
|
mStateMgr.changeState(StateID_In);
|
|
}
|
|
}
|
|
}
|
|
void dLytDobutton_c::finalizeState_InvisibleTimeCnt() {}
|
|
|
|
void dLytDobutton_c::initializeState_In() {
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(true);
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setFrame(0.0f);
|
|
mLyt.calc();
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(false);
|
|
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(true);
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setFrame(0.0f);
|
|
}
|
|
void dLytDobutton_c::executeState_In() {
|
|
if (field_0x488 == 0x29 || mNextDoActionToShow == 0x5E) {
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setFrame(0.0f);
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(true);
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setToEnd();
|
|
mLyt.calc();
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(false);
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(false);
|
|
mStateMgr.changeState(StateID_InvisibleWait);
|
|
} else if (mAnmGroups[DO_BUTTON_ANIM_IN].isEndReached()) {
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(false);
|
|
mStateMgr.changeState(StateID_Wait);
|
|
}
|
|
}
|
|
void dLytDobutton_c::finalizeState_In() {}
|
|
|
|
void dLytDobutton_c::initializeState_Wait() {}
|
|
void dLytDobutton_c::executeState_Wait() {
|
|
if (field_0x488 != field_0x474 || mNextDoActionToShow != mDoActionToShow) {
|
|
field_0x478 = field_0x474;
|
|
field_0x474 = field_0x488;
|
|
mDoActionToShow = mNextDoActionToShow;
|
|
if (field_0x488 == 0x29 || mNextDoActionToShow == 0x5E) {
|
|
mStateMgr.changeState(StateID_Out);
|
|
field_0x48C = 0;
|
|
} else {
|
|
fn_8010DF00(this);
|
|
}
|
|
}
|
|
}
|
|
void dLytDobutton_c::finalizeState_Wait() {}
|
|
|
|
void dLytDobutton_c::initializeState_Out() {
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(true);
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setFrame(0.0f);
|
|
mLyt.calc();
|
|
mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(false);
|
|
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(true);
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setFrame(0.0f);
|
|
}
|
|
void dLytDobutton_c::executeState_Out() {
|
|
if (mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].isEndReached()) {
|
|
mLyt.calc();
|
|
mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(false);
|
|
mStateMgr.changeState(StateID_InvisibleTimeCnt);
|
|
}
|
|
}
|
|
void dLytDobutton_c::finalizeState_Out() {}
|
|
|
|
bool dLytDobutton_c::init(m2d::ResAccIf_c *resAcc) {
|
|
return brlanMap[0].mFile[0] != '\0' && sDoButtonClass.field_0x04;
|
|
}
|