summaryrefslogtreecommitdiff
path: root/src/REL/d/a/obj/d_a_obj_spike.cpp
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2024-09-28 00:19:00 +0200
committerGitHub <noreply@github.com>2024-09-27 18:19:00 -0400
commit3829ee6d4854a18bb6c19ffd1e250632946c0206 (patch)
tree219ed1485d604a50bbb232bcd3e44d54dcaebdf6 /src/REL/d/a/obj/d_a_obj_spike.cpp
parent0f9ef3d33c5772d5240bfa1ff209d81abc934376 (diff)
Rough dynamic collision setup (#24)
* Rough collider shape setup * d_a_obj_toD3_stone_figure OK * Cleanup * Cleanup 2
Diffstat (limited to 'src/REL/d/a/obj/d_a_obj_spike.cpp')
-rw-r--r--src/REL/d/a/obj/d_a_obj_spike.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/REL/d/a/obj/d_a_obj_spike.cpp b/src/REL/d/a/obj/d_a_obj_spike.cpp
index e69de29b..baabdf99 100644
--- a/src/REL/d/a/obj/d_a_obj_spike.cpp
+++ b/src/REL/d/a/obj/d_a_obj_spike.cpp
@@ -0,0 +1,88 @@
+#include <d/a/obj/d_a_obj_spike.h>
+#include <toBeSorted/cc/d_cc_mgr.h>
+
+SPECIAL_ACTOR_PROFILE(OBJ_SPIKE, dAcOspike_c, fProfile::OBJ_SPIKE, 0x1D9, 0, 2);
+
+// clang-format off
+dCcD_SrcAabb dAcOspike_c::sCcSrc = {
+ {{{0x400}, 0x2003F, 0, 1, 0, 0, 0, 0, 0},
+ {{0xFEB77DFF}, 0x111, 0x60407, 0, 0},
+ {0}},
+ {-1.0f, -246.0f, -472.0f, 73.0f, 255.0f, 482.0f}};
+// clang-format on
+
+const mVec3_c dAcOspike_c::sVec1 = mVec3_c(-1.0f, -246.0f, -472.0f);
+const mVec3_c dAcOspike_c::sVec2 = mVec3_c(73.0f, 255.0f, 482.0f);
+
+STATE_DEFINE(dAcOspike_c, Wait);
+
+bool dAcOspike_c::createHeap() {
+ mResFile = getOarcResFile("SpikeD101");
+ nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("SpikeD101");
+ TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+ return true;
+}
+
+int dAcOspike_c::create() {
+ if (!initAllocatorWork1Heap(-1, "dAcOspike_c::m_allocator", 0x20)) {
+ return FAILED;
+ }
+
+ mCCdStruct.setField0x38ToMagicValue();
+ mCollision.init(sCcSrc);
+ mCollision.initUnk(mCCdStruct);
+
+ updateMatrix();
+ mMdl.setLocalMtx(worldMatrix);
+ mVec3_c tmp;
+ PSMTXMultVecSR(worldMatrix.m, mVec3_c::Ex, tmp);
+ mCollision.setAtVec(tmp);
+
+ mMtx_c mtx;
+ mtx.XrotS(rotation.x);
+ mtx.ZrotM(rotation.z);
+ mVec3_c tmp2, tmp3;
+ PSMTXMultVecSR(mtx.m, sVec1, tmp2);
+ PSMTXMultVecSR(mtx.m, sVec2, tmp3);
+
+ if (tmp2.x > tmp3.x) {
+ f32 copy = tmp2.x;
+ tmp2.x = tmp3.x;
+ tmp3.x = copy;
+ }
+ if (tmp2.y > tmp3.y) {
+ f32 copy = tmp2.y;
+ tmp2.y = tmp3.y;
+ tmp3.y = copy;
+ }
+ if (tmp2.z > tmp3.z) {
+ f32 copy = tmp2.z;
+ tmp2.z = tmp3.z;
+ tmp3.z = copy;
+ }
+
+ mCollision.setMinMax(tmp2, tmp3);
+ mStateMgr.changeState(StateID_Wait);
+ setBoundingBox(mVec3_c(-10.0f, -250.0f, -480.0f), mVec3_c(80.0f, 260.0f, 490.0f));
+ return SUCCEEDED;
+}
+
+int dAcOspike_c::doDelete() {
+ return 1;
+}
+
+int dAcOspike_c::actorExecute() {
+ mStateMgr.executeState();
+ mCollision.setWithYRot(position, rotation.y);
+ ColliderManager::getColliderManager()->addCollider(&mCollision);
+ return 1;
+}
+
+int dAcOspike_c::draw() {
+ drawModelType1(&mMdl);
+ return 1;
+}
+
+void dAcOspike_c::initializeState_Wait() {}
+void dAcOspike_c::executeState_Wait() {}
+void dAcOspike_c::finalizeState_Wait() {}