mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
//========= 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);
|
||||
}
|
||||
Reference in New Issue
Block a user