mirror of
https://github.com/zeldaret/ss
synced 2026-08-10 11:13:58 -04:00
238 lines
7.2 KiB
C++
238 lines
7.2 KiB
C++
#ifndef D_LYT_DEPOSIT_H
|
|
#define D_LYT_DEPOSIT_H
|
|
|
|
#include "d/d_cursor_hit_check.h"
|
|
#include "d/d_pad_nav.h"
|
|
#include "d/lyt/d2d.h"
|
|
#include "d/lyt/d_lyt_base.h"
|
|
#include "d/lyt/d_lyt_common_arrow.h"
|
|
#include "d/lyt/d_lyt_common_icon_item.h"
|
|
#include "d/lyt/d_lyt_deposit_box_cursor.h"
|
|
#include "d/lyt/d_lyt_deposit_stock.h"
|
|
#include "d/lyt/d_textbox.h"
|
|
#include "d/lyt/d_window.h"
|
|
#include "m/m_vec.h"
|
|
#include "nw4r/lyt/lyt_bounding.h"
|
|
#include "nw4r/lyt/lyt_pane.h"
|
|
#include "s/s_State.hpp"
|
|
|
|
class dLytDepositMain_c {
|
|
public:
|
|
dLytDepositMain_c();
|
|
virtual ~dLytDepositMain_c() {
|
|
dPadNav::setNavEnabled(false, false);
|
|
}
|
|
|
|
bool build(d2d::ResAccIf_c *resAcc);
|
|
bool execute();
|
|
bool draw();
|
|
bool remove();
|
|
|
|
void setModeNone();
|
|
void setModeIn();
|
|
void setModeCheck();
|
|
void setModeChange(bool unk);
|
|
void setModeArrangement();
|
|
void setModeReverseChange();
|
|
void setModeScroll(bool leftRight, bool viaButton);
|
|
void setModeRecycle();
|
|
void setModeArrangementOut();
|
|
void setModeOut();
|
|
|
|
bool isSellableItem() const {
|
|
return mIsSellActive && mItemSellValue > 0;
|
|
}
|
|
|
|
s32 getArrowDirection() const {
|
|
return mStock[STOCK_ACTIVE].getArrowDirection();
|
|
}
|
|
|
|
void setField_0x1952C(bool b) {
|
|
mPreventCancellingSelection = b;
|
|
}
|
|
|
|
s32 getStateStep() const {
|
|
return mStateStep;
|
|
}
|
|
|
|
bool isIdle() const {
|
|
return mIsIdle;
|
|
}
|
|
|
|
bool isPointingAtToStockBounding() const {
|
|
return mIsPointingAtToStockBounding;
|
|
}
|
|
|
|
bool isPointingAtToPouchBounding() const {
|
|
return mIsPointingAtToPouchBounding;
|
|
}
|
|
|
|
bool getField_0x19523() const {
|
|
return mIsFinishActive;
|
|
}
|
|
|
|
bool getField_0x19525() const {
|
|
return mIsSortActive;
|
|
}
|
|
|
|
bool getField_0x1952B() const {
|
|
return mDidDropCancelItem;
|
|
}
|
|
|
|
bool isHoldingItem() const {
|
|
return mCurrentlyHoldingItemSlot >= 0;
|
|
}
|
|
|
|
private:
|
|
static const s32 NUM_STOCKS = 3;
|
|
static const s32 STOCK_ACTIVE = 0;
|
|
|
|
static const s32 RING_NUM_ITEMS = 8;
|
|
|
|
static const s32 SLOT_STOCK_OFFSET = 8;
|
|
|
|
static const s32 NUM_ICONS_PER_PAGE = 12;
|
|
static const s32 NUM_PAGES = 5;
|
|
|
|
void buildSubpanes();
|
|
void loadInitialState();
|
|
|
|
void checkPouchItems();
|
|
void checkPointToStock();
|
|
void checkForItemPickupOrDrop();
|
|
void checkSellOrFinish();
|
|
void checkPointToPouch();
|
|
void checkSort();
|
|
void checkArrows();
|
|
s32 checkNav();
|
|
|
|
void loadItemText(s32 itemId, s32 where);
|
|
void loadStockItems(s32 hiddenSlot);
|
|
void loadPouchItem(s32 slot);
|
|
void loadPageText();
|
|
|
|
void setPouchItemsVisible(bool visible);
|
|
|
|
void selectPouchSlot(s32 slot);
|
|
void navigateOffIcon();
|
|
|
|
void updateStockCursor();
|
|
void showCursor();
|
|
void hideCursor();
|
|
void loadCursor();
|
|
|
|
void returnCursorAfterCancellingSell(s32 idx);
|
|
void returnCursorAfterCancellingSort(s32 idx);
|
|
void returnCursorAfterCancellingArrow(s32 idx);
|
|
|
|
s32 getItemSellValueFrame(s32 value);
|
|
s32 calcNumDigits(s32 value);
|
|
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeNone);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeIn);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeCheck);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeChange);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeArrangement);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeReverseChange);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeScroll);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeRecycle);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeArrangementOut);
|
|
STATE_FUNC_DECLARE(dLytDepositMain_c, ModeOut);
|
|
|
|
/* 0x00004 */ UI_STATE_MGR_DECLARE(dLytDepositMain_c);
|
|
/* 0x00040 */ d2d::LytBase_c mLyt;
|
|
/* 0x000D0 */ d2d::AnmGroup_c mAnm[36];
|
|
|
|
/* 0x009D0 */ nw4r::lyt::Bounding *mpBoundingBox;
|
|
/* 0x009D4 */ nw4r::lyt::Bounding *mpBoundingChoices;
|
|
/* 0x009D8 */ nw4r::lyt::Bounding *mpBoundingCleanUp;
|
|
/* 0x009DC */ nw4r::lyt::Bounding *mpBoundingItem12;
|
|
/* 0x009E0 */ nw4r::lyt::Bounding *mpItemBoundings[12];
|
|
/* 0x00A10 */ nw4r::lyt::Bounding *mpRingBoundings[8];
|
|
/* 0x00A30 */ nw4r::lyt::Pane *mpPaneABtn;
|
|
/* 0x00A34 */ nw4r::lyt::Pane *mpPanePrice;
|
|
/* 0x00A38 */ nw4r::lyt::Pane *mpPaneCommonArrow;
|
|
/* 0x00A3C */ dWindow_c *mpWindows[2];
|
|
/* 0x00A44 */ dTextBox_c *mpSizeBoxes[2];
|
|
/* 0x00A4C */ dCursorHitCheckLyt_c mCsHitCheck;
|
|
/* 0x00A74 */ mVec2_c mCsPosition;
|
|
/* 0x00A7C */ dLytDepositStock_c mStock[NUM_STOCKS];
|
|
/* 0x143F0 */ dLytDepositBoxCursor_c mCursor;
|
|
/* 0x14D48 */ dLytCommonIconItem_c mPouchItems[RING_NUM_ITEMS];
|
|
/* 0x18D88 */ dLytCommonArrow_c mArrow;
|
|
/* 0x19458 */ d2d::SubPaneList mStockList;
|
|
/* 0x19464 */ d2d::SubPaneListNode mStockNodes[NUM_STOCKS];
|
|
/* 0x19494 */ d2d::SubPaneList mRingList;
|
|
/* 0x194A0 */ d2d::SubPaneListNode mRingNodes[RING_NUM_ITEMS];
|
|
/* 0x19520 */ bool mIsIdle;
|
|
/* 0x19521 */ bool mIsPointingAtToStockBounding;
|
|
/* 0x19522 */ bool mIsPointingAtToPouchBounding;
|
|
/* 0x19523 */ bool mIsFinishActive;
|
|
/* 0x19524 */ bool mIsSellActive;
|
|
/* 0x19525 */ bool mIsSortActive;
|
|
/* 0x19526 */ bool mIsRecycleActive;
|
|
/* 0x19527 */ bool field_0x19527;
|
|
/* 0x19528 */ bool mIsArrangementDone;
|
|
/* 0x19529 */ bool mHasHandledScrollTempItems;
|
|
/* 0x1952A */ bool mPrevPointerVisible;
|
|
/* 0x1952B */ bool mDidDropCancelItem;
|
|
/* 0x1952C */ bool mPreventCancellingSelection;
|
|
/* 0x19530 */ s32 mCurrentPouchNavTarget;
|
|
/* 0x19534 */ s32 mCurrentlyHoldingItemSlot; // encoded with SLOT_STOCK_OFFSET
|
|
/* 0x19538 */ s32 mStateStep;
|
|
/* 0x1953C */ s32 mCursorLocation;
|
|
/* 0x19540 */ s32 mCurrentlyHoldingStockOrPouchSlot; // always raw slot
|
|
/* 0x19544 */ s32 mItemSellValue;
|
|
/* 0x19548 */ UNKWORD field_0x19548; // always -1
|
|
/* 0x1954C */ s32 mNextLocation;
|
|
/* 0x19550 */ s32 mChangeCooldown;
|
|
/* 0x19554 */ s32 mDroppedStockSlot;
|
|
/* 0x19558 */ u8 mPouchItemIds[RING_NUM_ITEMS];
|
|
};
|
|
|
|
class dLytDeposit_c : public dLytBase_c {
|
|
public:
|
|
dLytDeposit_c() : mStateMgr(*this) {}
|
|
virtual ~dLytDeposit_c() {
|
|
removeLyt();
|
|
}
|
|
|
|
static dLytDeposit_c *GetInstance() {
|
|
return sInstance;
|
|
}
|
|
|
|
virtual bool build() override;
|
|
virtual int create() override;
|
|
virtual int execute() override;
|
|
virtual int draw() override;
|
|
virtual int doDelete() override;
|
|
|
|
private:
|
|
bool checkForNavRight();
|
|
bool checkForNavLeft();
|
|
|
|
static dLytDeposit_c *sInstance;
|
|
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, None);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, In);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, Check);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, Change);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, Arrangement);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, ReverseChange);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, Scroll);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, Recycle);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, ArrangementOut);
|
|
STATE_FUNC_DECLARE(dLytDeposit_c, Out);
|
|
|
|
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytDeposit_c);
|
|
|
|
/* 0x0008C */ UI_STATE_MGR_DECLARE(dLytDeposit_c);
|
|
/* 0x000C8 */ d2d::ResAccIf_c mResAcc;
|
|
/* 0x00438 */ dLytDepositMain_c mMain;
|
|
/* 0x19998 */ bool mInRequest;
|
|
/* 0x19999 */ bool mIsMovingOut;
|
|
/* 0x1999A */ bool mScrollViaArrowButton;
|
|
};
|
|
|
|
#endif
|