From 78b267bb801fbd3ca9a1423c7a66ea600126cae1 Mon Sep 17 00:00:00 2001 From: Sam V Date: Mon, 19 Sep 2022 14:06:00 +0200 Subject: [PATCH] Fix domain errors in func_tank_of ValveSoftware/halflife#3303 --- src/game/server/entities/func_tank_of.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/game/server/entities/func_tank_of.cpp b/src/game/server/entities/func_tank_of.cpp index 29a2e1fd7..16545d0c4 100644 --- a/src/game/server/entities/func_tank_of.cpp +++ b/src/game/server/entities/func_tank_of.cpp @@ -757,22 +757,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)); + } } } }