diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2024-10-16 09:00:47 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-16 09:00:47 -0400 |
| commit | b5aa43ff3780ad11350c3c2efc7a705280818f6c (patch) | |
| tree | 3a10d436d90a59fb4a4fc38cc4af0c5cbe29b923 /src/d/a/obj/d_a_obj_switch.cpp | |
| parent | ec4d28cd259fd1f452f716ca032d936a62f79393 (diff) | |
Misc Collision (#51)
* Initial Commit - Starting to translate from TP
* Collision Updates
* Actor Collision -> dBgW (DZB Collision)
* bg .text splits complete
* fix errors
* file organization
* missed files
* progress
* weee
* most of cM3dG
* Revert mAng change
* Progress
* Progress -> Need to update from main
* Fixup Merge
* d_bg_s symbols....
* TList Changes
* oops
* d_bg_s large progress
* d_bg_s_acch majority done
* d_bg_s_chk OK
* d_bg_s_gnd_chk OK
* d_bg_s_grp_pass_chk OK
* d_bg_lin_chk OK
* d_bg_s_poly_pass_chk OK
* d_bg_s_roof_chk and d_bg_s_sph_chk OK
* d_bg_s_spl_grp_chk OK
* d_bg_s_wtr_chk OK
* d_bg_w started
* d_bg_w_base OK
* name d_bg_w_kcol symbols
* d_bg_w_sv split/started
* most of d_bg_w_time
* stopping d_bg_w_kcol for now
* d_bg_w_sv OK
* work on d_bg_w_time
* revert TList to take offset arg
* fixup some compiler warnings
* set c_bg_w OK
* Update rel_sieve.py
* Remove TList Macros
* Bomb Header started
Diffstat (limited to 'src/d/a/obj/d_a_obj_switch.cpp')
| -rw-r--r-- | src/d/a/obj/d_a_obj_switch.cpp | 74 |
1 files changed, 38 insertions, 36 deletions
diff --git a/src/d/a/obj/d_a_obj_switch.cpp b/src/d/a/obj/d_a_obj_switch.cpp index 74d51d41..d514b3a5 100644 --- a/src/d/a/obj/d_a_obj_switch.cpp +++ b/src/d/a/obj/d_a_obj_switch.cpp @@ -1,6 +1,8 @@ #include <c/c_math.h> #include <d/a/d_a_player.h> #include <d/a/obj/d_a_obj_switch.h> +#include <d/col/bg/d_bg_s.h> +#include <d/col/bg/d_bg_w.h> #include <s/s_Math.h> #include <toBeSorted/sceneflag_manager.h> @@ -27,10 +29,10 @@ void dAcOswMdlCallback_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip *manip, n static bool isPushableBlock(dAcBase_c *actor) { return actor->isActorPlayer() || actor->profile_name == fProfile::OBJ_PUSH_BLOCK || - actor->profile_name == fProfile::OBJ_KIBAKO; + actor->profile_name == fProfile::OBJ_KIBAKO; } -void dAcOsw_c::interactCallback(void *unknown, dAcBase_c *actor, dAcObjBase_c *interactor) { +void dAcOsw_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *interactor) { if (!isPushableBlock(interactor)) { return; } @@ -38,20 +40,19 @@ void dAcOsw_c::interactCallback(void *unknown, dAcBase_c *actor, dAcObjBase_c *i dAcOsw_c *sw = static_cast<dAcOsw_c *>(actor); // halp - if (!(link == nullptr || - ((link->mActionFlags & 0x40000) == 0 && - (((link->someFlags_0x340 & 0x800000) == 0 || + if (!(link == nullptr || ((link->mActionFlags & 0x40000) == 0 && + (((link->someFlags_0x340 & 0x800000) == 0 || ((link->getCurrentCarriedActor() != nullptr && - link->getCurrentCarriedActor()->mActorCarryInfo.testCarryFlag(0x04)))))))) { + link->getCurrentCarriedActor()->mActorCarryInfo.testCarryFlag(0x04)))))))) { return; } if (interactor->mActorCarryInfo.isCarried != 1) { if (link == nullptr || (link->mActionFlags & 0xC70852) == 0) { if (!sw->someInteractCheck(link != nullptr)) { bool needsOnFlag = sw->mOnSceneFlag < 0xFF && - !SceneflagManager::sInstance->checkBoolFlag(sw->roomid, sw->mOnSceneFlag); + !SceneflagManager::sInstance->checkBoolFlag(sw->roomid, sw->mOnSceneFlag); if (!needsOnFlag && sw->mObjRef.get() == nullptr && link != nullptr && sw->field_0x5F1 == 0 && - sw->mStateMgr.isState(StateID_On)) { + sw->mStateMgr.isState(StateID_On)) { link->field_0x360 |= 0x8000; } } @@ -60,31 +61,32 @@ void dAcOsw_c::interactCallback(void *unknown, dAcBase_c *actor, dAcObjBase_c *i } } -extern "C" void fn_8033CE10(); - bool dAcOsw_c::createHeap() { nw4r::g3d::ResFile resFile = getOarcResFile(SWITCH_TYPES[mSwitchType]); nw4r::g3d::ResMdl resMdl = resFile.GetResMdl(SWITCH_TYPES[mSwitchType]); TRY_CREATE(mModel.create(resMdl, &heap_allocator, 0x20, 1, nullptr)); - field_0x5E8 = scale.x * - (resMdl.GetResNode("base").mNode.ref().FLOAT_0x50 - resMdl.GetResNode("base").mNode.ref().FLOAT_0x44); - void *dbzData = getOarcDZB(SWITCH_TYPES[mSwitchType], SWITCH_TYPES[mSwitchType]); - void *plcData = getOarcPLC(SWITCH_TYPES[mSwitchType], SWITCH_TYPES[mSwitchType]); - scale.set(1.0f, 0.8f, 1.0f); + field_0x5E8 = mScale.x * + (resMdl.GetResNode("base").mNode.ref().FLOAT_0x50 - resMdl.GetResNode("base").mNode.ref().FLOAT_0x44); + cBgD_t *dbzData = (cBgD_t *)getOarcDZB(SWITCH_TYPES[mSwitchType], SWITCH_TYPES[mSwitchType]); + PLC *plcData = (PLC *)getOarcPLC(SWITCH_TYPES[mSwitchType], SWITCH_TYPES[mSwitchType]); + mScale.set(1.0f, 0.8f, 1.0f); updateMatrix(); - field_0x5B8.set(worldMatrix); - mModel.setLocalMtx(worldMatrix); - return !mCollision.create(dbzData, plcData, true, field_0x5B8, scale, fn_8033CE10); + field_0x5B8.set(mWorldMtx); + mModel.setLocalMtx(mWorldMtx); + + bool set = mCollision.Set(dbzData, plcData, 1, &field_0x5B8, &mScale); + mCollision.SetCrrFunc(dBgS_MoveBGProc_TypicalRotY); + return !set; } int dAcOsw_c::actorCreate() { mSwitchType = params & 0xF; mOnSceneFlag = (params >> 0xE); CREATE_ALLOCATOR(dAcOsw_c); - mCollision.interactFunc = interactCallback; + mCollision.SetRideCallback(rideCallback); mModel.setCallback(&mButtonCtrl); - CollisionCheckContext::get()->registerActorBgCollision(mCollision, this); + dBgS::GetInstance()->Regist(&mCollision, this); mOffSceneFlag = (params >> 0x4); mCanBeSeen = ((params >> 0xC) & 3) == 0; nw4r::g3d::ResMdl resMdl = mModel.getResMdl(); @@ -107,10 +109,10 @@ int dAcOsw_c::actorPostCreate() { field_0x5A0.check(roomid, position, 0, 30.0f, 0.1f); if (field_0x5A0.field_0x00 <= 0.0f) { mHidden = true; - scale.set(0.0f, 0.0f, 0.0f); + mScale.set(0.0f, 0.0f, 0.0f); } else { mShown = true; - scale.set(1.0f, 1.0f, 1.0f); + mScale.set(1.0f, 1.0f, 1.0f); } } @@ -124,7 +126,7 @@ int dAcOsw_c::actorPostCreate() { } } } while (parent != nullptr); - mModel.setScale(scale); + mModel.setScale(mScale); return SUCCEEDED; } @@ -148,7 +150,7 @@ int dAcOsw_c::actorExecute() { if (mCanBeSeen) { field_0x5A0.check(roomid, position, 0, 30.0f, 0.1f); if (field_0x5A0.field_0x00 <= 0.0f) { - if (scale.x >= 1.0f) { + if (mScale.x >= 1.0f) { if (!mHidden) { fn_800298B0(PARTICLE_RESOURCE_ID_MAPPING_754_, &position, &rotation, 0, 0, 0, 0, 0); playSound(0xC0B); @@ -157,11 +159,11 @@ int dAcOsw_c::actorExecute() { } else { mHidden = false; } - sLib::chase(&scale.x, 0.0f, 0.07f); - scale.y = scale.x; - scale.z = scale.x; + sLib::chase(&mScale.x, 0.0f, 0.07f); + mScale.y = mScale.x; + mScale.z = mScale.x; } else { - if (scale.x <= 0.0f) { + if (mScale.x <= 0.0f) { if (!mShown) { fn_800298B0(PARTICLE_RESOURCE_ID_MAPPING_754_, &position, &rotation, 0, 0, 0, 0, 0); playSound(0xC0A); @@ -170,20 +172,20 @@ int dAcOsw_c::actorExecute() { } else { mShown = false; } - sLib::chase(&scale.x, 1.0f, 0.07f); - scale.z = scale.x; + sLib::chase(&mScale.x, 1.0f, 0.07f); + mScale.z = mScale.x; } } updateMatrix(); - field_0x5B8.set(worldMatrix); + field_0x5B8.set(mWorldMtx); mMtx_c tmp; PSMTXTrans(tmp, 0.0f, mButtonCtrl.mElevation, 0.0f); PSMTXConcat(field_0x5B8, tmp, field_0x5B8); - mModel.setScale(scale); - mModel.setLocalMtx(worldMatrix); + mModel.setScale(mScale); + mModel.setLocalMtx(mWorldMtx); mModel.calc(false); - mCollision.execute(); + mCollision.Move(); field_0x5F3 = 0; mActivatedByPlayer = 0; field_0x5F2 = field_0x5F1; @@ -212,7 +214,7 @@ void dAcOsw_c::initializeState_OnWait() { } } void dAcOsw_c::executeState_OnWait() { - sLib::chase(&scale.y, 0.8f, 0.12f); + sLib::chase(&mScale.y, 0.8f, 0.12f); if (field_0x5F1 != 0) { field_0x5F3 = 1; } @@ -282,7 +284,7 @@ void dAcOsw_c::executeState_Off() { void dAcOsw_c::finalizeState_Off() {} void dAcOsw_c::initializeState_None() { - scale.y = 0.8f; + mScale.y = 0.8f; mButtonCtrl.mElevation = -20.0f; } void dAcOsw_c::executeState_None() {} |
