185 lines
4.1 KiB
C++
185 lines
4.1 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include "cbase.h"
|
|
#include "hud.h"
|
|
#include "hud_macros.h"
|
|
#include "view.h"
|
|
|
|
#include "iclientmode.h"
|
|
|
|
#include <KeyValues.h>
|
|
#include <vgui/ISurface.h>
|
|
#include <vgui/ISystem.h>
|
|
#include <vgui_controls/Panel.h>
|
|
|
|
using namespace vgui;
|
|
|
|
#include "hudelement.h"
|
|
#include "hl1_hud_numbers.h"
|
|
|
|
#include "convar.h"
|
|
|
|
#define FADE_TIME 100
|
|
#define MIN_ALPHA 100
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Health panel
|
|
//-----------------------------------------------------------------------------
|
|
class CHudBattery : public CHudElement, public CHL1HudNumbers
|
|
{
|
|
DECLARE_CLASS_SIMPLE( CHudBattery, CHL1HudNumbers );
|
|
|
|
public:
|
|
CHudBattery( const char *pElementName );
|
|
|
|
void Init( void );
|
|
void Reset( void );
|
|
void VidInit( void );
|
|
void MsgFunc_Battery(bf_read &msg);
|
|
|
|
private:
|
|
void Paint( void );
|
|
void ApplySchemeSettings(vgui::IScheme *pScheme);
|
|
|
|
private:
|
|
CHudTexture *icon_suit_empty;
|
|
CHudTexture *icon_suit_full;
|
|
int m_iBattery;
|
|
float m_flFade;
|
|
};
|
|
|
|
DECLARE_HUDELEMENT( CHudBattery );
|
|
DECLARE_HUD_MESSAGE( CHudBattery, Battery );
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Constructor
|
|
//-----------------------------------------------------------------------------
|
|
CHudBattery::CHudBattery( const char *pElementName ) : CHudElement( pElementName ), BaseClass(NULL, "HudSuit")
|
|
{
|
|
SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_NEEDSUIT );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CHudBattery::Init()
|
|
{
|
|
HOOK_HUD_MESSAGE( CHudBattery, Battery );
|
|
Reset();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CHudBattery::Reset()
|
|
{
|
|
m_iBattery = 0;
|
|
m_flFade = 0;
|
|
}
|
|
|
|
void CHudBattery::VidInit()
|
|
{
|
|
Reset();
|
|
|
|
BaseClass::VidInit();
|
|
}
|
|
|
|
void CHudBattery::Paint()
|
|
{
|
|
Color clrHealth;
|
|
int a;
|
|
int x;
|
|
int y;
|
|
|
|
BaseClass::Paint();
|
|
|
|
if ( !icon_suit_empty )
|
|
{
|
|
icon_suit_empty = gHUD.GetIcon( "suit_empty" );
|
|
}
|
|
|
|
if ( !icon_suit_full )
|
|
{
|
|
icon_suit_full = gHUD.GetIcon( "suit_full" );
|
|
}
|
|
|
|
if ( !icon_suit_empty || !icon_suit_full )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Has health changed? Flash the health #
|
|
if ( m_flFade )
|
|
{
|
|
if (m_flFade > FADE_TIME)
|
|
m_flFade = FADE_TIME;
|
|
|
|
m_flFade -= ( gpGlobals->frametime * 20 );
|
|
if ( m_flFade <= 0 )
|
|
{
|
|
a = 128;
|
|
m_flFade = 0;
|
|
}
|
|
else
|
|
{
|
|
// Fade the health number back to dim
|
|
a = MIN_ALPHA + ( m_flFade / FADE_TIME ) * 128;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
a = MIN_ALPHA;
|
|
}
|
|
|
|
int r, g, b, nUnused;
|
|
(gHUD.m_clrYellowish).GetColor( r, g, b, nUnused );
|
|
clrHealth.SetColor( r, g, b, a );
|
|
|
|
int nFontHeight = GetNumberFontHeight();
|
|
|
|
int nHudElemWidth, nHudElemHeight;
|
|
GetSize( nHudElemWidth, nHudElemHeight );
|
|
|
|
int iOffset = icon_suit_empty->Height() / 6;
|
|
|
|
x = nHudElemWidth / 5;
|
|
y = nHudElemHeight - ( nFontHeight * 1.5 );
|
|
|
|
icon_suit_empty->DrawSelf( x, y - iOffset, clrHealth );
|
|
|
|
if ( m_iBattery > 0 )
|
|
{
|
|
int nSuitOffset = icon_suit_full->Height() * ((float)(100-(MIN(100,m_iBattery))) * 0.01); // battery can go from 0 to 100 so * 0.01 goes from 0 to 1
|
|
icon_suit_full->DrawSelfCropped( x, y - iOffset + nSuitOffset, 0, nSuitOffset, icon_suit_full->Width(), icon_suit_full->Height() - nSuitOffset, clrHealth );
|
|
}
|
|
|
|
x += icon_suit_empty->Width();
|
|
DrawHudNumber( x, y, m_iBattery, clrHealth );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CHudBattery::MsgFunc_Battery( bf_read &msg )
|
|
{
|
|
int x = msg.ReadShort();
|
|
|
|
if ( x != m_iBattery )
|
|
{
|
|
m_flFade = FADE_TIME;
|
|
m_iBattery = x;
|
|
}
|
|
}
|
|
|
|
void CHudBattery::ApplySchemeSettings(vgui::IScheme *pScheme)
|
|
{
|
|
BaseClass::ApplySchemeSettings(pScheme);
|
|
SetPaintBackgroundEnabled(false);
|
|
}
|