diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2025-05-25 15:51:35 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-25 15:51:35 -0400 |
| commit | fd7d30d32283d03a412e8c401d04418351cf686a (patch) | |
| tree | e88bed25f474f06552cd7a7ea7067a0beead4414 /include/d/d_linkage.h | |
| parent | 018ef1971cd53aa8e78154789bcf6cac2f19b603 (diff) | |
d_linkage is largely done (#176)
Diffstat (limited to 'include/d/d_linkage.h')
| -rw-r--r-- | include/d/d_linkage.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/include/d/d_linkage.h b/include/d/d_linkage.h new file mode 100644 index 00000000..fd6fcc39 --- /dev/null +++ b/include/d/d_linkage.h @@ -0,0 +1,106 @@ +#ifndef D_LINKAGE_H +#define D_LINKAGE_H + +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/d_jnt_col.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" + +class dAcObjBase_c; +class dBgS_Acch; + +// Previously Known as `ActorCarryStruct` +// Size: 0xA8 +class dLinkage_c { +public: + dLinkage_c(); + +public: + enum ConnectionType_e { + CONNECTION_0 = 0, + CONNECTION_1 = 1, + CONNECTION_2 = 2, + CONNECTION_3 = 3, + CONNECTION_4 = 4, + CONNECTION_5 = 5, + CONNECTION_6 = 6, + CONNECTION_7 = 7, + CONNECTION_8 = 8, + CONNECTION_9 = 9, + }; + enum State_e { + STATE_0 = 0, + STATE_ACTIVE = 1, + STATE_2 = 2, // Hold? + STATE_3 = 3, // Roll? + STATE_DELETE = 4, + }; + enum Flag_e { + }; + +public: + void onFlag(u32 flag) { + carryFlags |= flag; + } + void offFlag(u32 flag) { + carryFlags &= ~flag; + } + bool checkFlag(u32 flag) const { + return (carryFlags & flag) != 0; + } + + // Int Required on return -> will use enum when possible + int getState() const { + return mState; + } + + bool checkState(State_e state) const { + return mState == state; + } + + bool checkType_1_3_5_6_9() const { + return mType == CONNECTION_1 || mType == CONNECTION_3 || mType == CONNECTION_5 || mType == CONNECTION_6 || + mType == CONNECTION_9; + } + + bool checkConnection(ConnectionType_e type) const { + return (checkState(STATE_ACTIVE) && mType == type); + } + +public: + void set(u32 flags, f32, f32, f32, void *unk); + bool tryAttach(dAcObjBase_c *, dAcObjBase_c *, dAcRefBase_c *, ConnectionType_e, bool); + void fn_80050DC0(dAcObjBase_c *, f32, f32, mAng); + void fn_80050E00(dAcObjBase_c *, f32, f32, mAng); + void fn_80050E40(dAcObjBase_c *, f32, f32, mAng); + void fn_80050EA0(dAcObjBase_c *); + void fn_800511E0(dAcObjBase_c *); + void bushTpFunc(dBgS_Acch &); + void fn_80051190(dAcObjBase_c *); + void fn_80050EB0(dAcObjBase_c *); + bool fn_800513C0() const; + +public: + /* 0x00 */ dAcRefBase_c mControllingActor; + /* 0x0C */ dAcRefBase_c *pLinkedActor; + /* 0x10 */ u32 carryFlags; + /* 0x14 */ ConnectionType_e mType; + /* 0x18 */ u16 field_0x18; + /* 0x1A */ u16 field_0x1A; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ mMtx_c carryTransMtx; + /* 0x58 */ mMtx_c field_0x58; + /* 0x88 */ State_e mState; + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ f32 field_0x98; + /* 0x9C vt*/ virtual ~dLinkage_c(); // usually i would like functions sepearte, but this is the placement. + /* 0xA0 */ dJntCol_c *field_0xA0; + /* 0xA4 */ u32 field_0xA4; +}; + +#endif |
