diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-10-15 14:29:12 -0400 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-10-15 14:32:29 -0400 |
| commit | 8be39579f62ece80fd77dba4cf9714bea1f1d2b4 (patch) | |
| tree | 011fa175c687df99297dc743f9934bf1dac08033 /src | |
| parent | 7c9b59ffedcad3655f98b55898d5f980c86792d9 (diff) | |
dArea_c + various cleanups in passing
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/t/d_t_action.cpp | 17 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_beetle.cpp | 17 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_gate_to_ground.cpp | 31 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_heat_resist.cpp | 11 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_restart_time_stone.cpp | 5 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_scene_change.cpp | 9 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_stream.cpp | 3 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_sw_area.cpp | 53 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_time_door_beam.cpp | 9 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_touch.cpp | 6 | ||||
| -rw-r--r-- | src/d/d_area.cpp | 33 | ||||
| -rw-r--r-- | src/d/tg/d_t_alldie.cpp | 6 | ||||
| -rw-r--r-- | src/d/tg/d_t_event.cpp | 5 | ||||
| -rw-r--r-- | src/d/tg/d_t_event_f.cpp | 25 | ||||
| -rw-r--r-- | src/d/tg/d_t_view_clip.cpp | 5 |
15 files changed, 124 insertions, 111 deletions
diff --git a/src/REL/d/t/d_t_action.cpp b/src/REL/d/t/d_t_action.cpp index 5ea4bf52..a3abb492 100644 --- a/src/REL/d/t/d_t_action.cpp +++ b/src/REL/d/t/d_t_action.cpp @@ -7,15 +7,14 @@ #include "f/f_base.h" #include "f/f_profile_name.h" #include "m/m_angle.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(ACTION_TAG, dTgAction_c, fProfile::ACTION_TAG, 0x20, 0, 0); int dTgAction_c::create() { - mEnableFlag1 = (mParams >> 6) & 0xFF; - mEnableFlag2 = (mParams >> 14) & 0xFF; - mType = (mParams >> 0) & 0x3F; - matrixCreateFromPosRotYScale(mActiveMtx, mPosition, mRotation.y, mScale, nullptr, 0.f); + mEnableFlag1 = getFromParams(6, 0xFF); + mEnableFlag2 = getFromParams(14, 0xFF); + mType = getFromParams(0, 0x3F); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.f); return SUCCEEDED; } @@ -26,14 +25,14 @@ int dTgAction_c::doDelete() { void dTgAction_c::setActiveArea(f32 scale) { if (mScaleIncrease < 0.1f) { mScaleIncrease = scale; - matrixCreateFromPosRotYScale(mActiveMtx, mPosition, mRotation.y, mScale, nullptr, mScaleIncrease); + mArea.set(mPosition, mRotation.y, mScale, nullptr, mScaleIncrease); } } void dTgAction_c::resetActiveArea() { if (mScaleIncrease > 0.f) { mScaleIncrease = 0.f; - matrixCreateFromPosRotYScale(mActiveMtx, mPosition, mRotation.y, mScale, nullptr, 0.f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.f); field_0x134 = 0; } } @@ -51,7 +50,7 @@ int dTgAction_c::actorExecute() { break; } if (pObj->mProfileName == fProfile::BOMB) { - if (checkAreaBox(mActiveMtx, pObj->getPosition())) { + if (mArea.checkAreaBox(pObj->getPosition())) { reinterpret_cast<dAcBomb_c *>(pObj)->setFlag(dAcBomb_c::FLAG_0x20000000); } } @@ -59,7 +58,7 @@ int dTgAction_c::actorExecute() { } // Check For Player Within Area - if (enabled && checkAreaBox(mActiveMtx, player->getPosition())) { + if (enabled && mArea.checkAreaBox(player->getPosition())) { if (mType == FORCE_FADE_RESTART) { player->onFlags_0x358(0x10000000); setActiveArea(50.f); diff --git a/src/REL/d/t/d_t_beetle.cpp b/src/REL/d/t/d_t_beetle.cpp index 9ba5b33d..0e49a08f 100644 --- a/src/REL/d/t/d_t_beetle.cpp +++ b/src/REL/d/t/d_t_beetle.cpp @@ -5,7 +5,6 @@ #include "d/a/obj/d_a_obj_boomerang.h" #include "d/d_sc_game.h" #include "d/flag/sceneflag_manager.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/time_area_mgr.h" SPECIAL_ACTOR_PROFILE(BEETLE_TAG, dTgBeetle_c, fProfile::BEETLE_TAG, 0x297, 0, 0); @@ -14,7 +13,7 @@ extern const f32 unused_ = 0.0f; int dTgBeetle_c::create() { if (dScGame_c::currentSpawnInfo.stageName == "F103") { // flooded faron woods - if (mActorSubtype) { + if (mActorSubtype != 0) { mScale *= 0.01f; } // Haven't verfied but I think CO_TEST is an invisible sphere created around leaves @@ -23,7 +22,7 @@ int dTgBeetle_c::create() { return FAILED; } else { - if (!mActorSubtype) { // BtlTg + if (mActorSubtype == 0) { // BtlTg mZoneType = getFromParams(0, 0xF); mZoneShape = getFromParams(4, 0x3); mUnknown = getFromParams(6, 0xFF); @@ -39,7 +38,7 @@ int dTgBeetle_c::create() { mZoneShape = SphereShape; } } - matrixCreateFromPosRotYScale(mMatrix1, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); return SUCCEEDED; } } @@ -56,20 +55,18 @@ int dTgBeetle_c::actorExecute() { } if (!SceneflagManager::sInstance->checkBoolFlag(mRoomID, mBeetleFlag) || mActorSubtype) { - dAcBoomerang_c *beetlePtr = - (dAcBoomerang_c *)dAcPy_c::GetLink() - ->getBeetleInFlight(); // boomerang pointer cast required because function currently returns void* + dAcBoomerang_c *beetlePtr = static_cast<dAcBoomerang_c *>(dAcPy_c::GetLink()->getBeetleInFlight()); if (mZoneShape == RectangularPrismShape) { // rectangular prism - if (beetlePtr && checkAreaBox(mMatrix1, beetlePtr->mPosition)) { + if (beetlePtr && mArea.checkAreaBox(beetlePtr->mPosition)) { updateBeetle(*beetlePtr); } } else if (mZoneShape == CylinderShape) { // cylinder - if (beetlePtr && isWithinCylinder((beetlePtr->mPosition))) { + if (beetlePtr && isWithinCylinder(beetlePtr->mPosition)) { updateBeetle(*beetlePtr); } } else if (mZoneShape == SphereShape) { // sphere - if (beetlePtr && isWithinSphere((beetlePtr->mPosition))) { + if (beetlePtr && isWithinSphere(beetlePtr->mPosition)) { updateBeetle(*beetlePtr); } } diff --git a/src/REL/d/t/d_t_gate_to_ground.cpp b/src/REL/d/t/d_t_gate_to_ground.cpp index 4f0b47e1..26d679ea 100644 --- a/src/REL/d/t/d_t_gate_to_ground.cpp +++ b/src/REL/d/t/d_t_gate_to_ground.cpp @@ -7,15 +7,14 @@ #include "d/flag/storyflag_manager.h" #include "f/f_base.h" #include "toBeSorted/actor_event.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/event.h" SPECIAL_ACTOR_PROFILE(GATE2GND_TAG, dTgGateToGround_c, fProfile::GATE2GND_TAG, 0x22, 0, 0); int dTgGateToGround_c::create() { - matrixCreateFromPosRotYScale(matrix, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); - delayFrames = 0; + mDelayFrameCount = 0; union { u32 val; @@ -26,9 +25,9 @@ int dTgGateToGround_c::create() { }; } v; v.val = mParams; - params_FF_FF_00_00 = v.a; - params_00_00_FF_00 = v.b; - params_00_00_00_FF = v.c; + mStoryflag = v.a; + field_0x182 = v.b; + mCameraID = v.c; return SUCCEEDED; } @@ -38,31 +37,29 @@ int dTgGateToGround_c::doDelete() { } int dTgGateToGround_c::actorExecute() { - dAcPy_c *player; - - if (params_FF_FF_00_00 != -1 && StoryflagManager::sInstance->getCounterOrFlag(params_FF_FF_00_00) == 0) { + if (mStoryflag != -1 && StoryflagManager::sInstance->getCounterOrFlag(mStoryflag) == 0) { return SUCCEEDED; } - player = dAcPy_c::LINK; + dAcPy_c *player = dAcPy_c::GetLinkM(); - if (checkAreaBox(matrix, player->mPosition)) { + if (mArea.checkAreaBox(player->mPosition)) { if (player->getRidingActorType() != dAcPy_c::RIDING_LOFTWING) { - if (delayFrames > 15) { + if (mDelayFrameCount > 15) { Event e("CloudHole", 100, 0, nullptr, nullptr); mEventRelated.scheduleEvent(e, 0); } else { - delayFrames++; + mDelayFrameCount++; } } else { - if (params_00_00_00_FF != -1) { + if (mCameraID != -1) { // TODO Cast is maybe fake but I can't get overrideCam to match otherwise - dScGame_c::getCamera(0)->getGameCam1()->overrideCam(params_00_00_00_FF, 0, (u16)mRoomID, false); + dScGame_c::getCamera(0)->getGameCam1()->overrideCam(mCameraID, 0, (u16)mRoomID, false); } - delayFrames = 0; + mDelayFrameCount = 0; } } else { - delayFrames = 0; + mDelayFrameCount = 0; } return SUCCEEDED; diff --git a/src/REL/d/t/d_t_heat_resist.cpp b/src/REL/d/t/d_t_heat_resist.cpp index 045cce17..2bdc802d 100644 --- a/src/REL/d/t/d_t_heat_resist.cpp +++ b/src/REL/d/t/d_t_heat_resist.cpp @@ -2,14 +2,13 @@ #include "d/a/d_a_player.h" #include "f/f_base.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(TAG_HEAT_RESIST, dTgHeatResist_c, fProfile::TAG_HEAT_RESIST, 0x223, 0, 4); int dTgHeatResist_c::create() { - mInverted = static_cast<u8>(mParams & 0x3); + mInverted = getFromParams(0, 0x3); - matrixCreateFromPosRotYScale(matrix, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); return SUCCEEDED; } @@ -18,14 +17,14 @@ int dTgHeatResist_c::doDelete() { } int dTgHeatResist_c::actorExecute() { - dAcPy_c *player = dAcPy_c::LINK; + dAcPy_c *player = dAcPy_c::GetLinkM(); if (mInverted == 1) { - if (!checkAreaBox(matrix, player->mPosition)) { + if (!mArea.checkAreaBox(player->mPosition)) { player->onForceOrPreventActionFlags(0x8000000); } } else { - if (checkAreaBox(matrix, player->mPosition)) { + if (mArea.checkAreaBox(player->mPosition)) { player->onForceOrPreventActionFlags(0x8000000); } } diff --git a/src/REL/d/t/d_t_restart_time_stone.cpp b/src/REL/d/t/d_t_restart_time_stone.cpp index 118f4986..94e1c1f4 100644 --- a/src/REL/d/t/d_t_restart_time_stone.cpp +++ b/src/REL/d/t/d_t_restart_time_stone.cpp @@ -1,16 +1,15 @@ #include "d/t/d_t_restart_time_stone.h" #include "f/f_base.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/d_path.h" SPECIAL_ACTOR_PROFILE(TAG_RESTART_TIME_STONE, dTgRestartTimeStone_c, fProfile::TAG_RESTART_TIME_STONE, 0x29A, 0, 0); int dTgRestartTimeStone_c::create() { - matrixCreateFromPosRotYScale(mMtx, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); ActorOnRail3 rail; - u8 pathIdx = mParams & 0xFF; + u8 pathIdx = getFromParams(0, 0xFF); if (pathIdx != 0xFF) { rail.init(pathIdx, mRoomID, 0, 0, false); mPathStartPos.copyFrom(rail.getPath().getPoint(0)); diff --git a/src/REL/d/t/d_t_scene_change.cpp b/src/REL/d/t/d_t_scene_change.cpp index 972d2406..35c05fa4 100644 --- a/src/REL/d/t/d_t_scene_change.cpp +++ b/src/REL/d/t/d_t_scene_change.cpp @@ -10,7 +10,6 @@ #include "f/f_profile_name.h" #include "m/m_angle.h" #include "m/m_vec.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/d_path.h" #include "toBeSorted/event.h" #include "toBeSorted/event_manager.h" @@ -31,7 +30,7 @@ int dTgSceneChange_c::create() { mEnableSceneflag = getFromParams(24, 0xFF); mEnableStoryflag = (mRotation.x >> 0) & 0x7FF; - field_0x134 = ((mRotation.x >> 11) & 0x3) == 1; + mbAreaCyl = ((mRotation.x >> 11) & 0x3) == 1; mRotation.x = 0; mDisableStoryflag = mRotation.z & 0x7FF; @@ -39,7 +38,7 @@ int dTgSceneChange_c::create() { mRotation.z = 0; - matrixCreateFromPosRotYScale(mArea, mPosition, mRotation.y, mScale, nullptr, 0.f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.f); return SUCCEEDED; } @@ -71,8 +70,8 @@ int dTgSceneChange_c::actorExecute() { } dAcPy_c *pPlayer = dAcPy_c::GetLinkM(); - if ((field_0x134 && checkAreaCyl(mArea, pPlayer->mPosition)) || - (!field_0x134 && checkAreaBox(mArea, pPlayer->mPosition))) { + if ((mbAreaCyl && mArea.checkAreaCyl(pPlayer->mPosition)) || + (!mbAreaCyl && mArea.checkAreaBox(pPlayer->mPosition))) { if (!(field_0x136 && checkScrapper())) { pPlayer->triggerExitRelated(mSceneLink, mPathId, mSceneType); } diff --git a/src/REL/d/t/d_t_stream.cpp b/src/REL/d/t/d_t_stream.cpp index 80990f61..5d4d0e92 100644 --- a/src/REL/d/t/d_t_stream.cpp +++ b/src/REL/d/t/d_t_stream.cpp @@ -3,7 +3,6 @@ #include "d/a/d_a_base.h" #include "f/f_base.h" #include "f/f_list_mg.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(TAG_STREAM, dTgStream_c, fProfile::TAG_STREAM, 0x29D, 0, 0); @@ -47,7 +46,7 @@ int dTgStream_c::create() { addToList(sStreamList); } - matrixCreateFromPosRotYScale(mArea, mPosition, mRotation.y, mScale, nullptr, 0.f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.f); return SUCCEEDED; } diff --git a/src/REL/d/t/d_t_sw_area.cpp b/src/REL/d/t/d_t_sw_area.cpp index cc9cbee1..da503d9f 100644 --- a/src/REL/d/t/d_t_sw_area.cpp +++ b/src/REL/d/t/d_t_sw_area.cpp @@ -3,21 +3,20 @@ #include "d/a/d_a_player.h" #include "d/flag/sceneflag_manager.h" #include "d/flag/storyflag_manager.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(SW_AREA_TAG, dTgSwArea_c, fProfile::SW_AREA_TAG, 0x292, 0, 0); int dTgSwArea_c::create() { - setSceneflag = getSetSceneflag(); - unsetSceneflag = getUnsetSceneflag(); - isTemporary = !getIsPersistent(); + mSetSceneflag = getFromParams(0, 0xFF); + mUnsetSceneflag = getFromParams(8, 0xFF); + mbTemporary = !getFromParams(16, 0x1); - setStoryflag = getSetStoryflag(); - unsetStoryflag = getUnsetStoryflag(); + mSetStoryflag = mRotation.x & 0x7FF; + mUnsetStoryflag = mRotation.z & 0x7FF; mRotation.x = 0; mRotation.z = 0; - matrixCreateFromPosRotYScale(area, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); return SUCCEEDED; } @@ -32,38 +31,38 @@ bool isValidStoryFlag(u16 storyflag) { } int dTgSwArea_c::actorExecute() { - if (checkAreaBox(area, dAcPy_c::LINK->mPosition)) { - SceneflagManager::sInstance->setFlag(mRoomID, setSceneflag); - SceneflagManager::sInstance->unsetFlag(mRoomID, unsetSceneflag); + if (mArea.checkAreaBox(dAcPy_c::GetLink()->mPosition)) { + SceneflagManager::sInstance->setFlag(mRoomID, mSetSceneflag); + SceneflagManager::sInstance->unsetFlag(mRoomID, mUnsetSceneflag); - if (isValidStoryFlag(setStoryflag)) { - StoryflagManager::sInstance->setFlag(setStoryflag); + if (isValidStoryFlag(mSetStoryflag)) { + StoryflagManager::sInstance->setFlag(mSetStoryflag); } - if (isValidStoryFlag(unsetStoryflag)) { - StoryflagManager::sInstance->unsetFlag(unsetStoryflag); + if (isValidStoryFlag(mUnsetStoryflag)) { + StoryflagManager::sInstance->unsetFlag(mUnsetStoryflag); } - if (scale < 1.0f) { - scale = 50.0f; - matrixCreateFromPosRotYScale(area, mPosition, mRotation.y, mScale, nullptr, scale); + if (mScaleModify < 1.0f) { + mScaleModify = 50.0f; + mArea.set(mPosition, mRotation.y, mScale, nullptr, mScaleModify); } } else { - if (scale > 1.0f) { - scale = 0.0f; - matrixCreateFromPosRotYScale(area, mPosition, mRotation.y, mScale, nullptr, scale); + if (mScaleModify > 1.0f) { + mScaleModify = 0.0f; + mArea.set(mPosition, mRotation.y, mScale, nullptr, mScaleModify); } - if (isTemporary) { - SceneflagManager::sInstance->unsetFlag(mRoomID, setSceneflag); - SceneflagManager::sInstance->setFlag(mRoomID, unsetSceneflag); + if (mbTemporary) { + SceneflagManager::sInstance->unsetFlag(mRoomID, mSetSceneflag); + SceneflagManager::sInstance->setFlag(mRoomID, mUnsetSceneflag); - if (isValidStoryFlag(setStoryflag)) { - StoryflagManager::sInstance->unsetFlag(setStoryflag); + if (isValidStoryFlag(mSetStoryflag)) { + StoryflagManager::sInstance->unsetFlag(mSetStoryflag); } - if (isValidStoryFlag(unsetStoryflag)) { - StoryflagManager::sInstance->setFlag(unsetStoryflag); + if (isValidStoryFlag(mUnsetStoryflag)) { + StoryflagManager::sInstance->setFlag(mUnsetStoryflag); } } } diff --git a/src/REL/d/t/d_t_time_door_beam.cpp b/src/REL/d/t/d_t_time_door_beam.cpp index bc9b2aa6..a33aa523 100644 --- a/src/REL/d/t/d_t_time_door_beam.cpp +++ b/src/REL/d/t/d_t_time_door_beam.cpp @@ -1,12 +1,11 @@ #include "d/t/d_t_time_door_beam.h" #include "d/a/d_a_player.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(TAG_TIME_DOOR_BEAM, dTgTimeDoorBeam_c, fProfile::TAG_TIME_DOOR_BEAM, 0x252, 0, 0); int dTgTimeDoorBeam_c::create() { - matrixCreateFromPosRotYScale(matrix, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); return SUCCEEDED; } @@ -22,10 +21,10 @@ int dTgTimeDoorBeam_c::draw() { return SUCCEEDED; } -bool dTgTimeDoorBeam_c::checkPlayerPosInMtx() { - if (dAcPy_c::LINK == nullptr) { +bool dTgTimeDoorBeam_c::isPlayerInArea() { + if (dAcPy_c::GetLink() == nullptr) { return false; } - return checkAreaBox(matrix, dAcPy_c::LINK->mPosition); + return mArea.checkAreaBox(dAcPy_c::GetLink()->mPosition); } diff --git a/src/REL/d/t/d_t_touch.cpp b/src/REL/d/t/d_t_touch.cpp index 99b46ad2..208564fc 100644 --- a/src/REL/d/t/d_t_touch.cpp +++ b/src/REL/d/t/d_t_touch.cpp @@ -1,9 +1,7 @@ #include "d/t/d_t_touch.h" -#include "c/c_math.h" #include "d/flag/sceneflag_manager.h" #include "s/s_Math.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(TOUCH_TAG, dTgTouchTag, fProfile::TOUCH_TAG, 0x028E, 0, 0); @@ -18,7 +16,7 @@ int dTgTouchTag::create() { mActivatorIndex = !(getActivatorIndex() == 0xF) ? getActivatorIndex() : 0; mZoneFlag = getZoneFlag(); mChkFlag = getChkFlag(); - matrixCreateFromPosRotYScale(mAreaOfEffect, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mAreaOfEffect.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); mStateMgr.changeState(StateID_Wait); return SUCCEEDED; } @@ -48,7 +46,7 @@ void dTgTouchTag::executeState_Wait() { dAcBase_c *actor = static_cast<dAcBase_c *>(fManager_c::searchBaseByProfName(ACTIVATORS[mActivatorIndex], nullptr)); while (actor != nullptr) { - if (actor->mRoomID == mRoomID && checkAreaBox(mAreaOfEffect, actor->mPosition)) { + if (actor->mRoomID == mRoomID && mAreaOfEffect.checkAreaBox(actor->mPosition)) { mFlagTimer = 5; if (mZoneFlag != 0xFF) { SceneflagManager::sInstance->setFlag(mRoomID, mZoneFlag); diff --git a/src/d/d_area.cpp b/src/d/d_area.cpp new file mode 100644 index 00000000..6e9929fa --- /dev/null +++ b/src/d/d_area.cpp @@ -0,0 +1,33 @@ +#include "d/d_area.h" + +#include "common.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "rvl/MTX/mtx.h" + +void dArea_c::set(const mVec3_c &position, const mAng rotY, const mVec3_c &scale, mMtx_c *pSrc, f32 scaleTerm) { + mMtx_c src; + if (pSrc == nullptr) { + pSrc = &src; + } + pSrc->transS(position.x, position.y + scale.y * 0.5f, position.z); + pSrc->YrotM(rotY); + pSrc->scaleM(scale.x + scaleTerm, scale.y + scaleTerm, scale.z + scaleTerm); + mArea.copyFrom(*pSrc); + MTXInverse(mArea, mArea); +} + +bool dArea_c::checkAreaBox(const mVec3_c &position) { + mVec3_c pos; + mArea.multVec(position, pos); + return (-0.5f <= pos.x && pos.x <= 0.5f) && // + (-0.5f <= pos.y && pos.y <= 0.5f) && // + (-0.5f <= pos.z && pos.z <= 0.5f); +} + +bool dArea_c::checkAreaCyl(const mVec3_c &position) { + mVec3_c pos; + mArea.multVec(position, pos); + return (-0.5f <= pos.y && pos.y <= 0.5f) && // + pos.squareMagXZ() <= 1.0f; +} diff --git a/src/d/tg/d_t_alldie.cpp b/src/d/tg/d_t_alldie.cpp index a205ce09..f3bb8610 100644 --- a/src/d/tg/d_t_alldie.cpp +++ b/src/d/tg/d_t_alldie.cpp @@ -3,14 +3,12 @@ #include "common.h" #include "d/a/d_a_player.h" #include "d/a/e/d_a_en_base.h" -#include "d/a/obj/d_a_obj_base.h" #include "d/d_stage.h" #include "d/flag/sceneflag_manager.h" #include "f/f_base.h" #include "f/f_manager.h" #include "f/f_profile_name.h" #include "s/s_Math.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/event_manager.h" SPECIAL_ACTOR_PROFILE(ALLDIE_TAG, dTgAllDie_c, fProfile::ALLDIE_TAG, 0x23, 0, 4); @@ -22,7 +20,7 @@ int dTgAllDie_c::create() { field_0x148 = 0; field_0x144 = getFromParams(30, 0xFF); mRotation.x.set(0); - matrixCreateFromPosRotYScale(mArea, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); return SUCCEEDED; } @@ -55,7 +53,7 @@ int dTgAllDie_c::actorExecute() { while ((pEnemy = dAcEnBase_c::GetNextEnemy(pEnemy))) { if (pEnemy->mRoomID == mRoomID && !pEnemy->checkInteractionFlags(0x2)) { if (pEnemy->checkProcControl(DISABLE_EXECUTE) == 0 && pEnemy->mLifecycleState != TO_BE_DELETED) { - if (checkAreaBox(mArea, pEnemy->mPosition)) { + if (mArea.checkAreaBox(pEnemy->mPosition)) { mNumEnemiesInArea++; } } diff --git a/src/d/tg/d_t_event.cpp b/src/d/tg/d_t_event.cpp index add4cac5..41091907 100644 --- a/src/d/tg/d_t_event.cpp +++ b/src/d/tg/d_t_event.cpp @@ -3,13 +3,12 @@ #include "d/a/d_a_player.h" #include "d/flag/sceneflag_manager.h" #include "f/f_base.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/event.h" SPECIAL_ACTOR_PROFILE(EVENT_TAG, dTgEvent_c, fProfile::EVENT_TAG, 0X13, 0, 0); int dTgEvent_c::create() { - matrixCreateFromPosRotYScale(mMatrix, mPosition, mRotation.y, mScale, 0x0, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, 0x0, 0.0f); mEventId = getFromParams(0, 0xFF); mSetSceneflag = getFromParams(8, 0xFF); mTrigSceneflag = getFromParams(16, 0xFF); @@ -42,7 +41,7 @@ int dTgEvent_c::actorExecute() { if (!isValidFlag(mTrigSceneflag) || checkUncommittedFlag(mTrigSceneflag)) { if ((mSubtype != 0 && !(isValidFlag(mSetSceneflag) && checkUncommittedFlag(mSetSceneflag))) || (mSubtype == 0 && (isValidFlag(mSetSceneflag) && checkUncommittedFlag(mSetSceneflag)))) { - if (checkAreaBox(mMatrix, dAcPy_c::LINK->mPosition)) { + if (mArea.checkAreaBox(dAcPy_c::GetLink()->mPosition)) { Event EStack_48 = Event(mEventId, mRoomID, fun(mUnkParamFlag, 0x1), 0, 0); mActorEvent.scheduleEvent(EStack_48, 0); } diff --git a/src/d/tg/d_t_event_f.cpp b/src/d/tg/d_t_event_f.cpp index 3300eda0..17457f87 100644 --- a/src/d/tg/d_t_event_f.cpp +++ b/src/d/tg/d_t_event_f.cpp @@ -3,20 +3,19 @@ #include "d/a/d_a_player.h" #include "d/flag/storyflag_manager.h" #include "f/f_base.h" -#include "toBeSorted/area_math.h" SPECIAL_ACTOR_PROFILE(EVENTF_TAG, dTgEventF_c, fProfile::EVENTF_TAG, 0x14, 0, 0); int dTgEventF_c::create() { - matrixCreateFromPosRotYScale(mMatrix, mPosition, mRotation.y, mScale, 0x0, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, 0x0, 0.0f); mEventId = getFromParams(0, 0xFF); mSetStoryflag = getFromParams(8, 0x7FF); - if ((s32)mSetStoryflag == 0x3FF) { - mSetStoryflag = 0xFFFFFFFF; + if (mSetStoryflag == 0x3FF) { + mSetStoryflag = -1; } mTrigStoryflag = getFromParams(19, 0x7FF); - if ((s32)mTrigStoryflag == 0x3FF) { - mTrigStoryflag = 0xFFFFFFFF; + if (mTrigStoryflag == 0x3FF) { + mTrigStoryflag = -1; } mSubtype = getFromParams(30, 0x3); return SUCCEEDED; @@ -26,19 +25,19 @@ int dTgEventF_c::doDelete() { return SUCCEEDED; } -int dTgEventF_c::checkStoryflagValid(u32 counterIdx) { +int dTgEventF_c::checkStoryflagValid(s32 counterIdx) { return StoryflagManager::sInstance->checkFlagValid(counterIdx); } -bool dTgEventF_c::checkUncommitedStoryFlagValue(u32 flag) { +bool dTgEventF_c::checkUncommitedStoryFlagValue(s32 flag) { return StoryflagManager::sInstance->getUncommittedValue(flag); } -void dTgEventF_c::setStoryFlag(StoryFlags_e flag) { +void dTgEventF_c::setStoryFlag(s32 flag) { StoryflagManager::sInstance->setFlag(flag); } -void dTgEventF_c::unsetStoryFlag(StoryFlags_e flag) { +void dTgEventF_c::unsetStoryFlag(s32 flag) { StoryflagManager::sInstance->unsetFlag(flag); } @@ -46,7 +45,7 @@ int dTgEventF_c::actorExecute() { if ((!checkStoryflagValid(mTrigStoryflag) || checkUncommitedStoryFlagValue(mTrigStoryflag))) { if ((mSubtype != 0 && !(checkStoryflagValid(mSetStoryflag) && checkUncommitedStoryFlagValue(mSetStoryflag))) || (mSubtype == 0 && checkStoryflagValid(mSetStoryflag) && checkUncommitedStoryFlagValue(mSetStoryflag))) { - if (checkAreaBox(mMatrix, dAcPy_c::LINK->mPosition)) { + if (mArea.checkAreaBox(dAcPy_c::GetLink()->mPosition)) { Event EStack_48 = Event(mEventId, (int)mRoomID, 0x100001, 0, 0); mActorEvent.scheduleEvent(EStack_48, 0); } @@ -58,10 +57,10 @@ int dTgEventF_c::actorExecuteInEvent() { if (mActorEvent.isThisActorInEvent()) { mActorEvent.advanceNext(); if (!(mSubtype == 0 || !checkStoryflagValid(mSetStoryflag) || checkUncommitedStoryFlagValue(mSetStoryflag))) { - setStoryFlag((StoryFlags_e)mSetStoryflag); + setStoryFlag(mSetStoryflag); } else if ((mSubtype == 0 && checkStoryflagValid(mSetStoryflag)) && checkUncommitedStoryFlagValue(mSetStoryflag)) { - unsetStoryFlag((StoryFlags_e)mSetStoryflag); + unsetStoryFlag(mSetStoryflag); } } return SUCCEEDED; diff --git a/src/d/tg/d_t_view_clip.cpp b/src/d/tg/d_t_view_clip.cpp index 30ef9cba..c88f80b1 100644 --- a/src/d/tg/d_t_view_clip.cpp +++ b/src/d/tg/d_t_view_clip.cpp @@ -4,7 +4,6 @@ #include "d/d_camera.h" #include "d/d_sc_game.h" #include "f/f_base.h" -#include "toBeSorted/area_math.h" #include "toBeSorted/area_utils.h" SPECIAL_ACTOR_PROFILE(VIEW_CLIP_TAG, dTgViewClip_c, fProfile::VIEW_CLIP_TAG, 0xB, 0, 0); @@ -19,7 +18,7 @@ int dTgViewClip_c::create() { } mAreaIndex = getFromParams(12, 0xFF); - matrixCreateFromPosRotYScale(mArea, mPosition, mRotation.y, mScale, nullptr, 0.0f); + mArea.set(mPosition, mRotation.y, mScale, nullptr, 0.0f); return SUCCEEDED; } @@ -34,7 +33,7 @@ int dTgViewClip_c::actorExecute() { int dTgViewClip_c::draw() { dCamera_c *pCamera = dScGame_c::getCamera(); - if (!checkAreaBox(mArea, pCamera->getPosition())) { + if (!mArea.checkAreaBox(pCamera->getPosition())) { if (mAreaIndex == 0xFF) { return SUCCEEDED; } |
