d_lyt_meter_cross_btn OK

This commit is contained in:
robojumper
2025-04-12 23:53:55 +02:00
parent d76002aaf5
commit 27c8a5dac5
13 changed files with 738 additions and 89 deletions
+7
View File
@@ -5,6 +5,7 @@
#include "d/a/d_a_base.h"
#include "d/a/d_a_itembase.h"
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
@@ -248,6 +249,12 @@ public:
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
/* 0x370 */ u8 _370[0x3C8 - 0x370];
/* 0x3C8 */ nw4r::g3d::ResFile mSwordRes;
/* 0x3CC */ u8 _0x3CC[0x5B4 - 0x3CC];
/* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr;
f32 getAnmMatClrFrame() const {
return mAnmMatClr.getFrame(0);
}
inline bool checkFlags0x340(u32 mask) const {
return (someFlags_0x340 & mask) != 0;
+7 -1
View File
@@ -36,6 +36,10 @@ public:
return field_0x329;
}
s32 getField_0x32C() const {
return field_0x32C;
}
void setField_0x329(bool v) {
field_0x329 = v;
}
@@ -107,7 +111,9 @@ private:
/* 0x329 */ bool field_0x329;
/* 0x32A */ bool field_0x32A;
/* 0x32B */ u8 _0x32B[0x334 - 0x32B];
/* 0x32B */ u8 field_0x32B;
/* 0x32C */ s32 field_0x32C;
/* 0x330 */ u8 _0x330[0x334 - 0x330];
/* 0x334 */ u32 mMinigameResultPoints;
/* 0x338 */ u32 mMinigameTime;
+8
View File
@@ -36,6 +36,11 @@ public:
DO_BUTTON_REMOCON_BG = 5,
DO_BUTTON_NUN_BG = 6,
DO_BUTTON_CROSS_T = 7,
DO_BUTTON_CROSS_D = 8,
DO_BUTTON_CROSS_L = 9,
DO_BUTTON_CROSS_R = 10,
DO_BUTTON_PLUS = 11,
};
@@ -73,6 +78,9 @@ public:
}
static Action_e convertDoButton(s32);
static void fn_8010EC10(Action_e, bool);
static void fn_8010ED50(Action_e, bool);
private:
+1 -1
View File
@@ -188,7 +188,7 @@ public:
}
}
static bool getItemSelect0x75B2() {
static bool getItemSelect0x75A2() {
if (sInstance != nullptr) {
return sInstance->mMeter.mItemSelect.getField_0x57A2();
} else {
+70 -12
View File
@@ -2,23 +2,53 @@
#define D_LYT_METER_CROSS_BTN_H
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
// Size 0x80
class dLytMeterCrossBtnParts_c {
friend class dLytMeterCrossBtn_c;
public:
dLytMeterCrossBtnParts_c(): mStateMgr(*this, sStateID::null) {}
dLytMeterCrossBtnParts_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterCrossBtnParts_c() {}
void init();
void execute(bool bIsVisible);
bool isActive() const {
return *mStateMgr.getStateID() == StateID_Active;
}
private:
void setMessage(s32 id);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Wait);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, On);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Active);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Off);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterCrossBtnParts_c);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtnParts_c);
/* 0x3C */ u32 padding[17];
/* 0x3C */ d2d::LytBase_c *mpLyt;
/* 0x40 */ d2d::AnmGroup_c *mpAnm[2];
/* 0x48 */ dTextBox_c *mpTextBoxes[2];
/* 0x50 */ dWindow_c *mpWindow;
/* 0x54 */ dTextBox_c *mpSizeBox;
/* 0x58 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x5C */ s32 mIndex;
/* 0x60 */ s32 field_0x60;
/* 0x64 */ s32 field_0x64;
/* 0x68 */ s32 field_0x68;
/* 0x6C */ s32 field_0x6C;
/* 0x70 */ s32 field_0x70;
/* 0x74 */ s32 field_0x74;
/* 0x78 */ s32 mOnDelay;
/* 0x7C */ u8 field_0x7C;
};
class dLytMeterCrossBtn_c : public d2d::dSubPane {
@@ -27,28 +57,56 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterCrossBtn_c() {}
s32 getField_0x620() const {
return field_0x620;
}
void setOwnerPane(nw4r::lyt::Pane *pane);
bool fn_800FA730() const;
private:
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Wait);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUse);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Unuse);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[12];
/* 0x3D8 */ u8 field_0x3D8[0x420 - 0x3D8];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[12];
/* 0x3D8 */ nw4r::lyt::Pane *mpPane;
/* 0x3DC */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x3E0 */ dTextBox_c *mpTextboxes[8];
/* 0x400 */ dWindow_c *mpWindows[4];
/* 0x410 */ dTextBox_c *mpSizeBoxes[4];
/* 0x420 */ dLytMeterCrossBtnParts_c mParts[4];
/* 0x620 */ s32 field_0x620;
/* 0x624 */ u8 padding[0x640 - 0x624];
/* 0x624 */ s32 field_0x624;
/* 0x628 */ u16 field_0x628;
/* 0x62C */ s32 mCallCount0;
/* 0x630 */ s32 mCallCount1;
/* 0x634 */ u8 field_0x634;
/* 0x635 */ u8 field_0x635;
/* 0x636 */ u8 field_0x636;
/* 0x637 */ u8 field_0x637;
/* 0x638 */ u8 field_0x638;
/* 0x639 */ u8 field_0x639;
/* 0x63A */ u8 field_0x63A;
/* 0x63B */ u8 field_0x63B;
/* 0x63C */ u8 field_0x63C;
};
#endif
+1 -1
View File
@@ -147,7 +147,7 @@ private:
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoMove);
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoOut);
STATE_MGR_DECLARE_UTIL_ISSTATE(dLytMeterMinusBtn_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterMinusBtn_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
/* 0x0008 */ dLytMeterMinusBtnMenuIcon_c mIcon[8];
+2 -2
View File
@@ -39,8 +39,8 @@ private:
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterPlusBtn_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
/* 0x198 */ nw4r::lyt::Pane *mpPane[1];
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
+1 -1
View File
@@ -39,7 +39,7 @@
mStateMgr.changeState(value); \
}
#define STATE_MGR_DECLARE_UTIL_ISSTATE(class_name) \
#define STATE_MGR_DEFINE_UTIL_ISSTATE(class_name) \
bool isState(const sFStateID_c<class_name> &value) const { \
return *mStateMgr.getStateID() == value; \
}