//----------------------------------------------------------------------------- // Computes the closest point to vecTarget no farther than flMaxDist from vecStart //----------------------------------------------------------------------------- void ComputeClosestPoint2D(const Vector2D& vecStart, float flMaxDist, const Vector2D& vecTarget, Vector2D *pResult) { Vector2D vecDelta; Vector2DSubtract(vecTarget, vecStart, vecDelta); float flDistSqr = vecDelta.LengthSqr(); if (flDistSqr <= flMaxDist * flMaxDist) { *pResult = vecTarget; } else { vecDelta /= sqrt(flDistSqr); Vector2DMA(vecStart, flMaxDist, vecDelta, *pResult); } }
void CWeaponIFMSteadyCam::ComputeViewOffset() { // Update 2D spring if ( !m_bInSpringMode ) { m_vecViewOffset = m_vecActualViewOffset; return; } Vector2D dir; Vector2DSubtract( m_vecViewOffset.AsVector2D(), m_vecActualViewOffset.AsVector2D(), dir ); float flDist = Vector2DNormalize( dir ); Vector2D vecForce; Vector2DMultiply( dir, -flDist * ifm_steadycam_2dspringconstant.GetFloat(), vecForce ); Vector2DMA( vecForce, -ifm_steadycam_2ddragconstant.GetFloat(), m_vec2DVelocity.AsVector2D(), vecForce ); Vector2DMA( m_vecViewOffset.AsVector2D(), gpGlobals->frametime, m_vec2DVelocity.AsVector2D(), m_vecViewOffset.AsVector2D() ); Vector2DMA( m_vec2DVelocity.AsVector2D(), gpGlobals->frametime, vecForce, m_vec2DVelocity.AsVector2D() ); }
Vector2D Vector2D::operator-(const Vector2D& v) const { Vector2D res; Vector2DSubtract(*this, v, res); return res; }