//========= 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 #include #include #include 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); }