You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
5.6 KiB
218 lines
5.6 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: TF2's Hud health display
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include "hud.h"
|
||
|
#include "hud_numeric.h"
|
||
|
#include "c_basetfplayer.h"
|
||
|
#include "basetfvehicle.h"
|
||
|
#include <vgui_controls/AnimationController.h>
|
||
|
#include <KeyValues.h>
|
||
|
#include "iclientmode.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Local player health
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CHudHealth : public CHudNumeric
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CHudHealth, CHudNumeric );
|
||
|
|
||
|
public:
|
||
|
CHudHealth( const char *pElementName );
|
||
|
|
||
|
virtual const char *GetLabelText() { return m_szHealthLabel; }
|
||
|
virtual const char *GetPulseEvent( bool increment ) { return increment ? "HealthIncrement" : "HealthDecrement"; }
|
||
|
virtual bool GetValue( char *val, int maxlen );
|
||
|
|
||
|
virtual Color GetColor();
|
||
|
virtual Color GetBoxColor();
|
||
|
|
||
|
private:
|
||
|
bool GetHealth( int& value );
|
||
|
|
||
|
CPanelAnimationStringVar( 128, m_szHealthLabel, "HealthLabel", "Health" );
|
||
|
};
|
||
|
|
||
|
DECLARE_HUDELEMENT( CHudHealth );
|
||
|
|
||
|
using namespace vgui;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CHudHealth::CHudHealth( const char *pElementName ) :
|
||
|
CHudNumeric( pElementName, "HudHealth" )
|
||
|
{
|
||
|
SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT );
|
||
|
}
|
||
|
|
||
|
bool CHudHealth::GetHealth( int& value )
|
||
|
{
|
||
|
C_BaseTFPlayer *pPlayer = C_BaseTFPlayer::GetLocalPlayer();
|
||
|
if ( !pPlayer )
|
||
|
return false;
|
||
|
|
||
|
value = pPlayer->GetHealth();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : value -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CHudHealth::GetValue( char *val, int maxlen )
|
||
|
{
|
||
|
int value = 0;
|
||
|
if ( !GetHealth( value ) )
|
||
|
return false;
|
||
|
|
||
|
Q_snprintf( val, maxlen, "%i", value );
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
Color CHudHealth::GetColor()
|
||
|
{
|
||
|
int value = 0;
|
||
|
if ( !GetHealth( value ) || value > 25 )
|
||
|
return m_TextColor;
|
||
|
|
||
|
return m_TextColorCritical;
|
||
|
}
|
||
|
|
||
|
Color CHudHealth::GetBoxColor()
|
||
|
{
|
||
|
int value = 0;
|
||
|
if ( !GetHealth( value ) || value > 25 )
|
||
|
return m_BoxColor;
|
||
|
return m_BoxColorCritical;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Local player's vehicle health, if in one
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CHudVehicleHealth : public CHudNumeric
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CHudVehicleHealth, CHudNumeric );
|
||
|
|
||
|
public:
|
||
|
CHudVehicleHealth( const char *pElementName );
|
||
|
|
||
|
virtual const char *GetLabelText() { return m_szVehicleHealthLabel; }
|
||
|
virtual const char *GetPulseEvent( bool increment ) { return increment ? "HealthVehicleIncrement" : "HealthVehicleDecrement"; }
|
||
|
virtual bool GetValue( char *val, int maxlen );
|
||
|
|
||
|
virtual Color GetColor();
|
||
|
virtual Color GetBoxColor();
|
||
|
|
||
|
private:
|
||
|
bool GetHealth( int& value );
|
||
|
|
||
|
CPanelAnimationVar( float, m_flLingerTime, "exit_vehicle_linger_time", "2.0" );
|
||
|
|
||
|
bool m_bPrevHealth;
|
||
|
float m_flLingerFinish;
|
||
|
int m_nLastHealth;
|
||
|
|
||
|
CPanelAnimationStringVar( 128, m_szVehicleHealthLabel, "VehicleHealthLabel", "Vehicle Health" );
|
||
|
};
|
||
|
|
||
|
DECLARE_HUDELEMENT( CHudVehicleHealth );
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CHudVehicleHealth::CHudVehicleHealth( const char *pElementName ) :
|
||
|
CHudNumeric( pElementName, "HudVehicleHealth" )
|
||
|
{
|
||
|
m_bPrevHealth = false;
|
||
|
m_flLingerFinish = 0.0f;
|
||
|
m_flLingerTime = 2.0f;
|
||
|
m_nLastHealth = 0;
|
||
|
|
||
|
SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD );
|
||
|
}
|
||
|
|
||
|
bool CHudVehicleHealth::GetHealth( int& value )
|
||
|
{
|
||
|
C_BaseTFPlayer *pPlayer = C_BaseTFPlayer::GetLocalPlayer();
|
||
|
if ( pPlayer )
|
||
|
{
|
||
|
// Draw the vehicle health:
|
||
|
C_BaseTFVehicle *pVehicleEnt = ( C_BaseTFVehicle* )pPlayer->GetVehicle();
|
||
|
if( pVehicleEnt )
|
||
|
{
|
||
|
value = pVehicleEnt->GetHealth();
|
||
|
m_nLastHealth = value;
|
||
|
bool changed = m_bPrevHealth != true;
|
||
|
|
||
|
if ( changed )
|
||
|
{
|
||
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( "HealthVehicleEnterVehicle" );
|
||
|
}
|
||
|
|
||
|
m_bPrevHealth = true;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool changed = m_bPrevHealth != false;
|
||
|
if ( changed )
|
||
|
{
|
||
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( "HealthVehicleExitVehicle" );
|
||
|
m_flLingerFinish = gpGlobals->curtime + m_flLingerTime;
|
||
|
}
|
||
|
|
||
|
m_bPrevHealth = false;
|
||
|
|
||
|
if ( gpGlobals->curtime < m_flLingerFinish )
|
||
|
{
|
||
|
value = m_nLastHealth;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
m_flLingerFinish = 0.0f;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : value -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CHudVehicleHealth::GetValue( char *val, int maxlen )
|
||
|
{
|
||
|
int value = 0;
|
||
|
bool show = GetHealth( value );
|
||
|
if ( !show )
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
Q_snprintf( val, maxlen, "%i", value );
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
Color CHudVehicleHealth::GetColor()
|
||
|
{
|
||
|
int value = 0;
|
||
|
if ( !GetHealth( value ) || value > 75 )
|
||
|
return m_TextColor;
|
||
|
|
||
|
return m_TextColorCritical;
|
||
|
}
|
||
|
|
||
|
Color CHudVehicleHealth::GetBoxColor()
|
||
|
{
|
||
|
int value = 0;
|
||
|
if ( !GetHealth( value ) || value > 75 )
|
||
|
return m_BoxColor;
|
||
|
return m_BoxColorCritical;
|
||
|
}
|