mirror of
https://github.com/zeldaret/tww.git
synced 2026-09-06 18:51:02 -04:00
96347ab502
* Add angle conversion constants and macros * Replace angle literals with hex instead of decimal
384 lines
9.5 KiB
C++
384 lines
9.5 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_cam_param.cpp
|
|
//
|
|
|
|
#include "d/dolzel.h" // IWYU pragma: keep
|
|
#include "d/d_cam_param.h"
|
|
#include "d/d_kankyo_wether.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
|
|
/* 800AF384-800AF4F4 .text rationalBezierRatio__8dCamMathFff */
|
|
f32 dCamMath::rationalBezierRatio(f32 param_0, f32 param_1) {
|
|
f64 sp68;
|
|
|
|
if (param_0 >= 0.0f) {
|
|
sp68 = 1.0;
|
|
} else {
|
|
sp68 = -1.0;
|
|
param_0 = -param_0;
|
|
}
|
|
|
|
f64 sp60 = 2.0 * param_0;
|
|
f64 sp58 = 2.0 * param_1;
|
|
f64 sp50 = sp60 * param_1;
|
|
f64 var_f31 = sp50 - sp60 - sp58;
|
|
f64 sp48 = -var_f31 - 1.0;
|
|
f64 sp40 = param_0;
|
|
f64 sp38 = (var_f31 * var_f31) - (4.0 * sp48 * sp40);
|
|
|
|
f64 sp30 = -var_f31 - (sp38 > 0.0 ? sqrt(sp38) : 0.0);
|
|
f64 sp28 = sp48 * 2.0;
|
|
if (sp28 > 1e-07 || sp28 < -1e-07) {
|
|
f64 var_f30 = sp30 / sp28;
|
|
f64 sp20 = var_f30 * var_f30;
|
|
f64 sp18 = 1.0 - var_f30;
|
|
f64 sp10 = sp20 + ((sp18 * sp18) + (param_1 * (2.0 * sp18 * var_f30)));
|
|
|
|
if (sp10 > 1e-07f) {
|
|
return sp68 * (sp20 / sp10);
|
|
}
|
|
return 0.0f;
|
|
} else {
|
|
return 0.0f;
|
|
}
|
|
}
|
|
|
|
/* 800AF4F4-800AF544 .text customRBRatio__8dCamMathFff */
|
|
f32 dCamMath::customRBRatio(f32 x, f32 y) {
|
|
if (x > M_SQRT1_2) {
|
|
if (x < 0.0f) {
|
|
return -1.0f;
|
|
} else {
|
|
return 1.0f;
|
|
}
|
|
}
|
|
|
|
return rationalBezierRatio(x * M_SQRT2, y);
|
|
}
|
|
|
|
/* 800AF544-800AF5A0 .text zoomFovy__8dCamMathFff */
|
|
f32 dCamMath::zoomFovy(f32 deg, f32 y) {
|
|
cDegree d(deg);
|
|
return cAngle::r2d(cM_atan2f(d.Sin(), d.Cos() * y));
|
|
}
|
|
|
|
/* 800AF5A0-800AF608 .text xyzRotateX__8dCamMathFR4cXyz7cSAngle */
|
|
cXyz dCamMath::xyzRotateX(cXyz& vec, cSAngle angle) {
|
|
cXyz ret;
|
|
Mtx mtx;
|
|
cMtx_XrotS(mtx, angle.Val());
|
|
cMtx_multVec(mtx, &vec, &ret);
|
|
return ret;
|
|
}
|
|
|
|
/* 800AF608-800AF670 .text xyzRotateY__8dCamMathFR4cXyz7cSAngle */
|
|
cXyz dCamMath::xyzRotateY(cXyz& vec, cSAngle angle) {
|
|
cXyz ret;
|
|
Mtx mtx;
|
|
cMtx_YrotS(mtx, angle.Val());
|
|
cMtx_multVec(mtx, &vec, &ret);
|
|
return ret;
|
|
}
|
|
|
|
/* 800AF670-800AF734 .text xyzHorizontalDistance__8dCamMathFR4cXyzR4cXyz */
|
|
f32 dCamMath::xyzHorizontalDistance(cXyz& a, cXyz& b) {
|
|
f64 x = a.x - b.x;
|
|
f64 z = a.z - b.z;
|
|
f64 distSq = x*x + z*z;
|
|
return sqrt(distSq);
|
|
}
|
|
|
|
/* 800AF734-800AF810 .text xyzProjPosOnYZ__8dCamMathF7cSAngleR4cXyzR4cXyz */
|
|
cXyz dCamMath::xyzProjPosOnYZ(cSAngle angle, cXyz& a, cXyz& b) {
|
|
cXyz line;
|
|
cXyz rot;
|
|
|
|
line = b - a;
|
|
rot = xyzRotateY(line, -angle);
|
|
rot.x = 0.0f;
|
|
line = xyzRotateY(rot, angle);
|
|
|
|
return a + line;
|
|
}
|
|
|
|
/* 800AF810-800AF838 .text __ct__9dCstick_cFv */
|
|
dCstick_c::dCstick_c() {
|
|
m00 = 0.2f;
|
|
m04 = 0.95f;
|
|
m08 = 6;
|
|
}
|
|
|
|
/* 800AF838-800AF840 .text Shift__9dCstick_cFUl */
|
|
s32 dCstick_c::Shift(u32) {
|
|
return 0;
|
|
}
|
|
|
|
/* 800AF840-800AF8F4 .text __ct__11dCamBGChk_cFv */
|
|
dCamBGChk_c::dCamBGChk_c() {
|
|
mFloorMargin = 32.0f;
|
|
|
|
mChkInfo[0].mDistance = 1.0f;
|
|
mChkInfo[0].mChkAngle = 25.0f;
|
|
mChkInfo[0].mWeightH = 0.4f;
|
|
mChkInfo[0].mWeightL = 0.8f;
|
|
|
|
mChkInfo[1].mDistance = 3.0f;
|
|
mChkInfo[1].mChkAngle = 15.0f;
|
|
mChkInfo[1].mWeightH = 0.5f;
|
|
mChkInfo[1].mWeightL = 0.3f;
|
|
|
|
mFwdBackMargin = 10.0f;
|
|
mFwdCushion = 0.1f;
|
|
m2C = 0.2f;
|
|
mGazeBackMargin = 10.0f;
|
|
mCornerCushion = 0.75f;
|
|
mWallCushion = 0.25f;
|
|
mWallUpDistance = 80.0f;
|
|
mWallBackCushion = 0.08f;
|
|
mCornerAngleMax = 120.0f;
|
|
m48 = 300.0f;
|
|
m4C = 80.0f;
|
|
m50 = 0.25f;
|
|
m54 = 0.25f;
|
|
m5C = 70.0f;
|
|
m58 = 90.0f;
|
|
}
|
|
|
|
static f32 dummy() {
|
|
return DEG2S_CONSTANT;
|
|
}
|
|
|
|
/* 800AF8F4-800AF930 .text __ct__11dCamParam_cFl */
|
|
dCamParam_c::dCamParam_c(s32 styleIdx) {
|
|
Change(styleIdx);
|
|
}
|
|
|
|
/* 800AF930-800AF978 .text __dt__11dCamParam_cFv */
|
|
dCamParam_c::~dCamParam_c() {
|
|
}
|
|
|
|
/* 800AF978-800AF9BC .text Change__11dCamParam_cFl */
|
|
BOOL dCamParam_c::Change(s32 i_styleIdx) {
|
|
mStyleIdx = i_styleIdx;
|
|
if (i_styleIdx < style_num) {
|
|
mpStyle = &styles[mStyleIdx];
|
|
return TRUE;
|
|
} else {
|
|
mpStyle = &styles[dCamStyle_NN00_e];
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
/* 800AF9BC-800AFA04 .text SearchStyle__11dCamParam_cFUl */
|
|
s32 dCamParam_c::SearchStyle(u32 r4) {
|
|
s32 styleIndex = -1;
|
|
for (s32 i = 0; i < style_num; i++) {
|
|
if (styles[i].m00 == r4) {
|
|
styleIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
return styleIndex;
|
|
}
|
|
|
|
/* 800AFA04-800AFAA4 .text ratiof__11dCamParam_cFffff */
|
|
f32 dCamParam_c::ratiof(f32 t, f32 upper, f32 lower, f32 base) {
|
|
if (t == 0.0f)
|
|
return base;
|
|
|
|
f32 ret = base;
|
|
if (t < 0.0f) {
|
|
ret += (ret - lower) * dCamMath::customRBRatio(t, 0.25f);
|
|
} else {
|
|
ret += (upper - ret) * dCamMath::customRBRatio(t, 0.25f);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 800AFAA4-800AFB00 .text DefaultRadius__11dCamParam_cFPf */
|
|
BOOL dCamParam_c::DefaultRadius(f32* radius) {
|
|
f32 param13;
|
|
f32 param14;
|
|
f32 min;
|
|
f32 max;
|
|
|
|
param13 = mpStyle->styleParam[dCamStyleParam_UNK13];
|
|
param14 = mpStyle->styleParam[dCamStyleParam_UNK14];
|
|
|
|
if (param13 < param14) {
|
|
min = param13;
|
|
max = param14;
|
|
} else {
|
|
max = param13;
|
|
min = param14;
|
|
}
|
|
|
|
if (*radius > max) {
|
|
*radius = max;
|
|
return FALSE;
|
|
}
|
|
|
|
if (*radius < min) {
|
|
*radius = min;
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 800AFB00-800AFB88 .text RadiusRatio__11dCamParam_cFf */
|
|
f32 dCamParam_c::RadiusRatio(f32 r) {
|
|
f32 center = mpStyle->styleParam[dCamStyleParam_UNK10];
|
|
|
|
if (r < center) {
|
|
f32 dist = center - r;
|
|
f32 span =
|
|
center - mpStyle->styleParam[dCamStyleParam_UNK11];
|
|
|
|
if (dist >= span) {
|
|
return -1.0f;
|
|
}
|
|
|
|
if (span > 0.0001f) {
|
|
return -dist / span;
|
|
}
|
|
} else if (r > center) {
|
|
f32 dist = r - center;
|
|
f32 span =
|
|
mpStyle->styleParam[dCamStyleParam_UNK12] - center;
|
|
|
|
if (dist >= span) {
|
|
return 1.0f;
|
|
}
|
|
|
|
if (span > 0.0001f) {
|
|
return dist / span;
|
|
}
|
|
}
|
|
|
|
return 0.0f;
|
|
}
|
|
|
|
/* 800AFB88-800AFBB8 .text CenterHeight__11dCamParam_cFf */
|
|
f32 dCamParam_c::CenterHeight(f32 t) {
|
|
return ratiof(t, mpStyle->styleParam[dCamStyleParam_CENTER_HEIGHT_UPPER], mpStyle->styleParam[dCamStyleParam_CENTER_HEIGHT_LOWER], mpStyle->styleParam[dCamStyleParam_CENTER_HEIGHT_BASE]);
|
|
}
|
|
|
|
/* 800AFBB8-800AFBE8 .text Fovy__11dCamParam_cFf */
|
|
f32 dCamParam_c::Fovy(f32 t) {
|
|
return ratiof(t, mpStyle->styleParam[dCamStyleParam_FOVY_UPPER], mpStyle->styleParam[dCamStyleParam_FOVY_LOWER], mpStyle->styleParam[dCamStyleParam_FOVY_BASE]);
|
|
}
|
|
|
|
/* 800AFBE8-800AFC74 .text LockonLongitude__11dCamParam_cFf */
|
|
s16 dCamParam_c::LockonLongitude(f32 t) {
|
|
cSAngle ret(mpStyle->styleParam[dCamStyleParam_LOCKON_LONGITUDE_MIN]);
|
|
ret += (cSAngle(mpStyle->styleParam[dCamStyleParam_LOCKON_LONGITUDE_MAX]) - ret) * t;
|
|
return ret.Val();
|
|
}
|
|
|
|
/* 800AFC74-800AFD00 .text LockonLatitude__11dCamParam_cFf */
|
|
s16 dCamParam_c::LockonLatitude(f32 t) {
|
|
cSAngle ret(mpStyle->styleParam[dCamStyleParam_LOCKON_LATITUDE_MIN]);
|
|
ret += (cSAngle(mpStyle->styleParam[dCamStyleParam_LOCKON_LATITUDE_MAX]) - ret) * t;
|
|
return ret.Val();
|
|
}
|
|
|
|
/* 800AFD00-800AFD20 .text LockonFovy__11dCamParam_cFf */
|
|
f32 dCamParam_c::LockonFovy(f32 t) {
|
|
f32 ret = mpStyle->styleParam[dCamStyleParam_LOCKON_FOVY_MIN];
|
|
ret += t * (mpStyle->styleParam[dCamStyleParam_LOCKON_FOVY_MAX] - ret);
|
|
return ret;
|
|
}
|
|
|
|
/* 800AFD20-800AFD40 .text LockonCenterHeight__11dCamParam_cFf */
|
|
f32 dCamParam_c::LockonCenterHeight(f32 t) {
|
|
f32 ret = mpStyle->styleParam[dCamStyleParam_LOCKON_CENTER_HEIGHT_MIN];
|
|
ret += t * (mpStyle->styleParam[dCamStyleParam_LOCKON_CENTER_HEIGHT_MAX] - ret);
|
|
return ret;
|
|
}
|
|
|
|
/* 800AFD40-800AFEE0 .text __ct__11dCamSetup_cFv */
|
|
dCamSetup_c::dCamSetup_c() {
|
|
mDrawNear = 1.0f;
|
|
mDrawFar = 100000.0f;
|
|
m00C = 1;
|
|
mForceType = mModeSwitchType = -1;
|
|
|
|
mCusCus = 0.2f;
|
|
m024 = 0.05f;
|
|
m060 = 80.0f;
|
|
m05C = -60.0f;
|
|
m028 = 0.33f;
|
|
m02C = 0.02f;
|
|
m050 = 100.0f;
|
|
m030 = 0.75f;
|
|
mBaseCushion = 0.28f;
|
|
mJumpCushion = 1.0f;
|
|
m058 = 0.15f;
|
|
m044 = 0.005f;
|
|
m054 = 0.06f;
|
|
mCurveWeight = 1.0f;
|
|
m034 = 25.0f;
|
|
m048 = 70.0f;
|
|
|
|
mParallelDist = 60.0f;
|
|
mTrimVistaHeight = 52.0f;
|
|
mTrimCineScopeHeight = 65.0f;
|
|
|
|
m094 = 150;
|
|
m098 = DEMO_SELECT(70.0f, 60.0f);
|
|
m09C = 0.3f;
|
|
m0A0 = 0.2f;
|
|
mDMCValue = 0.1f;
|
|
mDMCAngle = 30.0f;
|
|
mDebugFlags = 1;
|
|
m0A4 = 27.0f;
|
|
m0A8 = 20;
|
|
mChargeLatitude = 2.0f;
|
|
mChargeTimer = 60;
|
|
mChargeBRatio = 0.15f;
|
|
mManualStartCThreshold = 0.66f;
|
|
mManualEndVal = 0.0f;
|
|
|
|
m06C = 45.0f;
|
|
mForceLockOffDist = 1800.0f;
|
|
mForceLockOffTimer = 120;
|
|
m078 = 0.5f;
|
|
m07C = 0.4f;
|
|
m080 = 10.0f;
|
|
m084 = 4.0f;
|
|
|
|
m0C0 = 60.0f;
|
|
mLockonChangeCushion = 100.0f;
|
|
mLockonChangeTimer = -1;
|
|
}
|
|
|
|
/* 800AFEE0-800AFF40 .text __dt__11dCamSetup_cFv */
|
|
dCamSetup_c::~dCamSetup_c() {
|
|
}
|
|
|
|
/* 800AFF40-800AFFB0 .text CheckLatitudeRange__11dCamSetup_cFPs */
|
|
bool dCamSetup_c::CheckLatitudeRange(s16* angle) {
|
|
s16 upper = cAngle::d2s(m060);
|
|
s16 lower = cAngle::d2s(m05C);
|
|
|
|
if (*angle > upper) {
|
|
*angle = upper;
|
|
return false;
|
|
}
|
|
|
|
if (*angle < lower) {
|
|
*angle = lower;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 800AFFB0-800B0004 .text FanBank__11dCamSetup_cFv */
|
|
f32 dCamSetup_c::FanBank() {
|
|
return m080 + cM_rndFX(m084) * dKyw_get_wind_pow();
|
|
}
|