diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-10-19 13:13:46 -0400 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-10-19 13:13:46 -0400 |
| commit | ffe45f52ac6f4e1bccf0ed306c2d870e5fdee9cb (patch) | |
| tree | 1c3374a59ed1193a1cbdb5264bf8848fbdc58499 /include/d | |
| parent | 5633a09e0223ddcea4fd0bb2cc79a126d3816182 (diff) | |
| parent | d418bd839cd6cc8f98c0c7976d006159e9e6ee28 (diff) | |
Merge remote-tracking branch 'upstream/HEAD' into bases
Diffstat (limited to 'include/d')
| -rw-r--r-- | include/d/a/obj/d_a_obj_D3_dummy.h | 12 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_control_panel.h | 125 | ||||
| -rw-r--r-- | include/d/lyt/msg_window/d_lyt_msg_window.h | 4 |
3 files changed, 138 insertions, 3 deletions
diff --git a/include/d/a/obj/d_a_obj_D3_dummy.h b/include/d/a/obj/d_a_obj_D3_dummy.h index 6038bd67..48892644 100644 --- a/include/d/a/obj/d_a_obj_D3_dummy.h +++ b/include/d/a/obj/d_a_obj_D3_dummy.h @@ -2,6 +2,7 @@ #define D_A_OBJ_D3_DUMMY_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" #include "s/s_State.hpp" class dAcOD3Dummy_c : public dAcObjBase_c { @@ -11,8 +12,17 @@ public: STATE_FUNC_DECLARE(dAcOD3Dummy_c, Wait); + void setField_0x1570(u8 val) { + field_0x1570 = val; + } + private: - /* 0x??? */ STATE_MGR_DECLARE(dAcOD3Dummy_c); + /* 0x0330 */ dBgW field_330[8]; + /* 0x13B0 */ u8 unk[0x180]; + /* 0x1530 */ STATE_MGR_DECLARE(dAcOD3Dummy_c); + /* 0x156C */ u8 field_0x156C[4]; + /* 0x1570 */ u8 field_0x1570; + /* 0x1571 */ u8 field_0x1571[0xB]; }; #endif diff --git a/include/d/a/obj/d_a_obj_control_panel.h b/include/d/a/obj/d_a_obj_control_panel.h index 4427b2c5..7f32a5c8 100644 --- a/include/d/a/obj/d_a_obj_control_panel.h +++ b/include/d/a/obj/d_a_obj_control_panel.h @@ -1,20 +1,141 @@ #ifndef D_A_OBJ_CONTROL_PANEL_H #define D_A_OBJ_CONTROL_PANEL_H +#include "c/c_lib.h" +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/a/obj/d_a_obj_D3_dummy.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" +#include "d/d_message.h" +#include "d/flag/sceneflag_manager.h" +#include "m/m3d/m_mdl.h" +#include "m/m3d/m_smdl.h" +#include "m/m_color.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_State.hpp" +#include "toBeSorted/actor_event.h" +#include "toBeSorted/d_flow_mgr.h" class dAcOCtrlPnl_c : public dAcObjBase_c { + class callback_c : public m3d::callback_c { + public: + void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override; + void setPosAndScale(int tileId, const mVec3_c &vec, f32 f) { + mTilePositions[tileId] = vec; + mTileScales[tileId] = f; + } + void setNodeID(int i, s32 nodeID) { + mTileNodeIDs[i] = nodeID; + } + + private: + /* 0x00 */ mVec3_c mTilePositions[8]; + /* 0x20 */ f32 mTileScales[8]; + /* 0x40 */ s32 mTileNodeIDs[8]; + }; + friend class callback_c; + struct Spot { + /* 0x00 */ Spot *mNeighbors[4]; + /* 0x10 */ u8 mSpot; + /* 0x11 */ u8 mCurrentTile; + + Spot *getNeighbor(s32 direction) { + return mNeighbors[direction]; + } + }; + public: - dAcOCtrlPnl_c() : mStateMgr(*this) {} + dAcOCtrlPnl_c() : mStateMgr(*this), mEvent(*this, nullptr), mFlowMgr(&mFlow) {} virtual ~dAcOCtrlPnl_c() {} + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; + virtual int actorCreate() override; + virtual int actorPostCreate() override; + virtual int actorExecute() override; + virtual void doInteraction(s32 /* InteractionType */) override; + + void updatePuzzleFromFile(); + void savePuzzleState(); + bool handleSlidingTile(); + void setupNeighbors(); + void updateTileScales(); + bool hasAdjacentEmptySpot(s32); + bool getAdjacentEmptySpot(s32, s32 *); + void handleEvent(); + void handleControl(); + void updateDoorSceneflags(); + u8 getSpotForCursor(mVec2_c &); + u8 getMoveDirection(s32, s32); + void setTileID(u32, u32); + u8 getTileID(u32); + void resetPuzzleState(); + void updateTilePositions(); + void updateSpotTilesFromPuzzle(); + void getScreenCenter(mVec3_c &); + void setLinkVisibility(bool); + void updateTileColors(); + void afterControlPanel(); + void afterControlPanelFirst(); + void enterMove(); + void finishMove(); + bool changedPuzzle(); + bool isFirstTime(); + + bool doChaseTilePosToTarget() { + return cLib::chasePos(mTilePositions[mMovingTile], mGrabTargetPosition, 10.f) > 0; + } + + void setSceneflag(u8 flag) { + SceneflagManager::sInstance->setFlag(mRoomID, flag); + } + + void unsetSceneflag(u8 flag) { + SceneflagManager::sInstance->unsetFlag(mRoomID, flag); + } STATE_FUNC_DECLARE(dAcOCtrlPnl_c, Wait); STATE_FUNC_DECLARE(dAcOCtrlPnl_c, Control); STATE_FUNC_DECLARE(dAcOCtrlPnl_c, EndEvent); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcOCtrlPnl_c); + /* 0x330 */ nw4r::g3d::ResFile mRes; + /* 0x334 */ m3d::mdl_c mModel; + /* 0x358 */ mVec3_c mTilePositions[8]; + /* 0x3B8 */ STATE_MGR_DECLARE(dAcOCtrlPnl_c); + /* 0x3F4 */ ActorEventRelated mEvent; + /* 0x444 */ mVec3_c mGrabTargetPosition; + /* 0x450 */ s32 mMovingTile; + /* 0x454 */ dBgW mBgW; + /* 0x664 */ s32 mCurrentlyHoveredTile; + /* 0x668 */ s32 mCurrentlyHoveredSpot; + /** The spots where tiles can be, in the following order: + * 0 | 1 | 2 + * ---+---+--- + * 3 | 4 | 5 + * ---+---+--- + * 6 | 7 | 8 + */ + /* 0x66C */ Spot mSpots[9]; + /* 0x720 */ dAcRef_c<dAcOD3Dummy_c> mD3DummyRef; + /* 0x72C */ bool mIsGrabbing; + /* 0x72D */ u8 mGrabTargetMoveDirection; + /* 0x72E */ u8 mGrabTargetSpot; + /* 0x730 */ mVec2_c mGrabStartCursorPos; + /* 0x738 */ bool mHasMovedATile; + /* 0x739 */ bool mLeavePuzzle; + /* 0x73C */ dFlow_c mFlow; + /* 0x7A0 */ dFlowMgrBase_c mFlowMgr; + /* 0x7F8 */ u8 mSkykeepPuzzle[9]; + /* 0x801 */ u8 mSkykeepPuzzleOriginal[9]; + /* 0x80C */ callback_c mCallback; + /* 0x8B0 */ f32 mTileScales[8]; + /* 0x8D0 */ s32 mTilePlateMatIDs[8]; + /* 0x8F0 */ s32 mTriforceMatIDs[3]; + /* 0x8FC */ mColor mNormalPlateColor; + /* 0x900 */ s32 mTimer; }; #endif diff --git a/include/d/lyt/msg_window/d_lyt_msg_window.h b/include/d/lyt/msg_window/d_lyt_msg_window.h index d3cb9ae3..a9d2b9b2 100644 --- a/include/d/lyt/msg_window/d_lyt_msg_window.h +++ b/include/d/lyt/msg_window/d_lyt_msg_window.h @@ -126,6 +126,10 @@ public: mValidChangeBtnMask |= flag; } + static void setFlowMgr(dFlowMgrBase_c *flowMgr) { + sFlowMgr = flowMgr; + } + private: bool setTextToDisplay(const wchar_t *text); void createSubMsgManager(u8 type); |
