mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-08-26 13:51:49 +00:00
server: func_tank: prevent domain error on barrel adjust (#328)
When target is too close to the tank origin, `d2 - r2` expression may become negative causing domain error on square root, and poisoning other fields and even other entities with NaN
This commit is contained in:
parent
99dc2c519f
commit
1394637ce8
@ -626,11 +626,13 @@ void CFuncTank::AdjustAnglesForBarrel( Vector &angles, float distance )
|
|||||||
if( m_barrelPos.y )
|
if( m_barrelPos.y )
|
||||||
{
|
{
|
||||||
r2 = m_barrelPos.y * m_barrelPos.y;
|
r2 = m_barrelPos.y * m_barrelPos.y;
|
||||||
|
if( d2 > r2 )
|
||||||
angles.y += ( 180.0f / M_PI_F ) * atan2( m_barrelPos.y, sqrt( d2 - r2 ) );
|
angles.y += ( 180.0f / M_PI_F ) * atan2( m_barrelPos.y, sqrt( d2 - r2 ) );
|
||||||
}
|
}
|
||||||
if( m_barrelPos.z )
|
if( m_barrelPos.z )
|
||||||
{
|
{
|
||||||
r2 = m_barrelPos.z * m_barrelPos.z;
|
r2 = m_barrelPos.z * m_barrelPos.z;
|
||||||
|
if( d2 > r2 )
|
||||||
angles.x += ( 180.0f / M_PI_F ) * atan2( -m_barrelPos.z, sqrt( d2 - r2 ) );
|
angles.x += ( 180.0f / M_PI_F ) * atan2( -m_barrelPos.z, sqrt( d2 - r2 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user