mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 21:26:57 +00:00
1
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: To display the player's health with the use of one graphic over another. A cross in this case
|
||||
// Currently this is only used on the freeze cam panel
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "cs_hud_freezepanel.h"
|
||||
#include "vgui_controls/AnimationController.h"
|
||||
#include "iclientmode.h"
|
||||
#include "c_cs_player.h"
|
||||
#include "c_cs_playerresource.h"
|
||||
#include <vgui_controls/Label.h>
|
||||
#include <vgui/ILocalize.h>
|
||||
#include <vgui/ISurface.h>
|
||||
#include "cs_gamerules.h"
|
||||
|
||||
DECLARE_BUILD_FACTORY( CCSHudPlayerHealth );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
CCSHudPlayerHealth::CCSHudPlayerHealth( Panel *parent, const char *name ) : EditablePanel( parent, name )
|
||||
{
|
||||
m_pHealthImage = new CCSHealthPanel( this, "PlayerStatusHealthImage" );
|
||||
m_pHealthImageBG = new ImagePanel( this, "PlayerStatusHealthImageBG" );
|
||||
|
||||
m_flNextThink = 0.0f;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CCSHudPlayerHealth::Reset()
|
||||
{
|
||||
//m_flNextThink = gpGlobals->curtime + 0.05f;
|
||||
m_nHealth = -1;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CCSHudPlayerHealth::ApplySchemeSettings( IScheme *pScheme )
|
||||
{
|
||||
// load control settings...
|
||||
LoadControlSettings( GetResFilename() );
|
||||
|
||||
m_flNextThink = 0.0f;
|
||||
|
||||
BaseClass::ApplySchemeSettings( pScheme );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CCSHudPlayerHealth::SetHealth( int iNewHealth, int iMaxHealth, int iMaxBuffedHealth )
|
||||
{
|
||||
int nPrevHealth = m_nHealth;
|
||||
|
||||
// set our health
|
||||
m_nHealth = iNewHealth;
|
||||
m_nMaxHealth = iMaxHealth;
|
||||
m_pHealthImage->SetHealth( (float)(m_nHealth) / (float)(m_nMaxHealth) );
|
||||
|
||||
if ( m_pHealthImage )
|
||||
{
|
||||
m_pHealthImage->SetFgColor( Color( 255, 255, 255, 255 ) );
|
||||
}
|
||||
|
||||
if ( m_nHealth <= 0 )
|
||||
{
|
||||
if ( m_pHealthImageBG->IsVisible() )
|
||||
{
|
||||
m_pHealthImageBG->SetVisible( false );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !m_pHealthImageBG->IsVisible() )
|
||||
{
|
||||
m_pHealthImageBG->SetVisible( true );
|
||||
}
|
||||
}
|
||||
|
||||
// set our health display value
|
||||
if ( nPrevHealth != m_nHealth )
|
||||
{
|
||||
if ( m_nHealth > 0 )
|
||||
{
|
||||
SetDialogVariable( "Health", m_nHealth );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetDialogVariable( "Health", "" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
CCSHealthPanel::CCSHealthPanel( Panel *parent, const char *name ) : vgui::Panel( parent, name )
|
||||
{
|
||||
m_flHealth = 1.0f;
|
||||
|
||||
m_iMaterialIndex = surface()->DrawGetTextureId( "hud/health_color" );
|
||||
if ( m_iMaterialIndex == -1 ) // we didn't find it, so create a new one
|
||||
{
|
||||
m_iMaterialIndex = surface()->CreateNewTextureID();
|
||||
}
|
||||
|
||||
surface()->DrawSetTextureFile( m_iMaterialIndex, "hud/health_color", true, false );
|
||||
|
||||
m_iDeadMaterialIndex = surface()->DrawGetTextureId( "hud/health_dead" );
|
||||
if ( m_iDeadMaterialIndex == -1 ) // we didn't find it, so create a new one
|
||||
{
|
||||
m_iDeadMaterialIndex = surface()->CreateNewTextureID();
|
||||
}
|
||||
surface()->DrawSetTextureFile( m_iDeadMaterialIndex, "hud/health_dead", true, false );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CCSHealthPanel::Paint()
|
||||
{
|
||||
BaseClass::Paint();
|
||||
|
||||
int x, y, w, h;
|
||||
GetBounds( x, y, w, h );
|
||||
|
||||
Vertex_t vert[4];
|
||||
float uv1 = 0.0f;
|
||||
float uv2 = 1.0f;
|
||||
int xpos = 0, ypos = 0;
|
||||
|
||||
if ( m_flHealth <= 0 )
|
||||
{
|
||||
// Draw the dead material
|
||||
surface()->DrawSetTexture( m_iDeadMaterialIndex );
|
||||
|
||||
vert[0].Init( Vector2D( xpos, ypos ), Vector2D( uv1, uv1 ) );
|
||||
vert[1].Init( Vector2D( xpos + w, ypos ), Vector2D( uv2, uv1 ) );
|
||||
vert[2].Init( Vector2D( xpos + w, ypos + h ), Vector2D( uv2, uv2 ) );
|
||||
vert[3].Init( Vector2D( xpos, ypos + h ), Vector2D( uv1, uv2 ) );
|
||||
|
||||
surface()->DrawSetColor( Color(255,255,255,255) );
|
||||
}
|
||||
else
|
||||
{
|
||||
float flDamageY = h * ( 1.0f - m_flHealth );
|
||||
|
||||
// blend in the red "damage" part
|
||||
surface()->DrawSetTexture( m_iMaterialIndex );
|
||||
|
||||
Vector2D uv11( uv1, uv2 - m_flHealth );
|
||||
Vector2D uv21( uv2, uv2 - m_flHealth );
|
||||
Vector2D uv22( uv2, uv2 );
|
||||
Vector2D uv12( uv1, uv2 );
|
||||
|
||||
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 );
|
||||
|
||||
surface()->DrawSetColor( GetFgColor() );
|
||||
}
|
||||
|
||||
surface()->DrawTexturedPolygon( 4, vert );
|
||||
}
|
||||
Reference in New Issue
Block a user