diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2024-11-01 17:07:16 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-01 17:07:16 -0400 |
| commit | 8a3710824bf3acbe081cc942cc4fce0f695ba812 (patch) | |
| tree | 815b01341348843aaa0cc4cd387c153f74258f07 /src/d/a/obj/d_a_obj_arrow.cpp | |
| parent | 1d17e35316b4fe989eae438fe55df64647277107 (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.cpp | 131 |
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() {} |
