mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 07:10:53 -04:00
428 lines
13 KiB
C++
428 lines
13 KiB
C++
#ifndef D_LYT_MAP_H
|
|
#define D_LYT_MAP_H
|
|
|
|
#include "common.h"
|
|
#include "d/d_cursor_hit_check.h"
|
|
#include "d/lyt/d2d.h"
|
|
#include "d/lyt/d_lyt_map_capture.h"
|
|
#include "egg/core/eggColorFader.h"
|
|
#include "m/m2d.h"
|
|
#include "m/m_vec.h"
|
|
#include "nw4r/lyt/lyt_bounding.h"
|
|
#include "s/s_State.hpp"
|
|
|
|
struct LytMap0x80520B5C {
|
|
LytMap0x80520B5C() : field_0x04(false), field_0x05(false) {}
|
|
virtual ~LytMap0x80520B5C() {}
|
|
|
|
bool field_0x04;
|
|
bool field_0x05;
|
|
};
|
|
|
|
struct LytMapFourAnimGroups {
|
|
/* 0x00 */ d2d::AnmGroup_c mGroup1;
|
|
/* 0x40 */ d2d::AnmGroup_c mGroup2;
|
|
/* 0x80 */ d2d::AnmGroup_c mGroup3;
|
|
/* 0xC0 */ d2d::AnmGroup_c mGroup4;
|
|
};
|
|
|
|
// Size 0x1E0
|
|
class dLytMapPinIcon_c {
|
|
public:
|
|
friend class dLytMapPinIconAggregate_c;
|
|
|
|
dLytMapPinIcon_c()
|
|
: mStateMgr(*this, sStateID::null),
|
|
mpBounding(nullptr),
|
|
field_0x1BC(0),
|
|
field_0x1C0(0.0f, 0.0f, 0.0f),
|
|
field_0x1CC(0),
|
|
field_0x1D0(nullptr),
|
|
field_0x1D4(0),
|
|
mIndex(0),
|
|
field_0x1DC(0) {}
|
|
virtual ~dLytMapPinIcon_c();
|
|
|
|
bool build(d2d::ResAccIf_c *resAcc);
|
|
bool remove();
|
|
bool draw();
|
|
bool execute();
|
|
|
|
void fn_8012EC30();
|
|
|
|
bool isSelect() const {
|
|
return *mStateMgr.getStateID() == dLytMapPinIcon_c::StateID_ToSelect ||
|
|
*mStateMgr.getStateID() == dLytMapPinIcon_c::StateID_Select;
|
|
}
|
|
|
|
bool isRemove() const {
|
|
return *mStateMgr.getStateID() == dLytMapPinIcon_c::StateID_Remove;
|
|
}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapPinIcon_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapPinIcon_c, ToSelect);
|
|
STATE_FUNC_DECLARE(dLytMapPinIcon_c, Select);
|
|
STATE_FUNC_DECLARE(dLytMapPinIcon_c, ToUnselect);
|
|
STATE_FUNC_DECLARE(dLytMapPinIcon_c, Remove);
|
|
|
|
private:
|
|
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMapPinIcon_c);
|
|
/* 0x040 */ d2d::LytBase_c mLyt;
|
|
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[3];
|
|
/* 0x190 */ dCursorHitCheckLyt_c mCsHitCheck;
|
|
/* 0x1B8 */ nw4r::lyt::Bounding *mpBounding;
|
|
/* 0x1BC */ UNKWORD field_0x1BC;
|
|
/* 0x1C0 */ mVec3_c field_0x1C0;
|
|
/* 0x1CC */ u8 field_0x1CC;
|
|
/* 0x1D0 */ LytMap0x80520B5C *field_0x1D0;
|
|
/* 0x1D4 */ UNKWORD field_0x1D4;
|
|
/* 0x1D8 */ s32 mIndex;
|
|
/* 0x1DC */ UNKWORD field_0x1DC;
|
|
};
|
|
|
|
class dLytMapPinIconAggregate_c {
|
|
public:
|
|
dLytMapPinIconAggregate_c() : mStateMgr(*this, sStateID::null) {
|
|
field_0x9A0 = nullptr;
|
|
field_0x9A4 = 0;
|
|
field_0x9A8 = 0;
|
|
for (int i = 0; i < 5; i++) {
|
|
mPins[i].mIndex = i;
|
|
}
|
|
}
|
|
virtual ~dLytMapPinIconAggregate_c() {}
|
|
|
|
bool remove();
|
|
|
|
STATE_FUNC_DECLARE(dLytMapPinIconAggregate_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapPinIconAggregate_c, Select);
|
|
STATE_FUNC_DECLARE(dLytMapPinIconAggregate_c, Remove);
|
|
|
|
private:
|
|
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMapPinIconAggregate_c);
|
|
/* 0x040 */ dLytMapPinIcon_c mPins[5];
|
|
|
|
/* 0x9A0 */ LytMap0x80520B5C *field_0x9A0;
|
|
/* 0x9A4 */ UNKWORD field_0x9A4;
|
|
/* 0x9A8 */ UNKWORD field_0x9A8;
|
|
};
|
|
|
|
// Size 0x50
|
|
class dLytMapFloorBtn_c {
|
|
public:
|
|
dLytMapFloorBtn_c()
|
|
: mStateMgr(*this, sStateID::null),
|
|
field_0x3C(0),
|
|
field_0x40(0),
|
|
field_0x44(0),
|
|
field_0x48(0),
|
|
field_0x4C(0),
|
|
field_0x4D(0) {}
|
|
~dLytMapFloorBtn_c() {}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, ToSelect);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, Select);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, ToWait);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, ToDecide);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, Decide);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, ToSelectInDecide);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, SelectInDecide);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtn_c, DecideToSelectInDecide);
|
|
|
|
private:
|
|
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMapFloorBtn_c);
|
|
/* 0x3C */ UNKWORD field_0x3C;
|
|
/* 0x40 */ UNKWORD field_0x40;
|
|
/* 0x44 */ UNKWORD field_0x44;
|
|
/* 0x48 */ UNKWORD field_0x48;
|
|
/* 0x4C */ u8 field_0x4C;
|
|
/* 0x4D */ u8 field_0x4D;
|
|
};
|
|
|
|
class dLytMapFloorBtnMgr_c : public d2d::dSubPane {
|
|
public:
|
|
dLytMapFloorBtnMgr_c(void *arg) : field_0x008(arg), field_0x51C(nullptr), mStateMgr(*this, sStateID::null) {
|
|
field_0x700 = 1;
|
|
field_0x704 = 0;
|
|
field_0x708 = 0;
|
|
field_0x70C = 4;
|
|
field_0x710 = 0;
|
|
field_0x711 = 0;
|
|
field_0x712 = 0;
|
|
}
|
|
virtual ~dLytMapFloorBtnMgr_c();
|
|
|
|
virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
|
virtual bool remove() override;
|
|
virtual bool execute() 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();
|
|
}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtnMgr_c, Invisible);
|
|
STATE_FUNC_DECLARE(dLytMapFloorBtnMgr_c, Wait);
|
|
|
|
private:
|
|
/* 0x008 */ void *field_0x008;
|
|
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMapFloorBtnMgr_c);
|
|
/* 0x048 */ d2d::dLytSub mLyt;
|
|
/* 0x0DC */ d2d::AnmGroup_c mAnmGroups[1];
|
|
/* 0x11C */ LytMapFourAnimGroups mMoreGroups[4];
|
|
/* 0x51C */ void *field_0x51C;
|
|
/* 0x520 */ dCursorHitCheckLyt_c mCsHitChecks[4];
|
|
/* 0x5C0 */ dLytMapFloorBtn_c mFloorBtns[4];
|
|
/* 0x700 */ UNKWORD field_0x700;
|
|
/* 0x704 */ UNKWORD field_0x704;
|
|
/* 0x708 */ UNKWORD field_0x708;
|
|
/* 0x70C */ UNKWORD field_0x70C;
|
|
/* 0x710 */ u8 field_0x710;
|
|
/* 0x711 */ u8 field_0x711;
|
|
/* 0x712 */ u8 field_0x712;
|
|
};
|
|
|
|
// Size 0x4C
|
|
class dLytMapPopupInfo_c {
|
|
public:
|
|
dLytMapPopupInfo_c() : mStateMgr(*this, sStateID::null) {}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapPopupInfo_c, Invisible);
|
|
STATE_FUNC_DECLARE(dLytMapPopupInfo_c, In);
|
|
STATE_FUNC_DECLARE(dLytMapPopupInfo_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapPopupInfo_c, WaitInvalid);
|
|
STATE_FUNC_DECLARE(dLytMapPopupInfo_c, Out);
|
|
|
|
private:
|
|
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMapPopupInfo_c);
|
|
/* 0x03C */ d2d::LytBase_c mLyt;
|
|
/* 0x0CC */ d2d::AnmGroup_c mAnmGroups[3];
|
|
};
|
|
|
|
// Size 0x4C
|
|
class dLytMapSavePopupAction_c {
|
|
public:
|
|
dLytMapSavePopupAction_c() : mStateMgr(*this, sStateID::null), field_0x44(0.0f), field_0x48(0) {}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapSavePopupAction_c, Invisible);
|
|
STATE_FUNC_DECLARE(dLytMapSavePopupAction_c, In);
|
|
STATE_FUNC_DECLARE(dLytMapSavePopupAction_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapSavePopupAction_c, Out);
|
|
|
|
private:
|
|
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMapSavePopupAction_c);
|
|
/* 0x44 */ f32 field_0x44;
|
|
/* 0x48 */ u8 field_0x48;
|
|
};
|
|
|
|
// Assumed name
|
|
class dLytMapSavePopup_c {
|
|
public:
|
|
dLytMapSavePopup_c() {}
|
|
|
|
private:
|
|
/* 0x000 */ d2d::LytBase_c mLyt;
|
|
/* 0x090 */ d2d::AnmGroup_c mAnmGroups[2];
|
|
/* 0x110 */ dLytMapSavePopupAction_c mActions[12];
|
|
};
|
|
|
|
class dLytMapSaveCaption_c {
|
|
public:
|
|
dLytMapSaveCaption_c() : mStateMgr(*this, sStateID::null) {}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapSaveCaption_c, Invisible);
|
|
STATE_FUNC_DECLARE(dLytMapSaveCaption_c, In);
|
|
STATE_FUNC_DECLARE(dLytMapSaveCaption_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapSaveCaption_c, Out);
|
|
|
|
private:
|
|
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMapSaveCaption_c);
|
|
/* 0x03C */ d2d::LytBase_c mLyt;
|
|
/* 0x0CC */ d2d::AnmGroup_c mAnmGroups[5];
|
|
};
|
|
|
|
// Size 0x190
|
|
class dLytMapSaveObj_c {
|
|
public:
|
|
dLytMapSaveObj_c() : mStateMgr(*this, sStateID::null), field_0x18C(0), field_0x18D(0), field_0x18E(0) {}
|
|
|
|
STATE_FUNC_DECLARE(dLytMapSaveObj_c, Wait);
|
|
STATE_FUNC_DECLARE(dLytMapSaveObj_c, ToSelect);
|
|
STATE_FUNC_DECLARE(dLytMapSaveObj_c, Select);
|
|
STATE_FUNC_DECLARE(dLytMapSaveObj_c, ToWait);
|
|
STATE_FUNC_DECLARE(dLytMapSaveObj_c, Decide);
|
|
|
|
private:
|
|
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMapSaveObj_c);
|
|
/* 0x03C */ d2d::LytBase_c mLyt;
|
|
/* 0x0CC */ d2d::AnmGroup_c mAnmGroups[3];
|
|
/* 0x18C */ u8 field_0x18C;
|
|
/* 0x18D */ u8 field_0x18D;
|
|
/* 0x18E */ u8 field_0x18E;
|
|
};
|
|
|
|
class dLytMapMain_c : public m2d::Base_c {
|
|
friend class dLytMap_c;
|
|
public:
|
|
dLytMapMain_c();
|
|
virtual ~dLytMapMain_c();
|
|
virtual void draw() override;
|
|
virtual void dLytMapMain_vt0x10();
|
|
|
|
void build();
|
|
|
|
bool isOpenMaybe() const;
|
|
bool fn_80139EA0() const;
|
|
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, Invisible);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, RenderingWait);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, In);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, Active);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, Out);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, FloorChange);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ChgMapUpDirection);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ChgDispAreaMode_Map);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ChgDispAreaMode_MapRot);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ChgDispAreaMode_WA);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ChgDispAreaMode_CsrRot);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ResetPos);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, ResetPosWithFloorChange);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSwBankSmall_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSwBankSmall_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSwBankSmall_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventMapIntro_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventMapIntro_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventMapIntro_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventMapIntro_Step4);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventDungeonMapGet_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventDungeonMapGet_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventDungeonMapGet_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventFieldMapChange_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventFieldMapChange_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventFieldMapChange_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventFieldMapChange_Step4);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventForestMapChange_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventForestMapChange_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventForestMapChange_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSignalAdd_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSignalAdd_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSignalAdd_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventGoddessCube_Step1);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventGoddessCube_Step2);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventGoddessCube_Step3);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSaveObjMsgWindow);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSaveObjSelect);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSaveObjConfirmMsgWindow);
|
|
STATE_FUNC_DECLARE(dLytMapMain_c, EventSaveObjDecide);
|
|
|
|
private:
|
|
/* 0x0010 */ UI_STATE_MGR_DECLARE(dLytMapMain_c);
|
|
/* 0x004C */ u8 field_0x004C[0x00A4 - 0x004C];
|
|
/* 0x00A4 */ u8 field_0x00A4[0x010C - 0x00A4];
|
|
/* 0x010C */ d2d::LytBase_c mLyt;
|
|
/* 0x019C */ d2d::AnmGroup_c mAnmGroups[54];
|
|
/* 0x0F1C */ LytMap0x80520B5C field_0xF1C;
|
|
/* 0x0F24 */ dLytMapCapture_c mMapCapture;
|
|
/* 0x0FA0 */ dLytMapFloorBtnMgr_c mFloorBtnMgr;
|
|
/* 0x16B4 */ dLytMapPinIconAggregate_c mPinIconAggregate;
|
|
|
|
/* 0x6704 */ dLytMapSaveObj_c mSaveObjs[12];
|
|
/* 0x79C4 */ dLytMapSaveCaption_c mSaveCaption;
|
|
/* 0x0000 */ dLytMapSavePopup_c mSavePopup;
|
|
/* 0x807C */ dLytMapPopupInfo_c mPopupInfo;
|
|
/* 0x828C */ mVec3_c field_0x828C[12];
|
|
/* 0x832C */ dCursorHitCheckLyt_c field_0x832C[33];
|
|
/* 0x8904 */ mVec3_c field_0x8904;
|
|
/* 0x8910 */ mVec3_c field_0x8910;
|
|
/* 0x891C */ mVec3_c field_0x891C;
|
|
|
|
/* 0x8928 */ u8 _0x8928[0x8930 - 0x8928];
|
|
|
|
/* 0x8930 */ mVec3_c field_0x8930;
|
|
/* 0x893C */ mVec3_c field_0x893C;
|
|
|
|
/* 0x8948 */ u8 idkfixmelater[0x4BC0];
|
|
/* 0x8C94 */ s32 field_0x8C94;
|
|
|
|
// ...
|
|
|
|
/* 0x8CC4 */ mVec3_c field_0x8CC4;
|
|
/* 0x8CD0 */ mVec3_c field_0x8CD0;
|
|
/* 0x8CDC */ mVec3_c field_0x8CDC;
|
|
/* 0x8CE8 */ mVec3_c field_0x8CE8;
|
|
/* 0x8CF4 */ mVec3_c field_0x8CF4;
|
|
/* 0x8D00 */ mVec3_c field_0x8D00;
|
|
/* 0x8D0C */ mVec3_c field_0x8D0C;
|
|
/* 0x8D18 */ mVec3_c field_0x8D18;
|
|
/* 0x8D24 */ mVec3_c field_0x8D24;
|
|
|
|
/* 0x8DC8 */ UNKWORD field_0x8DC8;
|
|
};
|
|
|
|
// Made up name
|
|
class dLytMapFader_c : public m2d::Base_c {
|
|
public:
|
|
dLytMapFader_c();
|
|
virtual ~dLytMapFader_c();
|
|
/* vt 0x0C */ virtual void draw() override;
|
|
|
|
void calc();
|
|
|
|
private:
|
|
/* 0x10 */ EGG::ColorFader mFader;
|
|
};
|
|
|
|
// Size 0x91FC, inline ctor at 802ccd88
|
|
class dLytMap_c {
|
|
public:
|
|
dLytMap_c() {
|
|
sInstance = this;
|
|
}
|
|
virtual ~dLytMap_c() {
|
|
sInstance = nullptr;
|
|
}
|
|
|
|
static d2d::ResAccIf_c *getResAcc() {
|
|
return &sInstance->mResAcc;
|
|
}
|
|
|
|
static dLytMap_c *getInstance() {
|
|
return sInstance;
|
|
}
|
|
|
|
bool isOpenMaybe() const {
|
|
return mMapMain.isOpenMaybe();
|
|
}
|
|
|
|
bool getFn_80139EA0() const {
|
|
return mMapMain.fn_80139EA0();
|
|
}
|
|
|
|
void build();
|
|
|
|
static bool isValid(s32 val) {
|
|
if (val >= 2 && val < 7) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool unkMeterCheck() const {
|
|
s32 val = mMapMain.field_0x8C94;
|
|
return isValid(val) && ((1 << (val - 2)) & 0x1D);
|
|
}
|
|
|
|
private:
|
|
/* 0x0004 */ d2d::ResAccIf_c mResAcc;
|
|
/* 0x0374 */ dLytMapMain_c mMapMain;
|
|
|
|
static dLytMap_c *sInstance;
|
|
};
|
|
|
|
#endif
|