diff options
Diffstat (limited to 'game/client/hl2/hud_battery.cpp')
| -rw-r--r-- | game/client/hl2/hud_battery.cpp | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/game/client/hl2/hud_battery.cpp b/game/client/hl2/hud_battery.cpp new file mode 100644 index 0000000..c07943c --- /dev/null +++ b/game/client/hl2/hud_battery.cpp @@ -0,0 +1,147 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +// +// battery.cpp +// +// implementation of CHudBattery class +// +#include "cbase.h" +#include "hud.h" +#include "hudelement.h" +#include "hud_macros.h" +#include "hud_numericdisplay.h" +#include "iclientmode.h" + +#include "vgui_controls/AnimationController.h" +#include "vgui/ILocalize.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define INIT_BAT -1 + +//----------------------------------------------------------------------------- +// Purpose: Displays suit power (armor) on hud +//----------------------------------------------------------------------------- +class CHudBattery : public CHudNumericDisplay, public CHudElement +{ + DECLARE_CLASS_SIMPLE( CHudBattery, CHudNumericDisplay ); + +public: + CHudBattery( const char *pElementName ); + void Init( void ); + void Reset( void ); + void VidInit( void ); + void OnThink( void ); + void MsgFunc_Battery(bf_read &msg ); + bool ShouldDraw(); + +private: + int m_iBat; + int m_iNewBat; +}; + +DECLARE_HUDELEMENT( CHudBattery ); +DECLARE_HUD_MESSAGE( CHudBattery, Battery ); + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CHudBattery::CHudBattery( const char *pElementName ) : BaseClass(NULL, "HudSuit"), CHudElement( pElementName ) +{ + SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_NEEDSUIT ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CHudBattery::Init( void ) +{ + HOOK_HUD_MESSAGE( CHudBattery, Battery); + Reset(); + m_iBat = INIT_BAT; + m_iNewBat = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CHudBattery::Reset( void ) +{ + SetLabelText(g_pVGuiLocalize->Find("#Valve_Hud_SUIT")); + SetDisplayValue(m_iBat); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CHudBattery::VidInit( void ) +{ + Reset(); +} + +//----------------------------------------------------------------------------- +// Purpose: Save CPU cycles by letting the HUD system early cull +// costly traversal. Called per frame, return true if thinking and +// painting need to occur. +//----------------------------------------------------------------------------- +bool CHudBattery::ShouldDraw( void ) +{ + bool bNeedsDraw = ( m_iBat != m_iNewBat ) || ( GetAlpha() > 0 ); + + return ( bNeedsDraw && CHudElement::ShouldDraw() ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CHudBattery::OnThink( void ) +{ + if ( m_iBat == m_iNewBat ) + return; + + if ( !m_iNewBat ) + { + g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("SuitPowerZero"); + } + else if ( m_iNewBat < m_iBat ) + { + // battery power has decreased, so play the damaged animation + g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("SuitDamageTaken"); + + // play an extra animation if we're super low + if ( m_iNewBat < 20 ) + { + g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("SuitArmorLow"); + } + } + else + { + // battery power has increased (if we had no previous armor, or if we just loaded the game, don't use alert state) + if ( m_iBat == INIT_BAT || m_iBat == 0 || m_iNewBat >= 20) + { + g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("SuitPowerIncreasedAbove20"); + } + else + { + g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("SuitPowerIncreasedBelow20"); + } + } + + m_iBat = m_iNewBat; + + SetDisplayValue(m_iBat); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CHudBattery::MsgFunc_Battery( bf_read &msg ) +{ + m_iNewBat = msg.ReadShort(); +} |