source-engine/game/client/hl1/hl1_hud_battery.cpp
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

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);
}