mirror of
https://github.com/zeldaret/ss
synced 2026-06-12 05:27:23 -04:00
268 lines
6.7 KiB
C++
268 lines
6.7 KiB
C++
#ifndef D_LYT_DO_BUTTON_H
|
|
#define D_LYT_DO_BUTTON_H
|
|
|
|
#include "common.h"
|
|
#include "d/lyt/d2d.h"
|
|
#include "d/lyt/d_textbox.h"
|
|
#include "nw4r/lyt/lyt_pane.h"
|
|
#include "s/s_State.hpp"
|
|
|
|
class dLytDobutton_c {
|
|
public:
|
|
// TODO: figure out that these mean. The two pane arrays in d_lyt_do_button.cpp might help
|
|
enum Icon_e {
|
|
ICON_0 = 0,
|
|
ICON_1 = 1,
|
|
ICON_2 = 2,
|
|
ICON_3 = 3,
|
|
ICON_4 = 4,
|
|
ICON_5 = 5,
|
|
ICON_6 = 6,
|
|
ICON_7 = 7,
|
|
ICON_8 = 8,
|
|
ICON_9 = 9,
|
|
ICON_10 = 10,
|
|
ICON_11 = 11,
|
|
ICON_12 = 12,
|
|
ICON_13 = 13,
|
|
ICON_14 = 14,
|
|
ICON_15 = 15,
|
|
ICON_16 = 16,
|
|
ICON_17 = 17,
|
|
ICON_18 = 18,
|
|
ICON_19 = 19,
|
|
ICON_20 = 20,
|
|
ICON_21 = 21,
|
|
ICON_22 = 22,
|
|
ICON_23 = 23,
|
|
ICON_24 = 24,
|
|
ICON_25 = 25,
|
|
ICON_26 = 26,
|
|
ICON_27 = 27,
|
|
ICON_28 = 28,
|
|
ICON_29 = 29,
|
|
ICON_30 = 30,
|
|
ICON_31 = 31,
|
|
ICON_32 = 32,
|
|
ICON_33 = 33,
|
|
ICON_34 = 34,
|
|
ICON_35 = 35,
|
|
ICON_36 = 36,
|
|
ICON_37 = 37,
|
|
ICON_38 = 38,
|
|
ICON_39 = 39,
|
|
ICON_40 = 40,
|
|
|
|
ICON_NONE = 41,
|
|
};
|
|
|
|
// 001-Action.msbt - Enum for ACT_DO
|
|
// This is actually just the first part of ACT_INFO, but
|
|
// LytDoButtonRelated has a full conversion table
|
|
// from Act_IE_e -> Act_Do_e
|
|
|
|
enum Act_Do_e {
|
|
ACT_DO_CLIMB_UP = 0,
|
|
ACT_DO_JUMP = 1,
|
|
ACT_DO_DROP_DOWN = 2,
|
|
ACT_DO_LET_GO = 3,
|
|
ACT_DO_OPEN = 4,
|
|
ACT_DO_PUT_DOWN = 5,
|
|
ACT_DO_THROW = 6,
|
|
ACT_DO_BURROW = 7,
|
|
ACT_DO_ROLL = 8,
|
|
ACT_DO_9 = 9,
|
|
ACT_DO_MOVE = 10,
|
|
ACT_DO_GRAB = 11,
|
|
ACT_DO_SHOOT = 12,
|
|
ACT_DO_13 = 13,
|
|
ACT_DO_14 = 14,
|
|
ACT_DO_15 = 15,
|
|
ACT_DO_TALK = 16,
|
|
ACT_DO_EXAMINE = 17,
|
|
ACT_DO_DRAW = 18,
|
|
ACT_DO_19 = 19,
|
|
ACT_DO_BLOW = 20,
|
|
ACT_DO_21 = 21,
|
|
ACT_DO_22 = 22,
|
|
ACT_DO_SWIM = 23,
|
|
ACT_DO_LEAP = 24,
|
|
ACT_DO_DASH = 25,
|
|
ACT_DO_GET_OUT = 26,
|
|
ACT_DO_27 = 27,
|
|
ACT_DO_PICK_UP = 28,
|
|
ACT_DO_SIT = 29,
|
|
ACT_DO_STAND = 30,
|
|
ACT_DO_DIG = 31,
|
|
ACT_DO_32 = 32,
|
|
ACT_DO_33 = 33,
|
|
ACT_DO_BREAK_FREE = 34,
|
|
ACT_DO_35 = 35,
|
|
ACT_DO_36 = 36,
|
|
ACT_DO_PLANT = 37,
|
|
ACT_DO_CATCH = 38,
|
|
ACT_DO_SPEED_UP = 39,
|
|
ACT_DO_SAILCLOTH = 40,
|
|
ACT_DO_PUT_AWAY = 41,
|
|
ACT_DO_EMERGE = 42,
|
|
ACT_DO_INSERT = 43,
|
|
ACT_DO_44 = 44,
|
|
ACT_DO_TURN = 45,
|
|
ACT_DO_PUSH_IN = 46,
|
|
ACT_DO_47 = 47,
|
|
ACT_DO_DRAW_BOW = 48,
|
|
ACT_DO_49 = 49,
|
|
ACT_DO_50 = 50,
|
|
ACT_DO_51 = 51,
|
|
ACT_DO_SWING = 52,
|
|
ACT_DO_BALANCE = 53,
|
|
ACT_DO_JOSTLE = 54,
|
|
ACT_DO_55 = 55,
|
|
ACT_DO_SLEEP = 56,
|
|
ACT_DO_DROP = 57,
|
|
ACT_DO_LAUNCH = 58,
|
|
ACT_DO_READ = 59,
|
|
ACT_DO_WHIP = 60,
|
|
ACT_DO_PULL = 61,
|
|
ACT_DO_DRINK = 62,
|
|
ACT_DO_63 = 63,
|
|
ACT_DO_GET_IN = 64,
|
|
ACT_DO_FIRE = 65,
|
|
ACT_DO_ATTACK = 66,
|
|
ACT_DO_FATAL_BLOW = 67,
|
|
ACT_DO_JUMP_DOWN = 68,
|
|
ACT_DO_STRUM = 69,
|
|
ACT_DO_70 = 70,
|
|
ACT_DO_RELEASE = 71,
|
|
ACT_DO_GRAB_2 = 72,
|
|
ACT_DO_READY_STANCE = 73,
|
|
ACT_DO_REMOVE = 74,
|
|
ACT_DO_READY_SWORD = 75,
|
|
ACT_DO_THRUST_SWORD = 76,
|
|
ACT_DO_USE = 77,
|
|
ACT_DO_SCOOP = 78,
|
|
ACT_DO_79 = 79,
|
|
ACT_DO_80 = 80,
|
|
ACT_DO_LOOK = 81,
|
|
ACT_DO_DOWSE = 82,
|
|
ACT_DO_PILOT = 83,
|
|
ACT_DO_LOOK_DOWN = 84,
|
|
ACT_DO_DIVE = 85,
|
|
ACT_DO_SELECT = 86,
|
|
ACT_DO_GRAB_3 = 87,
|
|
ACT_DO_MOVE_2 = 88,
|
|
ACT_DO_ACCELERATE = 89,
|
|
ACT_DO_CHARGE = 90,
|
|
ACT_DO_LEAN = 91,
|
|
ACT_DO_PRESS = 92,
|
|
|
|
// why two of them?
|
|
ACT_DO_NONE = 93,
|
|
ACT_DO_INVALID = 94,
|
|
};
|
|
|
|
dLytDobutton_c() : mStateMgr(*this, sStateID::null) {
|
|
sInstance = this;
|
|
}
|
|
virtual ~dLytDobutton_c() {
|
|
sInstance = nullptr;
|
|
}
|
|
|
|
bool build(m2d::ResAccIf_c *resAcc);
|
|
bool remove();
|
|
bool execute();
|
|
bool draw();
|
|
|
|
static dLytDobutton_c *GetInstance() {
|
|
return sInstance;
|
|
}
|
|
|
|
static Act_Do_e getField0x47C() {
|
|
if (sInstance != nullptr) {
|
|
return sInstance->field_0x47C;
|
|
} else {
|
|
return ACT_DO_INVALID;
|
|
}
|
|
}
|
|
|
|
static s32 getField0x480() {
|
|
if (sInstance != nullptr) {
|
|
return sInstance->field_0x480;
|
|
} else {
|
|
return ICON_NONE;
|
|
}
|
|
}
|
|
|
|
static Act_Do_e getNextActionToShow() {
|
|
if (sInstance != nullptr) {
|
|
return sInstance->mNextDoActionToShow;
|
|
} else {
|
|
// @bug (?) should this be ACT_DO_INVALID?
|
|
return (Act_Do_e)ICON_NONE;
|
|
}
|
|
}
|
|
|
|
static s32 getFn0x8010E5E0() {
|
|
if (sInstance != nullptr) {
|
|
return sInstance->fn_8010E5E0();
|
|
} else {
|
|
return ICON_NONE;
|
|
}
|
|
}
|
|
|
|
static Act_Do_e getAction() {
|
|
if (sInstance != nullptr) {
|
|
return sInstance->getActionInternal();
|
|
} else {
|
|
return ACT_DO_INVALID;
|
|
}
|
|
}
|
|
|
|
static void setActionTextStuff(s32 p1, Act_Do_e p2, bool p3) {
|
|
if (sInstance != nullptr) {
|
|
sInstance->setActionTextStuffInternal(p1, p2, p3);
|
|
}
|
|
}
|
|
|
|
private:
|
|
void setActionTextStuffInternal(s32, Act_Do_e, bool);
|
|
Act_Do_e getActionInternal() const;
|
|
s32 fn_8010E5E0() const;
|
|
void fn_8010E3D0(bool);
|
|
void realize();
|
|
|
|
void set_0x47C_0x480(Act_Do_e v1, s32 v2) {
|
|
field_0x47C = v1;
|
|
field_0x480 = v2;
|
|
}
|
|
|
|
static dLytDobutton_c *sInstance;
|
|
|
|
STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleWait);
|
|
STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleTimeCnt);
|
|
STATE_FUNC_DECLARE(dLytDobutton_c, In);
|
|
STATE_FUNC_DECLARE(dLytDobutton_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytDobutton_c, Out);
|
|
|
|
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytDobutton_c);
|
|
|
|
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytDobutton_c);
|
|
/* 0x040 */ d2d::dLytSub mLyt;
|
|
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[12];
|
|
/* 0x3D4 */ nw4r::lyt::Pane *mpPanes[37];
|
|
/* 0x468 */ dTextBox_c *mpTextBoxes[2];
|
|
/* 0x470 */ Act_Do_e mDoActionToShow;
|
|
/* 0x474 */ s32 field_0x474;
|
|
/* 0x478 */ s32 field_0x478;
|
|
/* 0x47C */ Act_Do_e field_0x47C;
|
|
/* 0x480 */ s32 field_0x480;
|
|
/* 0x484 */ Act_Do_e mNextDoActionToShow;
|
|
/* 0x488 */ s32 field_0x488;
|
|
/* 0x48C */ s32 field_0x48C;
|
|
/* 0x490 */ u8 field_0x490;
|
|
/* 0x491 */ u8 field_0x491;
|
|
/* 0x492 */ bool mSavedIsInEvent;
|
|
};
|
|
|
|
#endif
|