diff options
| author | robojumper <robojumper@gmail.com> | 2024-09-28 00:19:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-27 18:19:00 -0400 |
| commit | 3829ee6d4854a18bb6c19ffd1e250632946c0206 (patch) | |
| tree | 219ed1485d604a50bbb232bcd3e44d54dcaebdf6 /include/d/a/obj | |
| parent | 0f9ef3d33c5772d5240bfa1ff209d81abc934376 (diff) | |
Rough dynamic collision setup (#24)
* Rough collider shape setup
* d_a_obj_toD3_stone_figure OK
* Cleanup
* Cleanup 2
Diffstat (limited to 'include/d/a/obj')
| -rw-r--r-- | include/d/a/obj/d_a_obj_base.h | 14 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_spike.h | 38 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_toD3_stone_figure.h | 47 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_triforce.h | 43 |
4 files changed, 137 insertions, 5 deletions
diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h index a5a8666c..09467d6b 100644 --- a/include/d/a/obj/d_a_obj_base.h +++ b/include/d/a/obj/d_a_obj_base.h @@ -2,11 +2,14 @@ #define D_A_OBJ_BASE_H #include "d/a/d_a_base.h" +#include "m/m_angle.h" #include "m/m_mtx.h" #include "m/m3d/m_smdl.h" #include "m/m3d/m_shadow.h" +#include "m/m_vec.h" #include "m/types_m.h" #include "nw4r/g3d/g3d_resfile.h" +#include "toBeSorted/cc/d_cc_d.h" // Size: 0xA8 struct ActorCarryStruct { @@ -21,7 +24,7 @@ struct ActorCarryStruct { /* 0x58 */ mMtx_c field_0x58; /* 0x88 */ s32 isCarried; /* 0x8C */ u8 field_0x8C[0x10]; // mQuat_c - /* 0x9C */ void *dtor; // ??? + /* 0x9C */ void *dtor; // ??? /* 0xA0 */ u32 field_0xA0; /* 0xA4 */ u32 field_0xA4; @@ -57,11 +60,12 @@ public: /* 0x1A8 */ f32 field_0x1A8; /* 0x1AC */ u32 mObjectActorFlags; - u8 unk_0x1B0[0x1E8 - 0x1B0]; + u8 unk_0x1B0[0x1C0 - 0x1B0]; - /* 0x1E8 */ mVec3_c posIncrements; + /* 0x1C0 */ UnkCCDStruct mCCdStruct; - u8 unk_0x1F4[0x210 - 0x1F4]; + mVec3_c mStartingPos; + mAng3_c mStartingRot; /* 0x210 */ ActorCarryStruct mActorCarryInfo; @@ -136,7 +140,7 @@ protected: // Actors' createHeap functions often have patterns that can be matched with this macro #define TRY_CREATE(thing) do { bool result = (thing); if (!result) return result; } while (0) - +// Use this in actors' createHeap functions #define CREATE_ALLOCATOR(className) do { if (!initAllocatorWork1Heap(-1, #className "::m_allocator", 0x20)) { return FAILED; } } while (0) #endif diff --git a/include/d/a/obj/d_a_obj_spike.h b/include/d/a/obj/d_a_obj_spike.h new file mode 100644 index 00000000..779e8501 --- /dev/null +++ b/include/d/a/obj/d_a_obj_spike.h @@ -0,0 +1,38 @@ +#ifndef D_A_O_SPIKE_H +#define D_A_O_SPIKE_H + +#include <d/a/obj/d_a_obj_base.h> +#include <m/m3d/m_smdl.h> +#include <m/m_vec.h> +#include <nw4r/g3d/g3d_resfile.h> +#include <s/s_State.hpp> +#include <s/s_StateID.hpp> +#include <toBeSorted/cc/d_cc_shape_colliders.h> + + +class dAcOspike_c : public dAcObjBase_c { +public: + dAcOspike_c() : mStateMgr(*this, sStateID::null) {} + virtual ~dAcOspike_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int actorExecute() override; + virtual int draw() override; + virtual int doDelete() override; + + STATE_FUNC_DECLARE(dAcOspike_c, Wait); + + static const mVec3_c sVec1; + static const mVec3_c sVec2; + +private: + static dCcD_SrcAabb sCcSrc; + + nw4r::g3d::ResFile mResFile; + m3d::smdl_c mMdl; + dCcD_Aabb mCollision; + + STATE_MGR_DECLARE(dAcOspike_c); +}; + +#endif diff --git a/include/d/a/obj/d_a_obj_toD3_stone_figure.h b/include/d/a/obj/d_a_obj_toD3_stone_figure.h new file mode 100644 index 00000000..efbeab47 --- /dev/null +++ b/include/d/a/obj/d_a_obj_toD3_stone_figure.h @@ -0,0 +1,47 @@ +#ifndef D_A_O_TTOD3_STONE_FIGURE_H +#define D_A_O_TTOD3_STONE_FIGURE_H + +#include <c/c_math.h> +#include <d/a/obj/d_a_obj_base.h> +#include <m/m3d/m_smdl.h> +#include <nw4r/g3d/g3d_resfile.h> +#include <s/s_State.hpp> +#include <s/s_StateMgr.hpp> +#include <toBeSorted/cc/d_cc_shape_colliders.h> + + +class dAcOtoD3StoneFigure_c : public dAcObjBase_c { +public: + dAcOtoD3StoneFigure_c() : mStateMgr(*this, sStateID::null) {} + virtual ~dAcOtoD3StoneFigure_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int actorExecute() override; + virtual int draw() override; + virtual int doDelete() override; + virtual void doInteraction(s32) override; + + STATE_FUNC_DECLARE(dAcOtoD3StoneFigure_c, OneEye); + STATE_FUNC_DECLARE(dAcOtoD3StoneFigure_c, Eyes); + +private: + f32 getYPos() { + return position.y + sHeight; + } + + const char *getModelName() const; + bool isStoneOfTrialsPlaced() const; + bool hasStoneOfTrials() const; + static f32 sRadius; + static f32 sHeight; + static dCcD_SrcCyl sCcSrc; + + nw4r::g3d::ResFile mResFile; + m3d::smdl_c mMdl; + STATE_MGR_DECLARE(dAcOtoD3StoneFigure_c); + dCcD_Cyl mCollision; + s8 mExitId; + bool mIsSkyKeepAlreadyOpen; +}; + +#endif diff --git a/include/d/a/obj/d_a_obj_triforce.h b/include/d/a/obj/d_a_obj_triforce.h new file mode 100644 index 00000000..2b036536 --- /dev/null +++ b/include/d/a/obj/d_a_obj_triforce.h @@ -0,0 +1,43 @@ +#ifndef D_A_O_TRIFORCE_H +#define D_A_O_TRIFORCE_H + +#include <c/c_math.h> +#include <d/a/obj/d_a_obj_base.h> +#include <m/m3d/m_anmtexsrt.h> +#include <m/m3d/m_smdl.h> +#include <m/m_angle.h> +#include <nw4r/g3d/g3d_resfile.h> +#include <toBeSorted/cc/d_cc_shape_colliders.h> +#include <toBeSorted/effects_struct.h> + +class dAcOtriforce_c : public dAcObjBase_c { +public: + dAcOtriforce_c() {} + virtual ~dAcOtriforce_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int actorExecute() override; + virtual int draw() override; + virtual int doDelete() override; + +private: + f32 getBounceScalar() const { + int zero = 0; + return (23.0f + zero + -3.0f); + } + + static dCcD_SrcSph sCcSrc; + + static const f32 sScale; + static const f32 sAmpNeg; + static const u32 sStartingOffsetRange; + + nw4r::g3d::ResFile mResFile; + m3d::smdl_c mMdl; + dCcD_Sph mCollision; + EffectsStruct mEffects; + m3d::anmTexSrt_c mAnm; + mAng mStartingOffset; +}; + +#endif |
