// // 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(); }