From dde25d9dc0915b94090591d9ba5adeb3842ca77b Mon Sep 17 00:00:00 2001 From: Sam V Date: Mon, 19 Sep 2022 14:04:16 +0200 Subject: [PATCH] Fix domain errors in func_tank_of ValveSoftware/halflife#3303 --- dlls/func_tank_of.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/dlls/func_tank_of.cpp b/dlls/func_tank_of.cpp index babe02ad..7547fee8 100644 --- a/dlls/func_tank_of.cpp +++ b/dlls/func_tank_of.cpp @@ -762,22 +762,27 @@ void COFFuncTank::TrackTarget() // If barrel is offset, add in additional rotation void COFFuncTank::AdjustAnglesForBarrel(Vector& angles, float distance) { - float r2, d2; - - if (m_barrelPos.y != 0 || m_barrelPos.z != 0) { distance -= m_barrelPos.z; - d2 = distance * distance; + const float d2 = distance * distance; if (0 != m_barrelPos.y) { - r2 = m_barrelPos.y * m_barrelPos.y; - angles.y += (180.0 / M_PI) * atan2(m_barrelPos.y, sqrt(d2 - r2)); + const float r2 = m_barrelPos.y * m_barrelPos.y; + + if (d2 > r2) + { + angles.y += (180.0 / M_PI) * atan2(m_barrelPos.y, sqrt(d2 - r2)); + } } if (0 != m_barrelPos.z) { - r2 = m_barrelPos.z * m_barrelPos.z; - angles.x += (180.0 / M_PI) * atan2(-m_barrelPos.z, sqrt(d2 - r2)); + const float r2 = m_barrelPos.z * m_barrelPos.z; + + if (d2 > r2) + { + angles.x += (180.0 / M_PI) * atan2(-m_barrelPos.z, sqrt(d2 - r2)); + } } } }