void BitmapImage::DoPaint( int x, int y, int wide, int tall, float yaw, float flAlphaModulate ) { vgui::surface()->DrawSetTexture( m_nTextureId ); int r, g, b, a; m_clr.GetColor( r, g, b, a ); a *= flAlphaModulate; vgui::surface()->DrawSetColor( r, g, b, a ); if (yaw == 0) { if ( !m_bUseViewport ) { vgui::surface()->DrawTexturedRect( x, y, x + wide, y + tall ); } else { vgui::surface()->DrawTexturedSubRect( x, y, x + wide, y + tall, m_rgViewport[ 0 ], m_rgViewport[ 1 ], m_rgViewport[ 2 ], m_rgViewport[ 3 ] ); } } else { // Rotated version of the bitmap! // Rotate about the center of the bitmap vgui::Vertex_t verts[4]; Vector2D center( x + (wide * 0.5f), y + (tall * 0.5f) ); // Choose a basis... float yawRadians = -yaw * M_PI / 180.0f; Vector2D axis[2]; axis[0].x = cos(yawRadians); axis[0].y = sin(yawRadians); axis[1].x = -axis[0].y; axis[1].y = axis[0].x; verts[0].m_TexCoord.Init( 0, 0 ); Vector2DMA( center, -0.5f * wide, axis[0], verts[0].m_Position ); Vector2DMA( verts[0].m_Position, -0.5f * tall, axis[1], verts[0].m_Position ); verts[1].m_TexCoord.Init( 1, 0 ); Vector2DMA( verts[0].m_Position, wide, axis[0], verts[1].m_Position ); verts[2].m_TexCoord.Init( 1, 1 ); Vector2DMA( verts[1].m_Position, tall, axis[1], verts[2].m_Position ); verts[3].m_TexCoord.Init( 0, 1 ); Vector2DMA( verts[0].m_Position, tall, axis[1], verts[3].m_Position ); vgui::surface()->DrawTexturedPolygon( 4, verts ); } }
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() ); }
//----------------------------------------------------------------------------- // 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); } }