fix logic issues with resolver

This commit is contained in:
rei-2
2025-08-29 22:30:18 -04:00
parent 10b7114473
commit fd5f641d2a
2 changed files with 32 additions and 20 deletions
+22 -20
View File
@@ -30,14 +30,12 @@ void CResolver::StoreSniperDots(CTFPlayerResource* pResource)
std::optional<float> CResolver::GetPitchForSniperDot(CTFPlayer* pEntity, CTFPlayerResource* pResource)
{
if (m_mSniperDots.contains(pEntity->entindex()))
int iUserID = pResource->m_iUserID(pEntity->entindex());
if (m_mSniperDots.contains(iUserID))
{
int iUserID = pResource->m_iUserID(pEntity->entindex());
const Vec3 vOrigin = m_mSniperDots[iUserID];
const Vec3 vEyeOrigin = pEntity->m_vecOrigin() + pEntity->GetViewOffset();
const Vec3 vDelta = vOrigin - vEyeOrigin;
Vec3 vAngles = Math::VectorAngles(vDelta);
Vec3 vOrigin = m_mSniperDots[iUserID];
Vec3 vEyeOrigin = pEntity->m_vecOrigin() + pEntity->GetViewOffset();
Vec3 vAngles = Math::VectorAngles(vOrigin - vEyeOrigin);
return vAngles.x;
}
@@ -75,6 +73,8 @@ void CResolver::FrameStageNotify()
tData.m_flPitch = flPitch.value();
else if (!tData.m_bFirstOOBPitch && tData.m_bAutoSetPitch || tData.m_bInversePitch)
tData.m_flPitch = -pPlayer->m_angEyeAnglesX(); // set to inverse by default
else
tData.m_flPitch = fabsf(tData.m_flPitch) > 45.f ? sign(tData.m_flPitch) * 90 : 0; // limit to 90, 0, -90
tData.m_bPitch = true, tData.m_bFirstOOBPitch = true;
}
else
@@ -95,11 +95,10 @@ void CResolver::CreateMove(CTFPlayer* pLocal)
bool bAutoYaw = tData.m_bAutoSetYaw && Vars::Resolver::AutoResolveYawAmount.Value;
bool bAutoPitch = tData.m_bAutoSetPitch && Vars::Resolver::AutoResolvePitchAmount.Value;
if (bAutoPitch
&& (!bAutoYaw || sign(flYaw) != sign(flYaw + Vars::Resolver::AutoResolveYawAmount.Value))
&& fabsf(pTarget->m_angEyeAnglesX()) == 90.f && !m_mSniperDots.contains(m_iWaitingForTarget))
if (bAutoPitch && fabsf(pTarget->m_angEyeAnglesX()) == 90.f && !m_mSniperDots.contains(m_iWaitingForTarget)
&& (!bAutoYaw || sign(flYaw) != sign(flYaw + Vars::Resolver::AutoResolveYawAmount.Value) && sign(flYaw) != 0))
{
flPitch = Math::NormalizeAngle(flPitch + Vars::Resolver::AutoResolvePitchAmount.Value, 180.f);
flPitch = Math::ClampNormalizeAngle(flPitch + Vars::Resolver::AutoResolvePitchAmount.Value, 90.f);
F::Backtrack.ResolverUpdate(pTarget);
F::Output.ReportResolver(I::EngineClient->GetPlayerForUserID(m_iWaitingForTarget), "Cycling", "pitch", flPitch);
@@ -184,16 +183,19 @@ void CResolver::CreateMove(CTFPlayer* pLocal)
int iUserID = pResource->m_iUserID(pTarget->entindex());
auto& tData = m_mResolverData[iUserID];
if (fabsf(pTarget->m_angEyeAnglesX()) != 90.f)
F::Output.ReportResolver("Target not using out of bounds pitch");
if (!m_mSniperDots.contains(iUserID))
{
if (fabsf(pTarget->m_angEyeAnglesX()) != 90.f)
F::Output.ReportResolver("Target not using out of bounds pitch");
float& flPitch = tData.m_flPitch;
flPitch = Math::ClampNormalizeAngle(flPitch + Vars::Resolver::CyclePitch.Value, 90.f);
float& flPitch = tData.m_flPitch;
flPitch += Vars::Resolver::CyclePitch.Value;
flPitch = Math::NormalizeAngle(flPitch + Vars::Resolver::CyclePitch.Value, 180.f);
F::Backtrack.ResolverUpdate(pTarget);
F::Output.ReportResolver(pTarget->entindex(), "Cycling", "pitch", flPitch);
F::Backtrack.ResolverUpdate(pTarget);
F::Output.ReportResolver(pTarget->entindex(), "Cycling", "pitch", flPitch);
}
else
F::Output.ReportResolver("Target pitch overridden by sniper dot");
}
m_flLastPitchCycle = SDK::PlatFloatTime();
+10
View File
@@ -74,6 +74,16 @@ namespace Math
return std::isfinite(flAngle) ? std::remainder(flAngle, flRange) : 0.f;
}
inline float ClampNormalizeAngle(float flAngle, float flRange = 180.f)
{
return std::isfinite(flAngle) ? (flAngle > flRange ? -flRange : flAngle < -flRange ? flRange : flAngle) : 0.f;
}
inline float ClampNormalizeRad(float flAngle, float flRange = PI)
{
return std::isfinite(flAngle) ? (flAngle > flRange ? -flRange : flAngle < -flRange ? flRange : flAngle) : 0.f;
}
inline void ClampAngles(Vec3& v)
{
v.x = std::clamp(NormalizeAngle(v.x), -89.f, 89.f);