summaryrefslogtreecommitdiff
path: root/src/d/a/obj/d_a_obj_arrow.cpp
diff options
context:
space:
mode:
authorElijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>2024-11-01 17:07:16 -0400
committerGitHub <noreply@github.com>2024-11-01 17:07:16 -0400
commit8a3710824bf3acbe081cc942cc4fce0f695ba812 (patch)
tree815b01341348843aaa0cc4cd387c153f74258f07 /src/d/a/obj/d_a_obj_arrow.cpp
parent1d17e35316b4fe989eae438fe55df64647277107 (diff)
Updated CC collision (#80)
* c_cc_d soooo close * d_cc_shape_colliders -> d_cc_d * ported over changes from #43 * Oops, didnt save * use better collision functions in bombf * bombf fixes * bombf actorPostCreate matching * fix * small fix for cCcD_UnkAttr Set function * more cleanup(?) for c_cc_d * d_cc_mass_s OK * Initial d_cc_s setup * some easy funcs --------- Co-authored-by: robojumper <robojumper@gmail.com>
Diffstat (limited to 'src/d/a/obj/d_a_obj_arrow.cpp')
-rw-r--r--src/d/a/obj/d_a_obj_arrow.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/d/a/obj/d_a_obj_arrow.cpp b/src/d/a/obj/d_a_obj_arrow.cpp
new file mode 100644
index 00000000..bf3a7c44
--- /dev/null
+++ b/src/d/a/obj/d_a_obj_arrow.cpp
@@ -0,0 +1,131 @@
+#include "d/a/obj/d_a_obj_arrow.h"
+
+#include "c/c_math.h"
+#include "d/a/d_a_player.h"
+#include "d/col/c/c_cc_d.h"
+
+SPECIAL_ACTOR_PROFILE(ARROW, dAcArrow_c, fProfile::ARROW, 0x126, 0, 0x80);
+
+STATE_DEFINE(dAcArrow_c, Wait);
+STATE_DEFINE(dAcArrow_c, Move);
+STATE_DEFINE(dAcArrow_c, ActorStop);
+STATE_DEFINE(dAcArrow_c, BgStop);
+STATE_DEFINE(dAcArrow_c, Bound);
+
+// clang-format off
+
+cCcD_SrcGObj dAcArrow_c::sCcSrcInf = {
+
+ {0x2000, 0x8BB, 0x15000000, 0, 0, 0, 0, 0, 0},
+ {0xFEB75C7F, 0x210, 0, 0x407, 0, 0},
+ {0},
+};
+
+dCcD_SrcCps dAcArrow_c::sCc1 = {
+ dAcArrow_c::sCcSrcInf,
+ {5.0f},
+};
+
+const dCcD_SrcSph dAcArrow_c::sCc2 = {
+ {{0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0},
+ {0x2, 0x211, 0, 0x407, 0, 0},
+ {0xC28}},
+ {100.0f},
+};
+
+// clang-format on
+
+bool hitCallback(dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB) {
+ static_cast<dAcArrow_c *>(i_actorA)->hitCallback(i_objInfA, i_actorB, i_objInfB);
+ return true;
+}
+
+bool dAcArrow_c::createHeap() {
+ mResFile = getOarcResFile("Alink");
+ nw4r::g3d::ResMdl mdl(nullptr);
+ if ((mSubType & 0x10) != 0) {
+ mdl = mResFile.GetResMdl("EquipPachinkoBullet");
+ } else {
+ mdl = mResFile.GetResMdl("EquipArrow");
+ }
+ // ?
+ bool ok = mModel.create(mdl, &heap_allocator, 0x120);
+ if (!ok) {
+ ok = false;
+ }
+ return ok;
+}
+
+extern "C" void fn_8025E5E0(void *);
+
+int dAcArrow_c::create() {
+ mSubType = params & 0xFF;
+ CREATE_ALLOCATOR(dAcArrow_c);
+
+ field_0x67C |= 4;
+ mStts.SetRank(2);
+ mCcCps.Set(sCc1);
+ mCcCps.SetStts(mStts);
+ mCcCps.SetAtFlag(0x2000);
+ mCcCps.SetAtCallback(::hitCallback);
+ mCcSph.Set(sCc2);
+ mCcSph.SetStts(mStts);
+
+ if (mSubType == 0x11) {
+ mStateMgr.changeState(StateID_Move);
+ } else {
+ mStateMgr.changeState(StateID_Wait);
+ }
+
+ boundingBox.Set(mVec3_c(-6.0f, -6.0f, 0.0f), mVec3_c(6.0f, 6.0f, 110.0f));
+ field_0x684 = -1;
+ field_0x68A = 300;
+ f32 rnd = cM::rndF(20.0f);
+ field_0x688 = 50.0f - rnd;
+ field_0x6A8 = 80.0f;
+ mDespawnTimer = 10;
+ fn_8025E5E0(this);
+ return SUCCEEDED;
+}
+
+dAcArrow_c::~dAcArrow_c() {}
+
+void dAcArrow_c::hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB) {}
+
+int dAcArrow_c::doDelete() {
+ // TODO
+
+ return SUCCEEDED;
+}
+
+int dAcArrow_c::actorExecute() {
+ mStateMgr.executeState();
+
+ // TODO
+
+ return SUCCEEDED;
+}
+
+int dAcArrow_c::draw() {
+ return SUCCEEDED;
+}
+
+void dAcArrow_c::initializeState_Wait() {}
+void dAcArrow_c::executeState_Wait() {}
+void dAcArrow_c::finalizeState_Wait() {}
+
+void dAcArrow_c::initializeState_Move() {}
+void dAcArrow_c::executeState_Move() {}
+void dAcArrow_c::finalizeState_Move() {}
+
+void dAcArrow_c::initializeState_ActorStop() {}
+void dAcArrow_c::executeState_ActorStop() {}
+void dAcArrow_c::finalizeState_ActorStop() {}
+
+void dAcArrow_c::initializeState_BgStop() {}
+void dAcArrow_c::executeState_BgStop() {}
+void dAcArrow_c::finalizeState_BgStop() {}
+
+void dAcArrow_c::initializeState_Bound() {}
+void dAcArrow_c::executeState_Bound() {}
+void dAcArrow_c::finalizeState_Bound() {}