//-----------------------------------------------------------------------------
// Purpose: Draw the team's base icon at either end of the icon panel
//-----------------------------------------------------------------------------
bool CHudControlPointIcons::PaintTeamBaseIcon( int index, float flXPos, float flYPos, float flIconSize )
{
	float uv1 = 0.0f;
	float uv2 = 1.0f;

	// Find out which team owns the far left
	for ( int i = 0; i < MAX_TEAMS; i++ )
	{
		if ( ObjectiveResource()->GetBaseControlPointForTeam(i) == index )
		{
			int iTeamBaseIcon = ObjectiveResource()->GetBaseIconForTeam(i);
			if ( iTeamBaseIcon )
			{
				// Draw the Team's Base texture
				const char *szMatName = GetMaterialNameFromIndex( iTeamBaseIcon );

				vgui::surface()->DrawSetTextureFile( m_iTeamBaseTextures[i], szMatName, true, false );

				Vector2D uv11( uv1, uv1 );
				Vector2D uv21( uv2, uv1 );
				Vector2D uv22( uv2, uv2 );
				Vector2D uv12( uv1, uv2 );

				vgui::Vertex_t vert[4];	
				vert[0].Init( Vector2D( flXPos,					flYPos              ), uv11 );
				vert[1].Init( Vector2D( flXPos + flIconSize,	flYPos              ), uv21 );
				vert[2].Init( Vector2D( flXPos + flIconSize,	flYPos + flIconSize ), uv22 );				
				vert[3].Init( Vector2D( flXPos,					flYPos + flIconSize ), uv12 );

				vgui::surface()->DrawSetColor( Color(255,255,255,255) );	
				vgui::surface()->DrawTexturedPolygon( 4, vert );

				return true;
			}
		}
	}

	return false;
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CDoDHudHealthBar::Paint( void )
{
	BaseClass::Paint();

	int x, y, w, h;
	GetBounds( x, y, w, h );

	int xpos = 0, ypos = 0;
	float flDamageY = h * ( 1.0f - m_flPercentage );

	Color *pclrHealth;

	if ( m_flPercentage > m_flFirstWarningLevel )
	{
		pclrHealth = &m_clrHealthHigh; 
	}
	else if ( m_flPercentage > m_flSecondWarningLevel )
	{
		pclrHealth = &m_clrHealthMed; 
	}
	else
	{
		pclrHealth = &m_clrHealthLow;
	}

	// blend in the red "damage" part
	float uv1 = 0.0f;
	float uv2 = 1.0f;

	vgui::surface()->DrawSetTexture( m_iMaterialIndex );

	Vector2D uv11( uv1, uv1 );
	Vector2D uv21( uv2, uv1 );
	Vector2D uv22( uv2, uv2 );
	Vector2D uv12( uv1, uv2 );

	vgui::Vertex_t vert[4];	

	// background
	vert[0].Init( Vector2D( xpos, ypos ), uv11 );
	vert[1].Init( Vector2D( xpos + w, ypos ), uv21 );
	vert[2].Init( Vector2D( xpos + w, ypos + h ), uv22 );				
	vert[3].Init( Vector2D( xpos, ypos + h ), uv12 );

	vgui::surface()->DrawSetColor( m_clrBackground );
	vgui::surface()->DrawTexturedPolygon( 4, vert );

	// damage part
	vert[0].Init( Vector2D( xpos, flDamageY ), uv11 );
	vert[1].Init( Vector2D( xpos + w, flDamageY ), uv21 );
	vert[2].Init( Vector2D( xpos + w, ypos + h ), uv22 );				
	vert[3].Init( Vector2D( xpos, ypos + h ), uv12 );

	vgui::surface()->DrawSetColor( *pclrHealth );
	vgui::surface()->DrawTexturedPolygon( 4, vert );

	// outline
	vert[0].Init( Vector2D( xpos, ypos ), uv11 );
	vert[1].Init( Vector2D( xpos + w - 1, ypos ), uv21 );
	vert[2].Init( Vector2D( xpos + w - 1, ypos + h - 1 ), uv22 );				
	vert[3].Init( Vector2D( xpos, ypos + h - 1 ), uv12 );

	vgui::surface()->DrawSetColor( m_clrBorder );
	vgui::surface()->DrawTexturedPolyLine( vert, 4 );
}
示例#3
0
void CHudTexture::DrawSelfScalableCorners( int drawX, int drawY, int w, int h, int iSrcCornerW, int iSrcCornerH, int iDrawCornerW, int iDrawCornerH, Color clr ) const
{
	if ( bRenderUsingFont )
	{
		Assert( !"DrawSelfScalableCorners does not support drawing a font" );
		return;
	}

	if ( textureId == -1 )
		return;

	float fw = (float)Width();
	float fh = (float)Height();

	float flCornerWidthPercent = ( fw > 0 ) ? ( (float)iSrcCornerW / fw ) : 0;
	float flCornerHeightPercent = ( fh > 0 ) ? ( (float)iSrcCornerH / fh ) : 0;

	vgui::surface()->DrawSetColor( clr );
	vgui::surface()->DrawSetTexture( textureId );

	float uvx = 0;
	float uvy = 0;
	float uvw, uvh;

	float drawW, drawH;

	int x = drawX;
	int y = drawY;

	int row, col;
	for ( row=0;row<3;row++ )
	{
		x = drawX;
		uvx = 0;

		if ( row == 0 || row == 2 )
		{
			//uvh - row 0 or 2, is src_corner_height
			uvh = flCornerHeightPercent;
			drawH = iDrawCornerH;
		}
		else
		{
			//uvh - row 1, is tall - ( 2 * src_corner_height ) ( min 0 )
			uvh = MAX( 1.0 - 2 * flCornerHeightPercent, 0.0f );
			drawH = MAX( 0, ( h - 2 * iDrawCornerH ) );
		}

		for ( col=0;col<3;col++ )
		{
			if ( col == 0 || col == 2 )
			{
				//uvw - col 0 or 2, is src_corner_width
				uvw = flCornerWidthPercent;
				drawW = iDrawCornerW;
			}
			else
			{
				//uvw - col 1, is wide - ( 2 * src_corner_width ) ( min 0 )
				uvw = MAX( 1.0 - 2 * flCornerWidthPercent, 0.0f );
				drawW = MAX( 0, ( w - 2 * iDrawCornerW ) );
			}

			Vector2D uv11( uvx, uvy );
			Vector2D uv21( uvx+uvw, uvy );
			Vector2D uv22( uvx+uvw, uvy+uvh );
			Vector2D uv12( uvx, uvy+uvh );

			vgui::Vertex_t verts[4];
			verts[0].Init( Vector2D( x, y ), uv11 );
			verts[1].Init( Vector2D( x+drawW, y ), uv21 );
			verts[2].Init( Vector2D( x+drawW, y+drawH ), uv22 );
			verts[3].Init( Vector2D( x, y+drawH ), uv12  );

			vgui::surface()->DrawTexturedPolygon( 4, verts, false );	

			x += drawW;
			uvx += uvw;
		}

		y += drawH;
		uvy += uvh;
	}

	vgui::surface()->DrawSetTexture(0);
}