summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-12-27 21:39:17 +0100
committerGitHub <noreply@github.com>2025-12-27 21:39:17 +0100
commitdf5bd1a7b50bf21f2ea9bd250a4f64053c0ac431 (patch)
tree1253d62065caf98b9270b91bd227f6e6dcc02823 /src
parent3754ad2e08d4f962f3d5f2933097db9154f1a0bc (diff)
parentb524551c43301f5022a1f8e3a0a6b5e7f40cc346 (diff)
Merge pull request #291 from robojumper/vec-functions
Consolidate certain coordinate conversions
Diffstat (limited to 'src')
-rw-r--r--src/REL/d/a/obj/d_a_obj_grave.cpp11
-rw-r--r--src/REL/d/a/obj/d_a_obj_ivy_rope.cpp22
-rw-r--r--src/REL/d/a/obj/d_a_obj_shed.cpp11
-rw-r--r--src/REL/d/a/obj/d_a_obj_warp_hole.cpp9
-rw-r--r--src/d/a/obj/d_a_obj_fairy.cpp14
-rw-r--r--src/d/lyt/d_lyt_map.cpp5
-rw-r--r--src/d/lyt/d_lyt_map_markers.cpp8
7 files changed, 18 insertions, 62 deletions
diff --git a/src/REL/d/a/obj/d_a_obj_grave.cpp b/src/REL/d/a/obj/d_a_obj_grave.cpp
index 89f2bd47..e2cfac2e 100644
--- a/src/REL/d/a/obj/d_a_obj_grave.cpp
+++ b/src/REL/d/a/obj/d_a_obj_grave.cpp
@@ -9,6 +9,7 @@
#include "d/col/cc/d_cc_s.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
+#include "d/d_vec.h"
#include "d/flag/sceneflag_manager.h"
#include "d/snd/d_snd_wzsound.h"
#include "f/f_base.h"
@@ -76,12 +77,6 @@ bool dAcOGrave_c::createHeap() {
return !mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale);
}
-// copy from d_a_obj_fairy - TODO move it to a shared file
-inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) {
- target.x += factor * rot.sin();
- target.z += factor * rot.cos();
-}
-
int dAcOGrave_c::create() {
mShouldGlow = getFromParams(0, 3) == 0;
mSceneflag = getFromParams(2, 0xFF);
@@ -103,7 +98,7 @@ int dAcOGrave_c::create() {
}
field_0x7F6 = false;
mOrigPos2 = mPosition;
- vecCylCalc(mOrigPos2, mRotation.y.mVal + 0x8000, dAcPy_c::sPushRelatedConstant);
+ getXZCirclePoint(mOrigPos2, mRotation.y.mVal + 0x8000, dAcPy_c::sPushRelatedConstant);
mPosition.set(mOrigPos2.x, mOrigPos2.y, mOrigPos2.z);
mOldPosition.set(mOrigPos2.x, mOrigPos2.y, mOrigPos2.z);
}
@@ -167,7 +162,7 @@ void dAcOGrave_c::executeState_Wait() {
s32 diff = getXZAngleToPlayer().absDiff(mRotation.y);
if (field_0x7F6) {
mOrigPos2 = mPosition;
- vecCylCalc(mOrigPos2, mAngle.y, dAcPy_c::sPushRelatedConstant);
+ getXZCirclePoint(mOrigPos2, mAngle.y, dAcPy_c::sPushRelatedConstant);
if ((mPush && (s16)diff < 0x2000) || (mPull && (s16)diff > 0x6000)) {
field_0x7F6 = false;
mStateMgr.changeState(StateID_Move);
diff --git a/src/REL/d/a/obj/d_a_obj_ivy_rope.cpp b/src/REL/d/a/obj/d_a_obj_ivy_rope.cpp
index bd426433..ecc294ed 100644
--- a/src/REL/d/a/obj/d_a_obj_ivy_rope.cpp
+++ b/src/REL/d/a/obj/d_a_obj_ivy_rope.cpp
@@ -8,6 +8,7 @@
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_lin.h"
#include "d/col/cc/d_cc_s.h"
+#include "d/d_vec.h"
#include "d/flag/sceneflag_manager.h"
#include "d/snd/d_snd_wzsound.h"
#include "egg/math/eggMath.h"
@@ -22,12 +23,6 @@
#include "s/s_Math.h"
#include "toBeSorted/attention.h"
-// TODO inline?
-inline void addAng(mVec3_c &pnt, const f32 step, const mAng &angle) {
- pnt.x += step * angle.sin();
- pnt.z += step * angle.cos();
-}
-
SPECIAL_ACTOR_PROFILE(OBJ_IVY_ROPE, dAcOivyRope_c, fProfile::OBJ_IVY_ROPE, 0x262, 0, 2);
STATE_DEFINE(dAcOivyRope_c, RopeWait);
@@ -570,8 +565,7 @@ void dAcOivyRope_c::fn_256_BE80() {
mPnts1[i].set(0.f, 0.f, 0.f);
- // inline is required
- addAng(mPnts1[i], step, angle);
+ getXZCirclePoint(mPnts1[i], angle, step);
}
}
}
@@ -590,14 +584,7 @@ void dAcOivyRope_c::fn_256_BFF0(int ang, f32 float0, f32 float1) {
mAng angle = f;
mPnts1[i].set(0.f, 0.f, 0.f);
-
- // inline is required
- addAng(mPnts1[i], step, angle);
- // mVec3_c &pnt = mPnts1[i];
- // f32 step1 = step;
- // pnt.x += step1 * angle.sin();
- // pnt.z += step1 * angle.cos();
-
+ getXZCirclePoint(mPnts1[i], angle, step);
mPnts1[i].y = float1;
}
}
@@ -860,8 +847,7 @@ void dAcOivyRope_c::fn_256_D3D0(mVec3_c &pOut1, mVec3_c &pOut2, s16 param2, bool
}
mVec3_c somevec(0.f, 0.f, 0.f);
- somevec.x += something * swingAngle.sin();
- somevec.z += something * swingAngle.cos();
+ getXZCirclePoint(somevec, swingAngle, something);
mVec3_c somevec2(0.f, -25.f, float0);
PSMTXMultVec(m, somevec, somevec2);
diff --git a/src/REL/d/a/obj/d_a_obj_shed.cpp b/src/REL/d/a/obj/d_a_obj_shed.cpp
index d23022d2..cb6df749 100644
--- a/src/REL/d/a/obj/d_a_obj_shed.cpp
+++ b/src/REL/d/a/obj/d_a_obj_shed.cpp
@@ -4,6 +4,7 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
+#include "d/d_vec.h"
#include "d/flag/sceneflag_manager.h"
#include "f/f_base.h"
#include "m/m_angle.h"
@@ -19,12 +20,6 @@ SPECIAL_ACTOR_PROFILE(OBJ_SHED, dAcOShed_c, fProfile::OBJ_SHED, 0x256, 0, 6);
STATE_DEFINE(dAcOShed_c, Wait);
STATE_DEFINE(dAcOShed_c, Move);
-// copy from d_a_obj_fairy - TODO move it to a shared file
-inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) {
- target.x += factor * rot.sin();
- target.z += factor * rot.cos();
-}
-
bool dAcOShed_c::createHeap() {
void *data = CurrentStageArcManager::GetInstance()->getData("g3d/stage.brres");
mResFile = nw4r::g3d::ResFile(data);
@@ -50,7 +45,7 @@ int dAcOShed_c::create() {
if (flag) {
mIsOpen = true;
mVec = mPosition;
- vecCylCalc(mVec, mRotation.y - 0x4000, 230.0f);
+ getXZCirclePoint(mVec, mRotation.y - 0x4000, 230.0f);
mPosition = mVec;
}
}
@@ -103,7 +98,7 @@ void dAcOShed_c::initializeState_Move() {
}
mAngle.y = mRotation.y + 0x4000;
mVec = mPosition;
- vecCylCalc(mVec, mAngle.y, 230.0f);
+ getXZCirclePoint(mVec, mAngle.y, 230.0f);
mMoveTimer = 0x3c;
}
diff --git a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp
index 93ecfcc6..73228b42 100644
--- a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp
+++ b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp
@@ -5,6 +5,7 @@
#include "d/a/npc/d_a_npc_talk_kensei.h"
#include "d/col/cc/d_cc_s.h"
#include "d/d_sc_game.h"
+#include "d/d_vec.h"
#include "d/snd/d_snd_wzsound.h"
#include "toBeSorted/event_manager.h"
@@ -63,12 +64,6 @@ int dAcOwarpHole_c::actorExecute() {
return SUCCEEDED;
}
-// copy from d_a_obj_fairy - TODO move it to a shared file
-inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) {
- target.x += factor * rot.sin();
- target.z += factor * rot.cos();
-}
-
int dAcOwarpHole_c::actorExecuteInEvent() {
mEff.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_914_, mWorldMtx, nullptr, nullptr);
holdSound(SE_WarpH_Wait);
@@ -85,7 +80,7 @@ int dAcOwarpHole_c::actorExecuteInEvent() {
if (advance) {
dAcPy_c *link = dAcPy_c::GetLinkM();
mLinkPos = link->mPosition;
- vecCylCalc(mLinkPos,cLib::targetAngleY(mPosition, link->mPosition), 330.0f);
+ getXZCirclePoint(mLinkPos,cLib::targetAngleY(mPosition, link->mPosition), 330.0f);
}
if (EventManager::isInEvent()) {
if (EventManager::isCurrentEvent("BeforeLastBossBattleChicken")) {
diff --git a/src/d/a/obj/d_a_obj_fairy.cpp b/src/d/a/obj/d_a_obj_fairy.cpp
index 22824411..adf76ac8 100644
--- a/src/d/a/obj/d_a_obj_fairy.cpp
+++ b/src/d/a/obj/d_a_obj_fairy.cpp
@@ -15,6 +15,7 @@
#include "d/col/cc/d_cc_s.h"
#include "d/d_player_act.h"
#include "d/d_stage_mgr.h"
+#include "d/d_vec.h"
#include "d/snd/d_snd_small_effect_mgr.h"
#include "d/snd/d_snd_wzsound.h"
#include "f/f_base.h"
@@ -56,8 +57,6 @@ STATE_DEFINE(dAcOFairy_c, Cure);
STATE_DEFINE(dAcOFairy_c, CureEnd);
STATE_DEFINE(dAcOFairy_c, CatchDemo);
-static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor);
-
bool dAcOFairy_c::createHeap() {
void *file = getOarcResFile("PutFairy");
TRY_CREATE(mModel.create(file, "PutFairy", "PutFairy_fly", &mAllocator, 0x120));
@@ -440,7 +439,7 @@ void dAcOFairy_c::executeState_CureStart() {
mCurePosition = link->mPosition;
mCurePosition.y += f;
- vecCylCalc(mCurePosition, mCureAngle, f);
+ getXZCirclePoint(mCurePosition, mCureAngle, f);
mAngle.y = getXZAngleToPlayer();
@@ -579,7 +578,7 @@ void dAcOFairy_c::calcCurePosition(const f32 &xzOffsetTarget, const f32 &yOffset
mCurePosition = link->mPosition;
mCurePosition.y += mCurePosYOffset;
- vecCylCalc(mCurePosition, mCureAngle, mCurePosXZOffset);
+ getXZCirclePoint(mCurePosition, mCureAngle, mCurePosXZOffset);
sLib::chase(&mCurePosXZOffset, xzOffsetTarget, mCurePosXZOffsetTarget / 10.0f);
sLib::chase(&mCurePosYOffset, yOffsetTarget, 2.0f);
@@ -628,10 +627,3 @@ bool dAcOFairy_c::isMovingAwayFromOrigY() const {
return (targetSpeedY >= 0.0f && mPosition.y - mOrigPosition.y > 0.0f) ||
(targetSpeedY <= 0.0f && mPosition.y - mOrigPosition.y < 0.0f);
}
-
-// This is a repeated calculation, it correctly flips the stack order of the casts,
-// and it avoids temporaries, so it's a pretty good inline candidate
-inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) {
- target.x += factor * rot.sin();
- target.z += factor * rot.cos();
-}
diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp
index 712de322..5d09b8a0 100644
--- a/src/d/lyt/d_lyt_map.cpp
+++ b/src/d/lyt/d_lyt_map.cpp
@@ -3,6 +3,7 @@
#define NEED_DIRECT_FRAMECTRL_ACCESS
#include "c/c_math.h"
+#include "d/d_vec.h"
#include "d/d_player_act.h"
#include "d/snd/d_snd_player_mgr.h"
#include "toBeSorted/minigame_mgr.h"
@@ -124,10 +125,6 @@ dLytMap_HIO_c::dLytMap_HIO_c() {
dLytMap_HIO_c::~dLytMap_HIO_c() {}
-inline mVec3_c vec2ToVec3XY(const mVec2_c &v) {
- return mVec3_c(v.x, v.y, 0.0f);
-}
-
void dMapFootPrintsQueue_c::init() {
int j = ARRAY_LENGTH(mEntries) - 1;
for (int i = 0; i < (int)ARRAY_LENGTH(mEntries); i++) {
diff --git a/src/d/lyt/d_lyt_map_markers.cpp b/src/d/lyt/d_lyt_map_markers.cpp
index 4cb3abc2..5d24a755 100644
--- a/src/d/lyt/d_lyt_map_markers.cpp
+++ b/src/d/lyt/d_lyt_map_markers.cpp
@@ -16,6 +16,7 @@
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/d_stage_mgr.h"
+#include "d/d_vec.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/lyt/d2d.h"
@@ -32,10 +33,6 @@
#include "sized_string.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
-inline mVec3_c vec2ToVec3XY(const mVec2_c &v) {
- return mVec3_c(v.x, v.y, 0.0f);
-}
-
static bool checkHasMap() {
return DungeonflagManager::sInstance->getCounterOrFlag(2, 8);
}
@@ -1038,8 +1035,7 @@ void dLytMapIcon01_c::draw() {
for (int i = 0; i < field_0x0E13; i++) {
if (mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->IsVisible()) {
v2 = mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].boundingPos;
- mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->SetTranslate(
- vec2ToVec3XY(v2 + field_0x0D40)
+ mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->SetTranslate(vec2ToVec3XY(v2 + field_0x0D40)
);
mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->CalculateMtx(mLyt.getDrawInfo());
mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->Draw(mLyt.getDrawInfo());