Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 26 additions & 30 deletions MarathonRecomp/patches/camera_patches.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ void SonicCamera_MouseLook(PPCRegister& r31, PPCRegister& r5, PPCRegister& in_de
{
case SonicCameraEx::MouseLookState_Disabled:
{
if (std::fabsf(x) >= 0.0f && std::fabsf(y) >= 0.0f)
if (std::fabsf(x) > 0.0f || std::fabsf(y) > 0.0f)
{
// Sync current camera orbit to mouse look.
pSonicCamera->m_Yaw = pSonicCamera->m_Orbit.Y;
Expand All @@ -231,13 +231,9 @@ void SonicCamera_MouseLook(PPCRegister& r31, PPCRegister& r5, PPCRegister& in_de
pSonicCamera->SetInterpolateStart(*pOutput);

pSonicCamera->m_MouseLookState = SonicCameraEx::MouseLookState_Enabled;

break;
}
else
{
return;
}

return;
}

case SonicCameraEx::MouseLookState_Resetting:
Expand All @@ -263,12 +259,34 @@ void SonicCamera_MouseLook(PPCRegister& r31, PPCRegister& r5, PPCRegister& in_de
const auto padState = pMutator->GetState();

// Right stick moved beyond threshold, reset back to original camera behaviour.
if (std::abs(padState.sThumbRX) >= 8000 && std::abs(padState.sThumbRY) >= 8000)
if (std::abs(padState.sThumbRX) >= 8000 || std::abs(padState.sThumbRY) >= 8000)
{
pSonicCamera->m_MouseLookState = SonicCameraEx::MouseLookState_Resetting;
return;
}
}

if (Config::MouseAutoCenter)
{
if (std::fabsf(x) > 0.0f || std::fabsf(y) > 0.0f)
{
pSonicCamera->m_InactiveTime = 0.0f;
}
else
{
pSonicCamera->m_InactiveTime += App::s_deltaTime;
}

if (pSonicCamera->m_InactiveTime >= Config::MouseAutoCenterTime)
{
pSonicCamera->m_MouseLookState = SonicCameraEx::MouseLookState_Resetting;
return;
}
}
else
{
pSonicCamera->m_InactiveTime = 0.0f;
}

if (pSonicCamera->IsPlayerOutOfControl())
{
Expand All @@ -286,28 +304,6 @@ void SonicCamera_MouseLook(PPCRegister& r31, PPCRegister& r5, PPCRegister& in_de
}
}

if (Config::MouseAutoCenter)
{
if (std::fabsf(x) > 0.0f || std::fabsf(y) > 0.0f)
{
pSonicCamera->m_InactiveTime = 0.0f;
}
else
{
pSonicCamera->m_InactiveTime += App::s_deltaTime;
}

if (pSonicCamera->m_InactiveTime >= Config::MouseAutoCenterTime)
{
pSonicCamera->m_MouseLookState = SonicCameraEx::MouseLookState_Resetting;
return;
}
}
else
{
pSonicCamera->m_InactiveTime = 0.0f;
}

static constexpr float maxPitch = 45.0f * DEG2RADf;

// Maps relative mouse X/Y to expected values for the orbit vector.
Expand Down
Loading