Files
ss/include/d/lyt/d_lyt_deposit.h
T
2026-01-24 11:10:35 +01:00

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