Files
2025-11-23 16:00:59 +01:00

278 lines
6.6 KiB
C++

#ifndef D_LYT_PAUSE_H
#define D_LYT_PAUSE_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_base.h"
#include "egg/gfx/eggCpuTexture.h"
#include "egg/gfx/eggTextureBuffer.h"
#include "nw4r/lyt/lyt_bounding.h"
#include "s/s_State.hpp"
class dLytPauseBack_c;
class dLytPauseInfo_c;
class dLytPauseText_c;
class dLytCommonArrow_c;
class dLytPauseDisp00_c;
class dLytPauseDisp01_c;
class dLytPauseMain_c {
public:
dLytPauseMain_c();
virtual ~dLytPauseMain_c() {}
bool build();
bool remove();
bool execute();
bool draw();
void drawDirectly();
void loadBgTextureUnused();
void loadBgTexture();
void requestIn();
void requestOut();
void requestChange();
void requestSelect();
void requestRingToggle();
bool hasSelection() const;
void updateTitle();
bool isChangingState() const {
return mIsChangingState;
}
dLytCommonArrow_c *getArrow() const {
return mpArrow;
}
private:
STATE_FUNC_DECLARE(dLytPauseMain_c, None);
STATE_FUNC_DECLARE(dLytPauseMain_c, In);
STATE_FUNC_DECLARE(dLytPauseMain_c, Wait);
STATE_FUNC_DECLARE(dLytPauseMain_c, Change);
STATE_FUNC_DECLARE(dLytPauseMain_c, Select);
STATE_FUNC_DECLARE(dLytPauseMain_c, Ring);
STATE_FUNC_DECLARE(dLytPauseMain_c, GetDemo);
STATE_FUNC_DECLARE(dLytPauseMain_c, Out);
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytPauseMain_c);
/* 0x40 */ dLytPauseBack_c *mpPauseBack;
/* 0x44 */ dLytPauseDisp00_c *mpDisp00;
/* 0x48 */ dLytPauseDisp01_c *mpDisp01;
/* 0x4C */ dLytPauseInfo_c *mpPauseInfo;
/* 0x50 */ dLytPauseText_c *mpPauseText;
/* 0x54 */ dLytCommonArrow_c *mpArrow;
/* 0x58 */ s32 mTimer;
/* 0x5C */ s32 mStep;
/* 0x60 */ u8 mPartStateChangeFlags;
/* 0x61 */ bool mInRequest;
/* 0x62 */ bool mOutRequest;
/* 0x63 */ bool mIsChangingState;
/* 0x64 */ bool mChangeRequest;
/* 0x65 */ bool mSelectRequest;
/* 0x66 */ bool mRingToggleRequest;
};
class dLytPauseMgr_c : public dLytBase_c {
public:
dLytPauseMgr_c();
~dLytPauseMgr_c();
enum Disp_e {
DISP_00_INVENTORY = 0,
DISP_01_COLLECTION = 1,
DISP_MAX,
};
enum Tab_e {
TAB_ITEM = 0,
TAB_POUCH = 1,
TAB_DOWSING = 2,
TAB_MAX = 3,
};
/* 0x08 */ virtual int create() override;
/* 0x14 */ virtual int doDelete() override;
/* 0x20 */ virtual int execute() override;
/* 0x2C */ virtual int draw() override;
/* 0x4C */ virtual bool build() override;
static dLytPauseMgr_c *GetInstance() {
return sInstance;
}
d2d::ResAccIf_c *getResAcc1() {
return &mResAcc1;
}
d2d::ResAccIf_c *getResAcc2() {
return &mResAcc2;
}
EGG::CpuTexture *getBgTexture() {
return mpBgTexture;
}
bool isNavLeft() const {
return mIsNavLeft;
}
bool getField_0x0832() const {
return field_0x0832;
}
void setField_0x0837(bool b) {
field_0x0837 = b;
}
bool getField_0x0838() const {
return field_0x0838;
}
bool getField_0x083B() const {
return field_0x083B;
}
bool getField_0x083C() const {
return field_0x083C;
}
void setField_0x083C(bool b) {
field_0x083C = b;
}
bool getField_0x083D() const {
return field_0x083D;
}
void setField_0x083D(bool b) {
field_0x083D = b;
}
bool getField_0x083E() const {
return field_0x083E;
}
void setField_0x083E(bool b) {
field_0x083E = b;
}
bool getField_0x0840() const {
return field_0x0840;
}
bool isStateWait() const;
s32 getCurrentDisp00Tab() const {
return mCurrentDisp00Tab;
}
enum SelectionType_e {
SELECT_BWHEEL = 0,
SELECT_POUCH = 1,
SELECT_DOWSING = 2,
SELECT_INSECT = 4,
SELECT_QUEST_MATERIAL = 5,
SELECT_ITEM = 6,
SELECT_CATEGORY = 7,
SELECT_FIRE = 8,
SELECT_RING = 9,
SELECT_NONE = 10,
};
void setSelection(SelectionType_e type, u16 id, bool restricted);
bool isCurrentSelectionRestricted() const {
return mCurrentSelectionIsRestricted;
}
SelectionType_e getCurrentSelectionType() const {
return mCurrentSelectionType;
}
s32 getCurrentSelectionId() const {
return mCurrentSelectionId;
}
u8 getCurrentSelectionTab() const {
return mCurrentSelectionTab;
}
void setCurrentSelectionTab(u8 tab) {
mCurrentSelectionTab = tab;
}
nw4r::lyt::Bounding *getArrowBounding(int idx) const;
void setSelectedArrowBounding(int idx);
static void setSelectHand(f32 rotation, f32 length);
void preDrawStage();
void postDrawStage();
void inRequest();
bool isActive() const {
return mIsActive;
}
static f32 sDisp00ArrowRotation;
static f32 sDisp00ArrowLength;
private:
bool checkSelectRing();
bool checkChangeDisp();
bool checkRing();
void changeSavedDisp();
void saveTabFlag();
STATE_FUNC_DECLARE(dLytPauseMgr_c, None);
STATE_FUNC_DECLARE(dLytPauseMgr_c, In);
STATE_FUNC_DECLARE(dLytPauseMgr_c, Wait);
STATE_FUNC_DECLARE(dLytPauseMgr_c, Change);
STATE_FUNC_DECLARE(dLytPauseMgr_c, Select);
STATE_FUNC_DECLARE(dLytPauseMgr_c, Ring);
STATE_FUNC_DECLARE(dLytPauseMgr_c, GetDemo);
STATE_FUNC_DECLARE(dLytPauseMgr_c, Out);
static dLytPauseMgr_c *sInstance;
/* 0x008C */ UI_STATE_MGR_DECLARE(dLytPauseMgr_c);
/* 0x00C8 */ d2d::ResAccIf_c mResAcc1;
/* 0x0438 */ d2d::ResAccIf_c mResAcc2;
/* 0x07A8 */ dLytPauseMain_c mMain;
/* 0x0810 */ EGG::TextureBuffer *mpTexture0x0810;
/* 0x0814 */ EGG::TextureBuffer *mpBgTexture;
/* 0x0818 */ SelectionType_e mCurrentSelectionType;
/* 0x081C */ SelectionType_e mPrevSelectionType;
/* 0x0820 */ s32 mCurrentDisp00Tab;
/* 0x0824 */ s32 mCurrentDisp00HeldRing;
/* 0x0828 */ s32 mSavedPauseDisp;
/* 0x082C */ u16 mCurrentSelectionId;
/* 0x082E */ u16 mPrevSelectionId;
/* 0x0830 */ bool mInRequest;
/* 0x0831 */ bool mIsNavLeft;
/* 0x0832 */ bool field_0x0832;
/* 0x0833 */ u8 mCurrentSelectionTab;
/* 0x0834 */ u8 mTimer;
/* 0x0835 */ u8 field_0x0835;
/* 0x0836 */ bool mIsActive;
/* 0x0837 */ bool field_0x0837;
/* 0x0838 */ bool field_0x0838;
/* 0x0839 */ bool field_0x0839;
/* 0x083A */ bool field_0x083A;
/* 0x083B */ bool field_0x083B;
/* 0x083C */ bool field_0x083C;
/* 0x083D */ bool field_0x083D;
/* 0x083E */ bool field_0x083E;
/* 0x083F */ bool field_0x083F;
/* 0x0840 */ bool field_0x0840;
/* 0x0841 */ bool mCurrentSelectionIsRestricted;
};
#endif