summaryrefslogtreecommitdiff
path: root/src/d/a/obj/d_a_obj_switch.cpp
diff options
context:
space:
mode:
authorElijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>2024-10-16 09:00:47 -0400
committerGitHub <noreply@github.com>2024-10-16 09:00:47 -0400
commitb5aa43ff3780ad11350c3c2efc7a705280818f6c (patch)
tree3a10d436d90a59fb4a4fc38cc4af0c5cbe29b923 /src/d/a/obj/d_a_obj_switch.cpp
parentec4d28cd259fd1f452f716ca032d936a62f79393 (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.cpp74
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() {}