mirror of
https://github.com/zeldaret/ss
synced 2026-06-03 18:36:16 -04:00
@@ -1026,7 +1026,7 @@ d/lyt/d_lyt_deposit_stock.cpp:
|
||||
.sdata2 start:0x8057A058 end:0x8057A060
|
||||
.bss start:0x805B1430 end:0x805B1470
|
||||
|
||||
d/lyt/d_lyt_deposit_box.cpp:
|
||||
d/lyt/d_lyt_deposit_box_cursor.cpp:
|
||||
.text start:0x801578B0 end:0x80158288 align:16
|
||||
.rodata start:0x804E8218 end:0x804E8228
|
||||
.data start:0x80524BC8 end:0x80524CD0
|
||||
@@ -1664,7 +1664,7 @@ d/lyt/d_lyt_demo_dowsing.cpp:
|
||||
d/lyt/d_lyt_shop.cpp:
|
||||
.text start:0x802A17D0 end:0x802A7FD8 align:16
|
||||
.ctors start:0x804DB884 end:0x804DB888
|
||||
.rodata start:0x804EF130 end:0x804EF970
|
||||
.rodata start:0x804EF130 end:0x804EF8B0
|
||||
.data start:0x8053BF50 end:0x8053CFC8
|
||||
.sbss start:0x805759B0 end:0x805759B8
|
||||
.bss start:0x805B67C0 end:0x805B6C18
|
||||
@@ -1672,9 +1672,11 @@ d/lyt/d_lyt_shop.cpp:
|
||||
d/lyt/d_lyt_deposit.cpp:
|
||||
.text start:0x802A7FE0 end:0x802B02C8 align:16
|
||||
.ctors start:0x804DB888 end:0x804DB88C
|
||||
.rodata start:0x804EF970 end:0x804EFA90
|
||||
.rodata start:0x804EF8B0 end:0x804EFA90
|
||||
.data start:0x8053CFC8 end:0x8053DFC8
|
||||
.sdata start:0x80573C10 end:0x80573C30
|
||||
.sbss start:0x805759B8 end:0x805759D0
|
||||
.sdata2 start:0x8057C7C0 end:0x8057C7E0
|
||||
.bss start:0x805B6C18 end:0x805B7120
|
||||
|
||||
d/lyt/d_lyt_demo_title.cpp:
|
||||
|
||||
+558
-427
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -567,8 +567,8 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/d_lyt_system_window.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_bird_gauge.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_sky_gauge.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_deposit_stock.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_deposit_box.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_deposit_stock.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_deposit_box_cursor.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_boss_gauge.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_pause_back.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_pause_disp_00.cpp"),
|
||||
@@ -661,7 +661,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/d_lyt_boss_caption.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_demo_dowsing.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_shop.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_deposit.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_deposit.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_demo_title.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_end_roll.cpp"),
|
||||
Object(NonMatching, "toBeSorted/d_a_bullet.cpp"),
|
||||
|
||||
+20
-1
@@ -26,6 +26,9 @@ public:
|
||||
void setVisible(bool val) {
|
||||
mVisible = val;
|
||||
}
|
||||
bool isVisible() const {
|
||||
return mVisible;
|
||||
}
|
||||
void setDrawDirectly(bool val) {
|
||||
mDrawDirectly = val;
|
||||
}
|
||||
@@ -36,7 +39,7 @@ public:
|
||||
mCalibrationPointCenterEnabled = val;
|
||||
}
|
||||
|
||||
dCursorHitCheck_c *getHitCheck() {
|
||||
dCursorHitCheck_c *getHitCheck() const {
|
||||
return mCursorIf.getHit();
|
||||
}
|
||||
|
||||
@@ -52,10 +55,26 @@ public:
|
||||
mCursorStick.setShouldBeOn(visible);
|
||||
}
|
||||
|
||||
void setCursorStickPriority(u8 priority) {
|
||||
mCursorStick.setPriority(priority);
|
||||
}
|
||||
|
||||
void setCursorStickPriority2(u8 priority) {
|
||||
mCursorStick.setPriority2(priority);
|
||||
}
|
||||
|
||||
bool isCursorStickVisible() const {
|
||||
return mCursorStick.getShouldBeOn();
|
||||
}
|
||||
|
||||
void setCursorStickTargetPane(const nw4r::lyt::Pane *target) {
|
||||
mCursorStick.setTargetPane(target);
|
||||
}
|
||||
|
||||
const nw4r::lyt::Pane *getCursorStickAllPane() const {
|
||||
return mCursorStick.getAllPane();
|
||||
}
|
||||
|
||||
private:
|
||||
static dCsBase_c *sInstance;
|
||||
void setCurrentLyt(int lyt);
|
||||
|
||||
@@ -19,6 +19,12 @@ bool isItemShield(s32 item);
|
||||
u8 adventurePouchFindItemSlot(ITEM_ID item);
|
||||
u32 adventurePouchCountItem(ITEM_ID itemId);
|
||||
|
||||
bool swapAdventurePouchItems(s32 slot1, s32 slot2);
|
||||
bool swapStockAndPouchItems(s32 pouchSlot, s32 stockSlot);
|
||||
bool swapStockItems(s32 slot1, s32 slot2);
|
||||
|
||||
void sortStock();
|
||||
|
||||
#define ITEM_CHECK_SLOT_NONE 60
|
||||
|
||||
u16 itemCheckFindItemSlot(ITEM_ID item);
|
||||
|
||||
@@ -1520,7 +1520,7 @@ enum StoryFlags_e {
|
||||
/** [Set when talking to Strich]
|
||||
* Story Flag #300 (0x012C) - JP 805ACD7D 0x40 / US 805A9AFD 0x40
|
||||
*/
|
||||
STORYFLAG_300,
|
||||
STORYFLAG_TALKED_TO_STRICH,
|
||||
|
||||
/** [Kukiel screams]
|
||||
* Story Flag #301 (0x012D) - JP 805ACD7D 0x80 / US 805A9AFD 0x80
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
// vtable order
|
||||
#include "d/d_cursor_hit_check.h"
|
||||
// clang-format on
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/lyt/lyt_bounding.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
@@ -35,34 +36,38 @@ public:
|
||||
bool requestIn();
|
||||
bool requestOut();
|
||||
|
||||
void unk() {
|
||||
field_0x6B8 = mPointedAtArrow;
|
||||
s32 getPointedAtArrow() const {
|
||||
return mPointedAtArrow;
|
||||
}
|
||||
|
||||
s32 getField_0x6B8() const {
|
||||
return field_0x6B8;
|
||||
bool isChangingState() const {
|
||||
return mIsChangingState;
|
||||
}
|
||||
|
||||
nw4r::lyt::Bounding *getArrowBounding(s32 idx) const {
|
||||
return mpBoundings[idx];
|
||||
}
|
||||
|
||||
void setField_0x6B8(s32 v) {
|
||||
field_0x6B8 = v;
|
||||
s32 getActiveArrow() const {
|
||||
return mActiveArrow;
|
||||
}
|
||||
|
||||
void setActiveArrow(s32 v) {
|
||||
mActiveArrow = v;
|
||||
}
|
||||
|
||||
void setBackwards(bool b) {
|
||||
mBackwards = b;
|
||||
}
|
||||
bool fn_80168760();
|
||||
bool triggerArrowPress();
|
||||
void setTranslate(const mVec2_c *);
|
||||
|
||||
private:
|
||||
void setTranslate(const Vec *);
|
||||
void displayElement(s32, f32);
|
||||
void unbindAt(s32);
|
||||
void tickDown(d2d::AnmGroup_c *);
|
||||
void checkPointAtPane();
|
||||
|
||||
|
||||
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytCommonArrow_c);
|
||||
/* 0x40 */ d2d::LytBase_c mLytBase;
|
||||
d2d::ResAccIf_c mResAcc;
|
||||
@@ -71,9 +76,9 @@ private:
|
||||
/* 0x6A8 */ nw4r::lyt::Bounding *mpBoundings[2];
|
||||
/* 0x6B0 */ s32 mType;
|
||||
/* 0x6B4 */ s32 mPointedAtArrow;
|
||||
/* 0x6B8 */ s32 field_0x6B8;
|
||||
/* 0x6BC */ s32 field_0x6BC;
|
||||
/* 0x6C0 */ s32 field_0x6C0;
|
||||
/* 0x6B8 */ s32 mActiveArrow;
|
||||
/* 0x6BC */ s32 mLastActiveArrow;
|
||||
/* 0x6C0 */ s32 mTriggeredArrow;
|
||||
/* 0x6C4 */ s32 mTimer;
|
||||
/* 0x6C8 */ bool mInRequested;
|
||||
/* 0x6C9 */ bool mOutRequested;
|
||||
|
||||
@@ -23,16 +23,27 @@ public:
|
||||
static bool drawDirectly();
|
||||
|
||||
void setPriority(u8 priority);
|
||||
void setPriority2(u8 priority) {
|
||||
mLyt.setPriority(priority);
|
||||
}
|
||||
void setTargetPane(const nw4r::lyt::Pane *pane);
|
||||
|
||||
void setShouldBeOn(bool value) {
|
||||
mShouldBeOn = value;
|
||||
}
|
||||
|
||||
bool getShouldBeOn() const {
|
||||
return mShouldBeOn;
|
||||
}
|
||||
|
||||
static dLytCursorStick_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
const nw4r::lyt::Pane *getAllPane() const {
|
||||
return mpPanes[0];
|
||||
}
|
||||
|
||||
private:
|
||||
bool build_();
|
||||
bool remove_();
|
||||
|
||||
@@ -1,14 +1,240 @@
|
||||
#ifndef D_LYT_DEPOSIT_H
|
||||
#define D_LYT_DEPOSIT_H
|
||||
|
||||
class dLytDeposit_c {
|
||||
#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);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytDepositMain_c);
|
||||
|
||||
/* 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);
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(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
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
#ifndef D_LYT_DEPOSIT_BOX_CURSOR_H
|
||||
#define D_LYT_DEPOSIT_BOX_CURSOR_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
|
||||
// made up name
|
||||
class dLytDepositBoxCursor_c : public d2d::dSubPane {
|
||||
public:
|
||||
enum ItemLocation_e {
|
||||
LOC_POUCH,
|
||||
LOC_STOCK,
|
||||
};
|
||||
|
||||
public:
|
||||
dLytDepositBoxCursor_c() : mSlot(-1), mItem(0), mItemLocation(0) {}
|
||||
/* vt 0x0C */ virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
/* vt 0x10 */ virtual bool remove() override;
|
||||
/* vt 0x14 */ virtual bool execute() override;
|
||||
/* vt 0x18 */ virtual nw4r::lyt::Pane *getPane() override {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
}
|
||||
/* vt 0x1C */ virtual d2d::LytBase_c *getLyt() override {
|
||||
return &mLyt;
|
||||
}
|
||||
/* vt 0x20 */ virtual const char *getName() const override {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
/* vt 0x08 */ virtual ~dLytDepositBoxCursor_c() {}
|
||||
|
||||
bool draw();
|
||||
|
||||
void init(s32 location, s32 slot, s32 item, bool isSell);
|
||||
void updateSlot(s32 location, s32 slot, s32 item, bool isSell);
|
||||
void activateSell();
|
||||
|
||||
bool isVisible() const {
|
||||
return mIsVisible;
|
||||
}
|
||||
|
||||
void setVisible(bool b) {
|
||||
mIsVisible = b;
|
||||
}
|
||||
|
||||
private:
|
||||
static const s32 NUM_ICONS_PER_PAGE = 12;
|
||||
|
||||
void initIcon();
|
||||
void realizeNav();
|
||||
|
||||
/* 0x008 */ d2d::dLytSub mLyt;
|
||||
/* 0x09C */ d2d::AnmGroup_c mAnm[2];
|
||||
/* 0x11C */ nw4r::lyt::Pane *mpStickCursorPane;
|
||||
/* 0x120 */ nw4r::lyt::Pane *mpGetIconPane;
|
||||
/* 0x124 */ dLytCommonIconItem_c mIcon;
|
||||
/* 0x930 */ d2d::SubPaneList mSubpaneList;
|
||||
/* 0x938 */ d2d::SubPaneListNode mNode;
|
||||
/* 0x948 */ bool mIsVisible;
|
||||
/* 0x949 */ bool mIsSellMode;
|
||||
/* 0x94C */ s32 mSlot;
|
||||
/* 0x950 */ s32 mItem;
|
||||
/* 0x954 */ s32 mItemLocation;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,206 @@
|
||||
#ifndef D_LYT_DEPOSIT_STOCK_H
|
||||
#define D_LYT_DEPOSIT_STOCK_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_arrow.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dLytDepositStock_c : public d2d::dSubPane {
|
||||
public:
|
||||
enum NavMode_e {
|
||||
NAV_ITEM,
|
||||
NAV_SELL,
|
||||
NAV_SORT,
|
||||
NAV_FINISH,
|
||||
NAV_ARROW,
|
||||
};
|
||||
|
||||
public:
|
||||
dLytDepositStock_c() : mStateMgr(*this) {}
|
||||
virtual ~dLytDepositStock_c() {}
|
||||
|
||||
/* vt 0x0C */ virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
/* vt 0x10 */ virtual bool remove() override;
|
||||
/* vt 0x14 */ virtual bool execute() override;
|
||||
/* vt 0x18 */ virtual nw4r::lyt::Pane *getPane() override {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
}
|
||||
/* vt 0x1C */ virtual d2d::LytBase_c *getLyt() override {
|
||||
return &mLyt;
|
||||
}
|
||||
/* vt 0x20 */ virtual const char *getName() const override {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
void nextPage(bool preventCancellingSelection);
|
||||
void prevPage(bool preventCancellingSelection);
|
||||
void fn_80156530(bool unk);
|
||||
|
||||
void navigateToItem();
|
||||
void navigateToSell();
|
||||
void navigateToSort();
|
||||
void navigateToFinish();
|
||||
void saveArrowDirection();
|
||||
void navigateToArrow(s32 arrowDirection);
|
||||
s32 restoreArrowDirection();
|
||||
void handleSpecialNavMode();
|
||||
bool isNavModeItem() const;
|
||||
void navigateOffIcon();
|
||||
void handleNavOrPoint();
|
||||
|
||||
void pickUpOrPlaceItem(s32 slot, bool place);
|
||||
void selectNavTarget(s32 idx);
|
||||
void setItem(s32 idx, s32 item);
|
||||
s32 getCurrentSlot() const;
|
||||
void loadItems(s32 hiddenSlot);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dLytDepositStock_c);
|
||||
|
||||
s32 getCurrentNavTarget() const {
|
||||
return mCurrentNavTarget;
|
||||
}
|
||||
|
||||
bool isModeSort() const {
|
||||
return mIsModeSort;
|
||||
}
|
||||
|
||||
bool isModePouch() const {
|
||||
return mIsModePouch;
|
||||
}
|
||||
|
||||
bool isModeSell() const {
|
||||
return mIsModeSell;
|
||||
}
|
||||
|
||||
bool isModeFinish() const {
|
||||
return mIsModeFinish;
|
||||
}
|
||||
|
||||
void disableModeSort() {
|
||||
mIsModeSort = false;
|
||||
}
|
||||
|
||||
void disableModePouch() {
|
||||
mIsModePouch = false;
|
||||
}
|
||||
|
||||
void disableModeSell() {
|
||||
mIsModeSell = false;
|
||||
}
|
||||
|
||||
void disableModeFinish() {
|
||||
mIsModeFinish = false;
|
||||
}
|
||||
|
||||
void returnToNoneMode() {
|
||||
mIsModeFinish = false;
|
||||
mIsModeSell = false;
|
||||
mIsModeSort = false;
|
||||
mIsModePouch = false;
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
}
|
||||
|
||||
void disableSpecialModes() {
|
||||
mIsModeSell = false;
|
||||
mIsModeFinish = false;
|
||||
mIsModeSort = false;
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
}
|
||||
|
||||
u8 getItem(s32 idx) const {
|
||||
return mItemIds[idx];
|
||||
}
|
||||
|
||||
u8 getPage() const {
|
||||
return mItemPage;
|
||||
}
|
||||
|
||||
void setPage(u8 page) {
|
||||
mItemPage = page;
|
||||
}
|
||||
|
||||
s32 getActiveItem() const {
|
||||
return mItemIds[mCurrentNavTarget];
|
||||
}
|
||||
|
||||
void setSellBlocked(bool v) {
|
||||
mIsSellBlocked = v;
|
||||
}
|
||||
|
||||
void setSortBlocked(bool v) {
|
||||
mIsSortBlocked = v;
|
||||
}
|
||||
|
||||
s32 getArrowDirection() const {
|
||||
return mArrowDirection;
|
||||
}
|
||||
|
||||
s32 getSavedArrowDirection() const {
|
||||
return mSavedArrowDirection;
|
||||
}
|
||||
|
||||
void setSavedArrowDirection(s32 dir) {
|
||||
mSavedArrowDirection = dir;
|
||||
}
|
||||
|
||||
void setMainStock(bool b) {
|
||||
mIsMainStock = b;
|
||||
}
|
||||
|
||||
void onDropItem() {
|
||||
mPickedUpItemOnThisPage = false;
|
||||
}
|
||||
|
||||
void setPreventCancellingSelection() {
|
||||
mPreventCancellingSelection = true;
|
||||
}
|
||||
|
||||
private:
|
||||
static const s32 NUM_ICONS_PER_PAGE = 12;
|
||||
static const s32 NUM_PAGES = 5;
|
||||
|
||||
void initIcons();
|
||||
void loadIcon(s32 idx);
|
||||
void navigateToPouch();
|
||||
void realizeItem(s32 idx);
|
||||
|
||||
/**
|
||||
* Check if the FS stick is pushed in a direction. Diagonal movements
|
||||
* are adjusted to horizontal and vertical navigations if necessary.
|
||||
* @returns FS stick direction
|
||||
*/
|
||||
s32 checkNav();
|
||||
|
||||
STATE_FUNC_DECLARE(dLytDepositStock_c, None);
|
||||
|
||||
/* 0x0008 */ UI_STATE_MGR_DECLARE(dLytDepositStock_c);
|
||||
/* 0x0044 */ d2d::dLytSub mLyt;
|
||||
/* 0x00D8 */ d2d::AnmGroup_c mAnm[25];
|
||||
/* 0x0718 */ dLytCommonIconItem_c mIcons[NUM_ICONS_PER_PAGE];
|
||||
/* 0x6778 */ d2d::SubPaneList mSubpaneList;
|
||||
/* 0x6784 */ d2d::SubPaneListNode mNodes[NUM_ICONS_PER_PAGE];
|
||||
/* 0x6844 */ bool mIsIdle;
|
||||
/* 0x6845 */ bool mIsModePouch;
|
||||
/* 0x6846 */ bool mIsModeSell;
|
||||
/* 0x6847 */ bool mIsModeSort;
|
||||
/* 0x6848 */ bool mIsModeFinish;
|
||||
/* 0x6849 */ bool mIsSellBlocked;
|
||||
/* 0x684A */ bool mIsSortBlocked;
|
||||
/* 0x684B */ bool mPreventCancellingSelection;
|
||||
/* 0x684C */ bool mPrevPointerVisible;
|
||||
/* 0x684D */ bool mIsMainStock;
|
||||
/* 0x684E */ bool mPickedUpItemOnThisPage;
|
||||
/* 0x6850 */ s32 mCurrentNavTarget;
|
||||
/* 0x6854 */ s32 mNumSlots;
|
||||
/* 0x6858 */ s32 mSelectedItemId;
|
||||
/* 0x685C */ s32 mPickedUpIdx;
|
||||
/* 0x6860 */ s32 mArrowDirection;
|
||||
/* 0x6864 */ s32 mSavedArrowDirection;
|
||||
/* 0x6868 */ s32 mNavMode;
|
||||
/* 0x686C */ u8 mItemIds[NUM_ICONS_PER_PAGE];
|
||||
/* 0x6878 */ u8 mItemPage;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -18,6 +18,8 @@ enum SongLifeTreeSeedStatus_e {
|
||||
SONG_LIFETREE_HAS_SOTH = 2,
|
||||
};
|
||||
|
||||
s32 convertLytPouchSlot2(s32 fileSlot);
|
||||
|
||||
u8 getSongLifeTreeStatus();
|
||||
|
||||
/** 0: no sword, 6: TMS */
|
||||
@@ -74,9 +76,14 @@ u8 getPouchItemForSlot(s32 slot, bool unk);
|
||||
bool hasPouchSlot(s32 slot, bool unk);
|
||||
s32 getPouchItemAmount(s32 slot, bool unk);
|
||||
u8 getPouchItemNumberColor(s32 slot, bool unk);
|
||||
f32 getShieldDurability(s32 slot, bool unk);
|
||||
f32 getPouchShieldDurability(s32 slot, bool unk);
|
||||
u32 getPouchItemIdForIndex(s32 slot, bool unk);
|
||||
|
||||
u8 getDepositItemForSlot(s32 slot);
|
||||
s32 getDepositItemAmount(s32 slot);
|
||||
u8 getDepositItemNumberColor(s32 slot);
|
||||
f32 getDepositShieldDurability(s32 slot);
|
||||
|
||||
// TODO - rename and make sense of these
|
||||
DowsingTarget::DowsingSlot dowsingSlotForIndex(s32 index);
|
||||
u8 getLytIndexForDowsingIndex(s32 index);
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#ifdef __cplusplus
|
||||
|
||||
namespace std {
|
||||
using ::mbstowcs;
|
||||
using ::mbtowc;
|
||||
// using ::mbstowcs;
|
||||
// using ::mbtowc;
|
||||
using ::swprintf;
|
||||
using ::vswprintf;
|
||||
using ::wcscat;
|
||||
@@ -14,7 +14,7 @@ using ::wcscmp;
|
||||
using ::wcscpy;
|
||||
using ::wcslen;
|
||||
using ::wcsncpy;
|
||||
using ::wcstombs;
|
||||
// using ::wcstombs;
|
||||
} // namespace std
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "d/d_cursor_hit_check.h"
|
||||
#include "d/d_pad_nav.h"
|
||||
#include "d/snd/d_snd_small_effect_mgr.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "rvl/MTX/mtx.h"
|
||||
#include "toBeSorted/arc_managers/layout_arc_manager.h"
|
||||
|
||||
@@ -76,7 +77,7 @@ bool dLytCommonArrow_c::execute() {
|
||||
mLytBase.calc();
|
||||
mCsHitCheck.resetCachedHitboxes();
|
||||
mCsHitCheck.execute();
|
||||
field_0x6BC = field_0x6B8;
|
||||
mLastActiveArrow = mActiveArrow;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -96,8 +97,10 @@ void dLytCommonArrow_c::setState(s32 state) {
|
||||
}
|
||||
}
|
||||
|
||||
void dLytCommonArrow_c::setTranslate(const Vec *arg) {
|
||||
nw4r::math::VEC3 v(*arg);
|
||||
void dLytCommonArrow_c::setTranslate(const mVec2_c *arg) {
|
||||
nw4r::math::VEC3 v;
|
||||
v.x = arg->x;
|
||||
v.y = arg->y;
|
||||
v.z = 0.0f;
|
||||
mLytBase.getLayout()->GetRootPane()->SetTranslate(v);
|
||||
}
|
||||
@@ -118,9 +121,9 @@ bool dLytCommonArrow_c::requestOut() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytCommonArrow_c::fn_80168760() {
|
||||
if (field_0x6C0 == ARROW_NONE && field_0x6B8 != ARROW_NONE) {
|
||||
field_0x6C0 = field_0x6B8;
|
||||
bool dLytCommonArrow_c::triggerArrowPress() {
|
||||
if (mTriggeredArrow == ARROW_NONE && mActiveArrow != ARROW_NONE) {
|
||||
mTriggeredArrow = mActiveArrow;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -177,9 +180,9 @@ void dLytCommonArrow_c::initializeState_None() {
|
||||
mIsChangingState = false;
|
||||
mVisible = false;
|
||||
mPointedAtArrow = ARROW_NONE;
|
||||
field_0x6B8 = ARROW_NONE;
|
||||
field_0x6BC = ARROW_NONE;
|
||||
field_0x6C0 = ARROW_NONE;
|
||||
mActiveArrow = ARROW_NONE;
|
||||
mLastActiveArrow = ARROW_NONE;
|
||||
mTriggeredArrow = ARROW_NONE;
|
||||
mTimer = 0;
|
||||
displayElement(ANIM_IN, 0.0f);
|
||||
mBackwards = true;
|
||||
@@ -238,11 +241,11 @@ void dLytCommonArrow_c::executeState_Wait() {
|
||||
}
|
||||
|
||||
checkPointAtPane();
|
||||
if (field_0x6B8 == ARROW_LEFT) {
|
||||
if (mActiveArrow == ARROW_LEFT) {
|
||||
d2d::AnmGroup_c &g = mAnmGroups[ANIM_ONOFF_L];
|
||||
g.play();
|
||||
tickDown(&mAnmGroups[ANIM_ONOFF_R]);
|
||||
} else if (field_0x6B8 == ARROW_RIGHT) {
|
||||
} else if (mActiveArrow == ARROW_RIGHT) {
|
||||
d2d::AnmGroup_c &g = mAnmGroups[ANIM_ONOFF_R];
|
||||
g.play();
|
||||
tickDown(&mAnmGroups[ANIM_ONOFF_L]);
|
||||
@@ -260,9 +263,9 @@ void dLytCommonArrow_c::executeState_Wait() {
|
||||
|
||||
switch (mTimer) {
|
||||
case 0:
|
||||
if (field_0x6C0 != ARROW_NONE) {
|
||||
displayElement(field_0x6C0 + ANIM_DECIDE_OFFSET, 0.0f);
|
||||
if (field_0x6C0 == 0) {
|
||||
if (mTriggeredArrow != ARROW_NONE) {
|
||||
displayElement(mTriggeredArrow + ANIM_DECIDE_OFFSET, 0.0f);
|
||||
if (mTriggeredArrow == ARROW_LEFT) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MENU_SELECT_TURN_PAGE_LEFT);
|
||||
} else {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MENU_SELECT_TURN_PAGE_RIGHT);
|
||||
@@ -271,7 +274,7 @@ void dLytCommonArrow_c::executeState_Wait() {
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
d2d::AnmGroup_c &g = mAnmGroups[field_0x6C0 + ANIM_DECIDE_OFFSET];
|
||||
d2d::AnmGroup_c &g = mAnmGroups[mTriggeredArrow + ANIM_DECIDE_OFFSET];
|
||||
if (g.isEndReached() == true) {
|
||||
mTimer++;
|
||||
mIsChangingState = true;
|
||||
@@ -279,15 +282,15 @@ void dLytCommonArrow_c::executeState_Wait() {
|
||||
g.play();
|
||||
} break;
|
||||
case 2:
|
||||
unbindAt(field_0x6C0 + ANIM_DECIDE_OFFSET);
|
||||
unbindAt(mTriggeredArrow + ANIM_DECIDE_OFFSET);
|
||||
mTimer = 0;
|
||||
mIsChangingState = false;
|
||||
field_0x6C0 = ARROW_NONE;
|
||||
mTriggeredArrow = ARROW_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (field_0x6BC != field_0x6B8 && field_0x6B8 != ARROW_NONE) {
|
||||
if (field_0x6B8 == ARROW_LEFT) {
|
||||
if (mLastActiveArrow != mActiveArrow && mActiveArrow != ARROW_NONE) {
|
||||
if (mActiveArrow == ARROW_LEFT) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MENU_POINT_TURN_PAGE_LEFT);
|
||||
} else {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MENU_POINT_TURN_PAGE_RIGHT);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,205 @@
|
||||
#include "d/lyt/d_lyt_deposit_box_cursor.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/d_cs_base.h"
|
||||
#include "d/d_pad_nav.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item_maps.h"
|
||||
#include "d/lyt/d_lyt_util_items.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/lyt/lyt_group.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "toBeSorted/arc_managers/layout_arc_manager.h"
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "depositBoxCursor_00_loop.brlan", "G_loop_00"},
|
||||
{"depositBoxCursor_00_stickCursor.brlan", "G_stickCursor_00"},
|
||||
};
|
||||
|
||||
#define DEPOSIT_BOX_CURSOR_ANIM_LOOP 0
|
||||
#define DEPOSIT_BOX_CURSOR_ANIM_STICK_CURSOR 1
|
||||
|
||||
#define DEPOSIT_BOX_CURSOR_NUM_ANIMS 2
|
||||
|
||||
bool dLytDepositBoxCursor_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("depositBoxCursor_00.brlyt", nullptr);
|
||||
mLyt.setPriority(0x88);
|
||||
|
||||
for (int i = 0; i < DEPOSIT_BOX_CURSOR_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[DEPOSIT_BOX_CURSOR_ANIM_LOOP].setAnimEnable(true);
|
||||
mAnm[DEPOSIT_BOX_CURSOR_ANIM_LOOP].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
|
||||
mpStickCursorPane = mLyt.findPane("N_stickCursor_00");
|
||||
mpGetIconPane = mLyt.findPane("N_getIcon_00");
|
||||
initIcon();
|
||||
mIsVisible = false;
|
||||
mIsSellMode = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytDepositBoxCursor_c::execute() {
|
||||
realizeNav();
|
||||
mAnm[DEPOSIT_BOX_CURSOR_ANIM_LOOP].play();
|
||||
if (mIsVisible) {
|
||||
mNode.mpLytPane->execute();
|
||||
}
|
||||
mLyt.calc();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytDepositBoxCursor_c::draw() {
|
||||
if (mIsVisible) {
|
||||
mLyt.addToDrawList();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytDepositBoxCursor_c::remove() {
|
||||
for (d2d::SubPaneList::Iterator it = mSubpaneList.GetBeginIter(); it != mSubpaneList.GetEndIter(); ++it) {
|
||||
d2d::dSubPane *subPane = it->mpLytPane;
|
||||
if (subPane != nullptr) {
|
||||
nw4r::lyt::Pane *parent = subPane->getPane()->GetParent();
|
||||
parent->RemoveChild(subPane->getPane());
|
||||
}
|
||||
}
|
||||
|
||||
mNode.mpLytPane->remove();
|
||||
|
||||
mLyt.unbindAnims();
|
||||
|
||||
for (int i = 0; i < DEPOSIT_BOX_CURSOR_NUM_ANIMS; i++) {
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *sGroupName = "G_ref_00";
|
||||
|
||||
void dLytDepositBoxCursor_c::initIcon() {
|
||||
void *data = LayoutArcManager::GetInstance()->getLoadedData("DoButton");
|
||||
d2d::ResAccIf_c resAcc;
|
||||
resAcc.attach(data, "");
|
||||
|
||||
mNode.mpLytPane = &mIcon;
|
||||
mIcon.build(&resAcc, dLytCommonIconItem_c::POUCH);
|
||||
mSubpaneList.PushBack(&mNode);
|
||||
|
||||
if (mLyt.getLayout()->GetGroupContainer() != nullptr) {
|
||||
nw4r::lyt::Group *g = mLyt.getLayout()->GetGroupContainer()->FindGroupByName(sGroupName);
|
||||
if (g != nullptr) {
|
||||
d2d::dSubPane::linkMeters(g, &mSubpaneList);
|
||||
}
|
||||
}
|
||||
|
||||
mIcon.setUnk(false);
|
||||
mIcon.setHasNumber(false);
|
||||
mIcon.setNumber(0);
|
||||
mIcon.setVisible(false);
|
||||
|
||||
mNode.mpPane->SetVisible(false);
|
||||
}
|
||||
|
||||
void dLytDepositBoxCursor_c::realizeNav() {
|
||||
s32 s;
|
||||
if (mSlot < 0) {
|
||||
s = mAnm[DEPOSIT_BOX_CURSOR_ANIM_STICK_CURSOR].getLastFrame();
|
||||
} else if (dPadNav::isPointerVisible()) {
|
||||
s = 4;
|
||||
} else if (mItem == LYT_CMN_PouchPotionHealthPlusPlusHalf) {
|
||||
s = 5;
|
||||
} else if (mIsSellMode) {
|
||||
s = 6;
|
||||
} else if (mItemLocation == LOC_POUCH) {
|
||||
// Flip the cursor for pouch slot 0 so that it's not above the screen edge
|
||||
s = mSlot == 0 ? 1 : 0;
|
||||
if (mItem == LYT_CMN_PouchBlank4) {
|
||||
s += 2;
|
||||
}
|
||||
} else if (mItem == LYT_CMN_PouchBlank4) {
|
||||
s = 2;
|
||||
} else {
|
||||
s = 0;
|
||||
}
|
||||
|
||||
mVec3_c v;
|
||||
if (dPadNav::isPointerVisible()) {
|
||||
mVec2_c pos = dCsBase_c::GetInstance()->getCursorIf()->getCursorPos();
|
||||
v.set(pos.x, pos.y + 15.0f, 0.0f);
|
||||
} else {
|
||||
nw4r::math::MTX34 mtx = dCsBase_c::GetInstance()->getCursorStickAllPane()->GetGlobalMtx();
|
||||
v.set(mtx._03, mtx._13, 0.0f);
|
||||
}
|
||||
|
||||
mpStickCursorPane->SetTranslate(v);
|
||||
|
||||
mAnm[DEPOSIT_BOX_CURSOR_ANIM_STICK_CURSOR].setAnimEnable(true);
|
||||
mAnm[DEPOSIT_BOX_CURSOR_ANIM_STICK_CURSOR].setFrame(s);
|
||||
mLyt.calc();
|
||||
mAnm[DEPOSIT_BOX_CURSOR_ANIM_STICK_CURSOR].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytDepositBoxCursor_c::init(s32 location, s32 slot, s32 item, bool isSell) {
|
||||
mItemLocation = location;
|
||||
mIsSellMode = isSell;
|
||||
|
||||
s32 number;
|
||||
f32 durability;
|
||||
u8 color;
|
||||
if (mItemLocation == LOC_POUCH) {
|
||||
number = getPouchItemAmount(slot, false);
|
||||
durability = getPouchShieldDurability(slot, false);
|
||||
color = getPouchItemNumberColor(slot, false);
|
||||
mSlot = slot;
|
||||
} else {
|
||||
number = getDepositItemAmount(slot);
|
||||
durability = getDepositShieldDurability(slot);
|
||||
color = getDepositItemNumberColor(slot);
|
||||
mSlot = slot % NUM_ICONS_PER_PAGE;
|
||||
}
|
||||
|
||||
if (number < 0) {
|
||||
mIcon.setHasNumber(false);
|
||||
} else {
|
||||
mIcon.setHasNumber(true);
|
||||
mIcon.setNumber(number);
|
||||
}
|
||||
mIcon.setUnk(false);
|
||||
mIcon.setItem(item);
|
||||
if (color != 3) {
|
||||
mIcon.setNumberColor(color);
|
||||
}
|
||||
if (durability >= 0.0f) {
|
||||
mIcon.setShieldDurability(durability);
|
||||
}
|
||||
|
||||
mNode.mpPane->SetVisible(true);
|
||||
mItem = LYT_CMN_PouchBlank4;
|
||||
realizeNav();
|
||||
mIsVisible = true;
|
||||
}
|
||||
|
||||
void dLytDepositBoxCursor_c::updateSlot(s32 location, s32 slot, s32 item, bool isSell) {
|
||||
mItem = item;
|
||||
mItemLocation = location;
|
||||
mIsSellMode = isSell;
|
||||
if (mItemLocation == LOC_POUCH) {
|
||||
mSlot = slot;
|
||||
} else {
|
||||
mSlot = slot % NUM_ICONS_PER_PAGE;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositBoxCursor_c::activateSell() {
|
||||
mIsSellMode = true;
|
||||
realizeNav();
|
||||
}
|
||||
@@ -0,0 +1,683 @@
|
||||
#include "d/lyt/d_lyt_deposit_stock.h"
|
||||
|
||||
#include "d/d_cs_base.h"
|
||||
#include "d/d_pad_nav.h"
|
||||
#include "d/d_rumble.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_arrow.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item_maps.h"
|
||||
#include "d/lyt/d_lyt_util_items.h"
|
||||
#include "d/snd/d_snd_small_effect_mgr.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "nw4r/lyt/lyt_group.h"
|
||||
#include "toBeSorted/arc_managers/layout_arc_manager.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytDepositStock_c, None);
|
||||
|
||||
void dLytDepositStock_c::initializeState_None() {}
|
||||
void dLytDepositStock_c::executeState_None() {
|
||||
mIsIdle = true;
|
||||
}
|
||||
void dLytDepositStock_c::finalizeState_None() {}
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_00"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_01"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_02"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_03"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_04"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_05"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_06"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_07"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_08"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_09"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_10"},
|
||||
{ "depositBoxBg_00_flash.brlan", "G_flash_11"},
|
||||
{ "depositBoxBg_00_loop.brlan", "G_loop_00"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_00"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_01"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_02"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_03"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_04"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_05"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_06"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_07"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_08"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_09"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_10"},
|
||||
{"depositBoxBg_00_haveBox.brlan", "G_poach_11"},
|
||||
};
|
||||
|
||||
#define DEPOSIT_STOCK_ANIM_FLASH_OFFSET 0
|
||||
#define DEPOSIT_STOCK_ANIM_LOOP 12
|
||||
#define DEPOSIT_STOCK_ANIM_HAVE_BOX_OFFSET 13
|
||||
|
||||
#define DEPOSIT_STOCK_NUM_ANIMS 25
|
||||
|
||||
bool dLytDepositStock_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("depositBoxBg_00.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < DEPOSIT_STOCK_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < DEPOSIT_STOCK_NUM_ANIMS; i++) {
|
||||
if (i < DEPOSIT_STOCK_ANIM_FLASH_OFFSET + NUM_ICONS_PER_PAGE) {
|
||||
mAnm[i].setAnimEnable(true);
|
||||
mAnm[i].setToEnd();
|
||||
} else {
|
||||
mAnm[i].setAnimEnable(true);
|
||||
mAnm[i].setFrame(0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
for (i = 0; i < DEPOSIT_STOCK_NUM_ANIMS; i++) {
|
||||
if (i != DEPOSIT_STOCK_ANIM_LOOP) {
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
initIcons();
|
||||
|
||||
mStateMgr.changeState(StateID_None);
|
||||
|
||||
mCurrentNavTarget = -12;
|
||||
mSelectedItemId = -1;
|
||||
mPickedUpIdx = -1;
|
||||
|
||||
mIsSellBlocked = false;
|
||||
mIsSortBlocked = false;
|
||||
mPreventCancellingSelection = false;
|
||||
mPrevPointerVisible = true;
|
||||
mPickedUpItemOnThisPage = false;
|
||||
|
||||
mArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
|
||||
mIsModePouch = false;
|
||||
mIsModeSell = false;
|
||||
mIsModeSort = false;
|
||||
mIsModeFinish = false;
|
||||
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
|
||||
navigateToItem();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytDepositStock_c::execute() {
|
||||
for (int i = 0; i < mNumSlots; i++) {
|
||||
mNodes[i].mpLytPane->execute();
|
||||
}
|
||||
|
||||
if (mIsMainStock) {
|
||||
mStateMgr.executeState();
|
||||
}
|
||||
|
||||
for (int i = 0; i < DEPOSIT_STOCK_ANIM_LOOP + 1; i++) {
|
||||
if (mAnm[i].isEnabled()) {
|
||||
if (i < NUM_ICONS_PER_PAGE && mAnm[i].isStop()) {
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
mPrevPointerVisible = dPadNav::isPointerVisible();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytDepositStock_c::remove() {
|
||||
for (d2d::SubPaneList::Iterator it = mSubpaneList.GetBeginIter(); it != mSubpaneList.GetEndIter(); ++it) {
|
||||
d2d::dSubPane *subPane = it->mpLytPane;
|
||||
if (subPane != nullptr) {
|
||||
nw4r::lyt::Pane *parent = subPane->getPane()->GetParent();
|
||||
parent->RemoveChild(subPane->getPane());
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < NUM_ICONS_PER_PAGE; i++) {
|
||||
mNodes[i].mpLytPane->remove();
|
||||
}
|
||||
|
||||
mLyt.unbindAnims();
|
||||
|
||||
for (int i = 0; i < DEPOSIT_STOCK_NUM_ANIMS; i++) {
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *sGroupName = "G_ref_00";
|
||||
|
||||
void dLytDepositStock_c::initIcons() {
|
||||
void *data = LayoutArcManager::GetInstance()->getLoadedData("DoButton");
|
||||
d2d::ResAccIf_c resAcc;
|
||||
resAcc.attach(data, "");
|
||||
|
||||
for (int i = 0; i < NUM_ICONS_PER_PAGE; i++) {
|
||||
mNodes[i].mpLytPane = &mIcons[i];
|
||||
mIcons[i].build(&resAcc, dLytCommonIconItem_c::POUCH);
|
||||
mSubpaneList.PushBack(&mNodes[i]);
|
||||
}
|
||||
|
||||
if (mLyt.getLayout()->GetGroupContainer() != nullptr) {
|
||||
nw4r::lyt::Group *g = mLyt.getLayout()->GetGroupContainer()->FindGroupByName(sGroupName);
|
||||
if (g != nullptr) {
|
||||
d2d::dSubPane::linkMeters(g, &mSubpaneList);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < mNumSlots; i++) {
|
||||
mNodes[i].mpPane->SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::loadItems(s32 hiddenSlot) {
|
||||
s32 slot = mItemPage * NUM_ICONS_PER_PAGE;
|
||||
|
||||
mNumSlots = 0;
|
||||
mPickedUpItemOnThisPage = false;
|
||||
|
||||
for (int i = 0; i < NUM_ICONS_PER_PAGE; i++) {
|
||||
mIcons[i].reset();
|
||||
mItemIds[i] = getDepositItemForSlot(slot);
|
||||
|
||||
f32 f = 0.0f;
|
||||
if (mItemIds[i] != LYT_CMN_PouchBlank4 && slot != hiddenSlot) {
|
||||
f = 1.0f;
|
||||
}
|
||||
loadIcon(i);
|
||||
mIcons[i].setVisible(false);
|
||||
if (slot == hiddenSlot) {
|
||||
mNodes[i].mpPane->SetVisible(false);
|
||||
} else {
|
||||
mNodes[i].mpPane->SetVisible(true);
|
||||
}
|
||||
|
||||
mAnm[i + DEPOSIT_STOCK_ANIM_HAVE_BOX_OFFSET].setAnimEnable(true);
|
||||
mAnm[i + DEPOSIT_STOCK_ANIM_HAVE_BOX_OFFSET].setFrame(f);
|
||||
mLyt.calc();
|
||||
mAnm[i + DEPOSIT_STOCK_ANIM_HAVE_BOX_OFFSET].setAnimEnable(false);
|
||||
|
||||
slot++;
|
||||
mNumSlots++;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::loadIcon(s32 idx) {
|
||||
s32 slot = idx + mItemPage * NUM_ICONS_PER_PAGE;
|
||||
s32 number = getDepositItemAmount(slot);
|
||||
|
||||
mIcons[idx].setUnk(false);
|
||||
|
||||
if (number < 0) {
|
||||
mIcons[idx].setHasNumber(false);
|
||||
} else {
|
||||
mIcons[idx].setHasNumber(true);
|
||||
mIcons[idx].setNumber(number);
|
||||
}
|
||||
mIcons[idx].setItem(mItemIds[idx]);
|
||||
u8 color = getDepositItemNumberColor(slot);
|
||||
if (color != 3) {
|
||||
mIcons[idx].setNumberColor(color);
|
||||
}
|
||||
f32 durability = getDepositShieldDurability(slot);
|
||||
if (durability >= 0.0f) {
|
||||
mIcons[idx].setShieldDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::nextPage(bool preventCancellingSelection) {
|
||||
mItemPage++;
|
||||
if (mItemPage >= NUM_PAGES) {
|
||||
mItemPage = 0;
|
||||
}
|
||||
mPreventCancellingSelection = preventCancellingSelection;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::prevPage(bool preventCancellingSelection) {
|
||||
if (mItemPage != 0) {
|
||||
mItemPage--;
|
||||
} else {
|
||||
mItemPage = NUM_PAGES - 1;
|
||||
}
|
||||
mPreventCancellingSelection = preventCancellingSelection;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::fn_80156530(bool unk) {
|
||||
for (int i = 0; i < NUM_ICONS_PER_PAGE; i++) {
|
||||
mIcons[i].setVisible(unk);
|
||||
}
|
||||
|
||||
if (!mPreventCancellingSelection) {
|
||||
if (mCurrentNavTarget >= 0) {
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setAnimEnable(true);
|
||||
mSelectedItemId = -1;
|
||||
}
|
||||
mCurrentNavTarget = -10;
|
||||
}
|
||||
|
||||
mPreventCancellingSelection = false;
|
||||
mIsModePouch = false;
|
||||
mIsModeSell = false;
|
||||
if (!mIsModeSort) {
|
||||
// okay
|
||||
mIsModeSort = false;
|
||||
}
|
||||
mIsModeFinish = false;
|
||||
if (mArrowDirection >= dLytCommonArrow_c::ARROW_NONE) {
|
||||
handleSpecialNavMode();
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::handleNavOrPoint() {
|
||||
bool selectIcon = false;
|
||||
s32 nextTarget = 0;
|
||||
if (dPadNav::isPointerVisible()) {
|
||||
for (nextTarget = 0; nextTarget < NUM_ICONS_PER_PAGE; nextTarget++) {
|
||||
if (mIcons[nextTarget].isCursorOver()) {
|
||||
selectIcon = true;
|
||||
saveArrowDirection();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
s32 dir = checkNav();
|
||||
if (!isNavModeItem()) {
|
||||
handleSpecialNavMode();
|
||||
} else if (!mIsModePouch && !mIsModeSell && !mIsModeSort && !mIsModeFinish && mSavedArrowDirection >= 2) {
|
||||
s32 target = mCurrentNavTarget;
|
||||
if (target < 0 || mPrevPointerVisible) {
|
||||
if (dir != dPadNav::FS_STICK_NONE || dCsBase_c::GetInstance()->isCursorStickVisible()) {
|
||||
if (target < 0) {
|
||||
target += NUM_ICONS_PER_PAGE;
|
||||
}
|
||||
selectIcon = true;
|
||||
nextTarget = target;
|
||||
}
|
||||
} else {
|
||||
switch (dir) {
|
||||
case dPadNav::FS_STICK_UP:
|
||||
if (target < 6) {
|
||||
navigateToPouch();
|
||||
} else {
|
||||
nextTarget = target - 6;
|
||||
selectIcon = true;
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_UP_RIGHT:
|
||||
nextTarget = target - 5;
|
||||
selectIcon = true;
|
||||
break;
|
||||
case dPadNav::FS_STICK_RIGHT:
|
||||
if (target % 6 == 5) {
|
||||
navigateToArrow(dLytCommonArrow_c::ARROW_RIGHT);
|
||||
saveArrowDirection();
|
||||
dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0);
|
||||
} else {
|
||||
nextTarget = target + 1;
|
||||
selectIcon = true;
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_DOWN_RIGHT:
|
||||
nextTarget = target + 7;
|
||||
selectIcon = true;
|
||||
break;
|
||||
case dPadNav::FS_STICK_DOWN:
|
||||
if (target >= 10) {
|
||||
navigateToSort();
|
||||
} else if (target >= 6 && target <= 7) {
|
||||
navigateToSell();
|
||||
} else {
|
||||
nextTarget = target + 6;
|
||||
selectIcon = true;
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_DOWN_LEFT:
|
||||
nextTarget = target + 5;
|
||||
selectIcon = true;
|
||||
break;
|
||||
case dPadNav::FS_STICK_LEFT:
|
||||
if (target % 6 == 0) {
|
||||
navigateToArrow(dLytCommonArrow_c::ARROW_LEFT);
|
||||
saveArrowDirection();
|
||||
dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0);
|
||||
} else {
|
||||
nextTarget = target - 1;
|
||||
selectIcon = true;
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_UP_LEFT:
|
||||
nextTarget = target - 7;
|
||||
selectIcon = true;
|
||||
break;
|
||||
default:
|
||||
nextTarget = target;
|
||||
selectIcon = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (selectIcon) {
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
if (mCurrentNavTarget != nextTarget) {
|
||||
if (mCurrentNavTarget >= 0) {
|
||||
mIcons[mCurrentNavTarget].setOff();
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setAnimEnable(true);
|
||||
}
|
||||
if (mItemIds[nextTarget] != LYT_CMN_PouchBlank4 &&
|
||||
mItemIds[nextTarget] != LYT_CMN_PouchPotionHealthPlusPlusHalf) {
|
||||
mIcons[nextTarget].setOn();
|
||||
mSelectedItemId = FileManager::sInstance->getItemCheckItem(nextTarget + mItemPage * NUM_ICONS_PER_PAGE);
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SHOP_STK_STOCK_POINT_ITEM);
|
||||
} else {
|
||||
mSelectedItemId = -1;
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SHOP_STK_STOCK_POINT_EMPTY);
|
||||
}
|
||||
|
||||
s32 anmIdx = nextTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET;
|
||||
mAnm[anmIdx].setAnimEnable(true);
|
||||
mAnm[anmIdx].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[anmIdx].setAnimEnable(false);
|
||||
dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0);
|
||||
mCurrentNavTarget = nextTarget;
|
||||
mIsModeSell = false;
|
||||
mIsModeSort = false;
|
||||
mIsModeFinish = false;
|
||||
navigateToItem();
|
||||
}
|
||||
mNavMode = 0;
|
||||
} else {
|
||||
navigateOffIcon();
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateOffIcon() {
|
||||
if (mCurrentNavTarget >= 0) {
|
||||
// TODO why LYT_CMN_PouchPotionHealthPlusPlusHalf
|
||||
if (mItemIds[mCurrentNavTarget] != LYT_CMN_PouchBlank4 &&
|
||||
mItemIds[mCurrentNavTarget] != LYT_CMN_PouchPotionHealthPlusPlusHalf) {
|
||||
mIcons[mCurrentNavTarget].setOff();
|
||||
mSelectedItemId = -1;
|
||||
}
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setAnimEnable(true);
|
||||
mCurrentNavTarget -= NUM_ICONS_PER_PAGE;
|
||||
}
|
||||
}
|
||||
|
||||
s32 dLytDepositStock_c::checkNav() {
|
||||
// Note: Navigating UP when in the first row means switching from stock to pouch
|
||||
|
||||
s32 target = mCurrentNavTarget;
|
||||
s32 direction = dPadNav::getFSStickNavDirection();
|
||||
if (target >= 0) {
|
||||
switch (direction) {
|
||||
case dPadNav::FS_STICK_UP_RIGHT:
|
||||
if (target == 11) {
|
||||
direction = dPadNav::FS_STICK_UP;
|
||||
} else if (target < 6) {
|
||||
if (target < 4) {
|
||||
direction = dPadNav::FS_STICK_UP;
|
||||
} else if (target == 5) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_RIGHT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_DOWN_RIGHT:
|
||||
if (target == 5) {
|
||||
direction = dPadNav::FS_STICK_DOWN;
|
||||
} else if (target >= 6) {
|
||||
if (target >= 10) {
|
||||
if (mIsSortBlocked) {
|
||||
if (target == 11) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_RIGHT;
|
||||
}
|
||||
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_DOWN;
|
||||
}
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_RIGHT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_DOWN:
|
||||
if (target >= 6) {
|
||||
if (target < 8) {
|
||||
if (mIsSellBlocked) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
}
|
||||
} else if (target >= 10) {
|
||||
if (mIsSortBlocked) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
}
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_DOWN_LEFT:
|
||||
if (target == 0 || target == 11) {
|
||||
if (target == 11 && mIsSortBlocked) {
|
||||
direction = dPadNav::FS_STICK_LEFT;
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_DOWN;
|
||||
}
|
||||
} else if (target >= 6) {
|
||||
if (target <= 7) {
|
||||
if (mIsSellBlocked) {
|
||||
if (target == 6) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_LEFT;
|
||||
}
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_DOWN;
|
||||
}
|
||||
} else if (target == 11) {
|
||||
if (mIsSortBlocked) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_DOWN;
|
||||
}
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_LEFT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case dPadNav::FS_STICK_UP_LEFT:
|
||||
if (target == 6) {
|
||||
direction = dPadNav::FS_STICK_UP;
|
||||
} else if (target < 6) {
|
||||
if (target == 0) {
|
||||
direction = dPadNav::FS_STICK_NONE;
|
||||
} else if (target == 1) {
|
||||
direction = dPadNav::FS_STICK_LEFT;
|
||||
} else {
|
||||
direction = dPadNav::FS_STICK_UP;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return direction;
|
||||
}
|
||||
|
||||
s32 dLytDepositStock_c::getCurrentSlot() const {
|
||||
return mCurrentNavTarget + mItemPage * NUM_ICONS_PER_PAGE;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::setItem(s32 idx, s32 item) {
|
||||
mItemIds[idx] = item;
|
||||
realizeItem(idx);
|
||||
mIcons[idx].setOn();
|
||||
mPickedUpItemOnThisPage = false;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::realizeItem(s32 idx) {
|
||||
f32 frame = 0.0f;
|
||||
if (mItemIds[idx] != LYT_CMN_PouchBlank4) {
|
||||
frame = 1.0f;
|
||||
}
|
||||
loadIcon(idx);
|
||||
mIcons[idx].setVisible(true);
|
||||
s32 anmIdx = idx + DEPOSIT_STOCK_ANIM_HAVE_BOX_OFFSET;
|
||||
mAnm[anmIdx].setAnimEnable(true);
|
||||
mAnm[anmIdx].setFrame(frame);
|
||||
mLyt.calc();
|
||||
mAnm[anmIdx].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::selectNavTarget(s32 idx) {
|
||||
if (idx < NUM_ICONS_PER_PAGE) {
|
||||
if (mCurrentNavTarget >= 0) {
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setAnimEnable(true);
|
||||
}
|
||||
mCurrentNavTarget = idx;
|
||||
|
||||
if (mCurrentNavTarget >= 0) {
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setAnimEnable(true);
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[mCurrentNavTarget + DEPOSIT_STOCK_ANIM_FLASH_OFFSET].setAnimEnable(false);
|
||||
dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::pickUpOrPlaceItem(s32 slot, bool place) {
|
||||
s32 page = slot / NUM_ICONS_PER_PAGE;
|
||||
s32 idx = slot % NUM_ICONS_PER_PAGE;
|
||||
if (place) {
|
||||
mNodes[idx].mpPane->SetVisible(place);
|
||||
}
|
||||
|
||||
if (mItemPage != page) {
|
||||
if (place) {
|
||||
mPickedUpItemOnThisPage = false;
|
||||
}
|
||||
} else {
|
||||
s32 item = mItemIds[idx];
|
||||
f32 frame;
|
||||
if (place) {
|
||||
// TODO why LYT_CMN_PouchPotionHealthPlusPlusHalf
|
||||
if (item != LYT_CMN_PouchPotionHealthPlusPlusHalf && item != LYT_CMN_PouchBlank4) {
|
||||
frame = 1.0f;
|
||||
if (mPickedUpItemOnThisPage) {
|
||||
s32 otherIdx = mPickedUpIdx % NUM_ICONS_PER_PAGE;
|
||||
mIcons[idx].setItem(mItemIds[otherIdx]);
|
||||
mPickedUpItemOnThisPage = false;
|
||||
}
|
||||
} else {
|
||||
frame = 0.0f;
|
||||
}
|
||||
mPickedUpIdx = -1;
|
||||
} else {
|
||||
mPickedUpIdx = slot;
|
||||
frame = 0.0f;
|
||||
mPickedUpItemOnThisPage = true;
|
||||
mIcons[idx].setOff();
|
||||
mIcons[idx].setHasNumber(false);
|
||||
mIcons[idx].setItem(LYT_CMN_PouchBlank4);
|
||||
}
|
||||
|
||||
s32 anmIdx = idx + DEPOSIT_STOCK_ANIM_HAVE_BOX_OFFSET;
|
||||
mAnm[anmIdx].setAnimEnable(true);
|
||||
mAnm[anmIdx].setFrame(frame);
|
||||
mLyt.calc();
|
||||
mAnm[anmIdx].setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateToPouch() {
|
||||
mIsModePouch = true;
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateToSell() {
|
||||
if (!mIsModeSell) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SHOP_STK_POINT_SELL);
|
||||
}
|
||||
mIsModeSell = true;
|
||||
mNavMode = NAV_SELL;
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateToSort() {
|
||||
if (!mIsModeSort) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SHOP_STK_STOCK_POINT_TRIM);
|
||||
}
|
||||
mIsModeSort = true;
|
||||
mNavMode = NAV_SORT;
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateToFinish() {
|
||||
if (!mIsModeFinish) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SHOP_STK_POINT_DECIDE);
|
||||
}
|
||||
mIsModeFinish = true;
|
||||
mNavMode = NAV_FINISH;
|
||||
mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::saveArrowDirection() {
|
||||
mSavedArrowDirection = mArrowDirection;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateToArrow(s32 arrowDirection) {
|
||||
mArrowDirection = arrowDirection;
|
||||
if (mArrowDirection < dLytCommonArrow_c::ARROW_NONE) {
|
||||
mNavMode = NAV_ARROW;
|
||||
}
|
||||
}
|
||||
|
||||
s32 dLytDepositStock_c::restoreArrowDirection() {
|
||||
if (mSavedArrowDirection < dLytCommonArrow_c::ARROW_NONE && mArrowDirection >= dLytCommonArrow_c::ARROW_NONE) {
|
||||
navigateToArrow(mSavedArrowDirection);
|
||||
}
|
||||
return mArrowDirection;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::navigateToItem() {
|
||||
mNavMode = NAV_ITEM;
|
||||
}
|
||||
|
||||
void dLytDepositStock_c::handleSpecialNavMode() {
|
||||
switch (mNavMode) {
|
||||
case NAV_SELL: navigateToSell(); break;
|
||||
case NAV_SORT: navigateToSort(); break;
|
||||
case NAV_FINISH: navigateToFinish(); break;
|
||||
case NAV_ARROW:
|
||||
if (mArrowDirection < dLytCommonArrow_c::ARROW_NONE) {
|
||||
saveArrowDirection();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool dLytDepositStock_c::isNavModeItem() const {
|
||||
return mNavMode == NAV_ITEM;
|
||||
}
|
||||
@@ -290,7 +290,7 @@ void dLytPauseMain_c::executeState_Wait() {
|
||||
mRingToggleRequest = false;
|
||||
mStateMgr.changeState(StateID_Ring);
|
||||
}
|
||||
mpArrow->unk();
|
||||
mpArrow->setActiveArrow(mpArrow->getPointedAtArrow());
|
||||
}
|
||||
}
|
||||
void dLytPauseMain_c::finalizeState_Wait() {}
|
||||
@@ -874,7 +874,7 @@ nw4r::lyt::Bounding *dLytPauseMgr_c::getArrowBounding(int idx) const {
|
||||
}
|
||||
|
||||
void dLytPauseMgr_c::setSelectedArrowBounding(int idx) {
|
||||
mMain.getArrow()->setField_0x6B8(idx);
|
||||
mMain.getArrow()->setActiveArrow(idx);
|
||||
}
|
||||
|
||||
void dLytPauseMgr_c::setSelection(dLytPauseMgr_c::SelectionType_e type, u16 id, bool restricted) {
|
||||
@@ -957,8 +957,8 @@ bool dLytPauseMgr_c::checkChangeDisp() {
|
||||
}
|
||||
nav = true;
|
||||
}
|
||||
s32 arrowPane = mMain.getArrow()->getField_0x6B8();
|
||||
if (arrowPane != dLytCommonArrow_c::ARROW_NONE && dPad::getDownTrigA() && mMain.getArrow()->fn_80168760()) {
|
||||
s32 arrowPane = mMain.getArrow()->getActiveArrow();
|
||||
if (arrowPane != dLytCommonArrow_c::ARROW_NONE && dPad::getDownTrigA() && mMain.getArrow()->triggerArrowPress()) {
|
||||
if (arrowPane == dLytCommonArrow_c::ARROW_LEFT) {
|
||||
mIsNavLeft = true;
|
||||
} else {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "d/flag/itemflag_manager.h"
|
||||
#include "d/flag/storyflag_manager.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_arrow.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item_maps.h"
|
||||
#include "d/lyt/d_lyt_control_game.h"
|
||||
#include "d/lyt/d_lyt_pause.h"
|
||||
@@ -427,8 +428,8 @@ bool dLytPauseDisp00_c::build() {
|
||||
}
|
||||
}
|
||||
|
||||
mpBoundings[PAUSE_DISP_00_BOUNDING_ARROW_LEFT] = pauseMgr->getArrowBounding(0);
|
||||
mpBoundings[PAUSE_DISP_00_BOUNDING_ARROW_RIGHT] = pauseMgr->getArrowBounding(1);
|
||||
mpBoundings[PAUSE_DISP_00_BOUNDING_ARROW_LEFT] = pauseMgr->getArrowBounding(dLytCommonArrow_c::ARROW_LEFT);
|
||||
mpBoundings[PAUSE_DISP_00_BOUNDING_ARROW_RIGHT] = pauseMgr->getArrowBounding(dLytCommonArrow_c::ARROW_RIGHT);
|
||||
|
||||
u8 songLifetreeStatus = getSongLifeTreeStatus();
|
||||
if (songLifetreeStatus == SONG_LIFETREE_HAS_SOTH) {
|
||||
@@ -1252,6 +1253,7 @@ void dLytPauseDisp00_c::setupInventoryWheel() {
|
||||
}
|
||||
|
||||
u32 item = getPouchItemForSlot(i, true);
|
||||
// TODO why LYT_CMN_PouchPotionHealthPlusPlusHalf
|
||||
if (item != LYT_CMN_PouchPotionHealthPlusPlusHalf) {
|
||||
if (isPouchBocoburinLocked()) {
|
||||
icon->setBocoburinLocked(true);
|
||||
@@ -1259,7 +1261,7 @@ void dLytPauseDisp00_c::setupInventoryWheel() {
|
||||
}
|
||||
haveFrame = 1.0f;
|
||||
icon->setItem(item);
|
||||
f32 durability = getShieldDurability(i, true);
|
||||
f32 durability = getPouchShieldDurability(i, true);
|
||||
if (durability >= 0.0f) {
|
||||
icon->setShieldDurability(durability);
|
||||
}
|
||||
@@ -1575,6 +1577,7 @@ void dLytPauseDisp00_c::setupRingIcons(s32 tab) {
|
||||
s32 offset = PAUSE_DISP_00_BOUNDING_RING_OFFSET;
|
||||
for (int i = 0; i < PAUSE_DISP_00_ICONS_NUM_ITEMS_ON_WHEEL; i++) {
|
||||
bool visible = false;
|
||||
// TODO why LYT_CMN_PouchPotionHealthPlusPlusHalf
|
||||
if (getPouchItemForSlot(i, true) != LYT_CMN_PouchPotionHealthPlusPlusHalf) {
|
||||
visible = true;
|
||||
}
|
||||
@@ -2008,9 +2011,11 @@ bool dLytPauseDisp00_c::isPointingAtRingIcon() {
|
||||
nw4r::math::MTX34 mtx = mLyt.findPane("N_ringIcon_00")->GetGlobalMtx();
|
||||
nw4r::math::VEC3 v(0.0f, 0.0f, 0.0f);
|
||||
MTXMultVec(mtx, v, v);
|
||||
// TODO I hate vectors
|
||||
mVec2_c pos(v.x, v.y);
|
||||
if (pos.squareDistanceTo(csPos) < radiusSq) {
|
||||
// TODO maybe fake
|
||||
mVec2_c pos2 = mVec2_c(v.x, v.y);
|
||||
mVec2_c dist = pos2;
|
||||
dist -= csPos;
|
||||
if (dist.squaredLength() < radiusSq) {
|
||||
ret = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -339,8 +339,8 @@ void dLytMeterMinusBtn_c::initializeState_MenuSelectingIn() {
|
||||
mItemIcons[i].setItem(field_0x4E98[i]);
|
||||
}
|
||||
|
||||
if (getShieldDurability(i, true) >= 0.0f) {
|
||||
mItemIcons[i].setShieldDurability(getShieldDurability(i, true));
|
||||
if (getPouchShieldDurability(i, true) >= 0.0f) {
|
||||
mItemIcons[i].setShieldDurability(getPouchShieldDurability(i, true));
|
||||
if (i == convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot())) {
|
||||
mItemIcons[i].setShieldOnOff(false);
|
||||
} else {
|
||||
@@ -574,8 +574,8 @@ void dLytMeterMinusBtn_c::initializeState_DemoMove() {
|
||||
mItemIcons[i].setItem(field_0x4E98[i]);
|
||||
}
|
||||
|
||||
if (getShieldDurability(i, true) >= 0.0f) {
|
||||
mItemIcons[i].setShieldDurability(getShieldDurability(i, true));
|
||||
if (getPouchShieldDurability(i, true) >= 0.0f) {
|
||||
mItemIcons[i].setShieldDurability(getPouchShieldDurability(i, true));
|
||||
if (i == convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot())) {
|
||||
mItemIcons[i].setShieldOnOff(false);
|
||||
} else {
|
||||
@@ -1086,7 +1086,7 @@ void dLytMeterMinusBtn_c::setItemText(s32 item) {
|
||||
void dLytMeterMinusBtn_c::realizeShieldDurability() {
|
||||
for (int i = 0; i < MINUS_BTN_NUM_ITEMS; i++) {
|
||||
if (field_0x4EBB[i] != 0) {
|
||||
mItemIcons[i].setShieldDurability(getShieldDurability(i, true));
|
||||
mItemIcons[i].setShieldDurability(getPouchShieldDurability(i, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user