Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= 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(); }
|