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.
196 lines
6.3 KiB
196 lines
6.3 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef C_TF_ITEMEFFECTMETER_H
|
||
|
#define C_TF_ITEMEFFECTMETER_H
|
||
|
|
||
|
#include "cbase.h"
|
||
|
|
||
|
#include "c_tf_player.h"
|
||
|
#include "c_tf_playerclass.h"
|
||
|
#include "hudelement.h"
|
||
|
#include "iclientmode.h"
|
||
|
#include "tf_weapon_invis.h"
|
||
|
#include <vgui_controls/EditablePanel.h>
|
||
|
#include <vgui_controls/ProgressBar.h>
|
||
|
#include <vgui_controls/Label.h>
|
||
|
|
||
|
using namespace vgui;
|
||
|
|
||
|
class CHudItemEffectMeter;
|
||
|
class CItemEffectMeterLogic;
|
||
|
class CItemEffectMeterManager;
|
||
|
|
||
|
extern CItemEffectMeterManager g_ItemEffectMeterManager;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CItemEffectMeterManager : public CGameEventListener
|
||
|
{
|
||
|
public:
|
||
|
~CItemEffectMeterManager();
|
||
|
|
||
|
void ClearExistingMeters();
|
||
|
void SetPlayer( C_TFPlayer* pPlayer );
|
||
|
void Update( C_TFPlayer* pPlayer );
|
||
|
virtual void FireGameEvent( IGameEvent *event );
|
||
|
int GetNumEnabled( void );
|
||
|
|
||
|
private:
|
||
|
CUtlVector< vgui::DHANDLE< CHudItemEffectMeter > > m_Meters;
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
DECLARE_AUTO_LIST( IHudItemEffectMeterAutoList );
|
||
|
class CHudItemEffectMeter : public CHudElement, public EditablePanel, public IHudItemEffectMeterAutoList
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CHudItemEffectMeter, EditablePanel );
|
||
|
|
||
|
public:
|
||
|
CHudItemEffectMeter( const char *pszElementName, C_TFPlayer* pPlayer );
|
||
|
~CHudItemEffectMeter();
|
||
|
|
||
|
static void CreateHudElementsForClass( C_TFPlayer* pPlayer, CUtlVector< vgui::DHANDLE< CHudItemEffectMeter > >& outMeters );
|
||
|
|
||
|
// Hud Element
|
||
|
virtual void ApplySchemeSettings( IScheme *scheme );
|
||
|
virtual void PerformLayout();
|
||
|
virtual bool ShouldDraw( void );
|
||
|
virtual void Update( C_TFPlayer* pPlayer, const char* pSoundScript = "TFPlayer.ReCharged" );
|
||
|
|
||
|
// Effect Meter Logic
|
||
|
virtual bool IsEnabled( void ) { return m_bEnabled; }
|
||
|
virtual const char* GetLabelText( void );
|
||
|
virtual const char* GetIconName( void ) { return "../hud/ico_stickybomb_red"; }
|
||
|
virtual float GetProgress( void );
|
||
|
virtual bool ShouldBeep( void )
|
||
|
{
|
||
|
if ( m_pPlayer )
|
||
|
{
|
||
|
CTFWeaponInvis *pWpn = (CTFWeaponInvis *) m_pPlayer->Weapon_OwnsThisID( TF_WEAPON_INVIS );
|
||
|
if ( pWpn && pWpn->HasFeignDeath() )
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
virtual const char *GetResFile( void ) { return "resource/UI/HudItemEffectMeter.res"; }
|
||
|
virtual int GetCount( void ) { return -1; }
|
||
|
virtual bool ShouldFlash( void ) { return false; }
|
||
|
virtual bool ShowPercentSymbol( void ) { return false; }
|
||
|
|
||
|
virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
|
||
|
virtual bool IsKillstreakMeter( void ) { return false; }
|
||
|
|
||
|
protected:
|
||
|
vgui::Label *m_pLabel;
|
||
|
vgui::ContinuousProgressBar *m_pProgressBar;
|
||
|
float m_flOldProgress;
|
||
|
|
||
|
protected:
|
||
|
CHandle<C_TFPlayer> m_pPlayer;
|
||
|
bool m_bEnabled;
|
||
|
|
||
|
CPanelAnimationVarAliasType( float, m_iXOffset, "x_offset", "0", "proportional_float" );
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Template variation for weapon based meters.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
template <class T>
|
||
|
class CHudItemEffectMeter_Weapon : public CHudItemEffectMeter
|
||
|
{
|
||
|
public:
|
||
|
CHudItemEffectMeter_Weapon( const char *pszElementName, C_TFPlayer* pPlayer, int iWeaponID, bool bBeeps=true, const char* pszResFile=NULL );
|
||
|
|
||
|
T* GetWeapon( void );
|
||
|
|
||
|
virtual void Update( C_TFPlayer* pPlayer, const char* pSoundScript = "TFPlayer.ReCharged" );
|
||
|
|
||
|
// Effect Meter Logic
|
||
|
virtual bool IsEnabled( void );
|
||
|
virtual const char* GetLabelText( void ) { return m_pWeapon ? m_pWeapon->GetEffectLabelText() : ""; }
|
||
|
virtual const char* GetIconName( void ) { return "../hud/ico_stickybomb_red"; }
|
||
|
virtual float GetProgress( void );
|
||
|
virtual bool ShouldBeep( void ) { return m_bBeeps; }
|
||
|
virtual const char *GetResFile( void );
|
||
|
virtual int GetCount( void ) { return -1; }
|
||
|
virtual bool ShouldFlash( void ) { return false; }
|
||
|
virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
|
||
|
virtual bool ShouldDraw( void );
|
||
|
virtual bool ShowPercentSymbol( void ) { return false; }
|
||
|
virtual bool IsKillstreakMeter( void ) { return false; }
|
||
|
|
||
|
private:
|
||
|
CHandle<T> m_pWeapon;
|
||
|
int m_iWeaponID;
|
||
|
bool m_bBeeps;
|
||
|
const char* m_pszResFile;
|
||
|
};
|
||
|
|
||
|
class CHudItemEffectMeter_Rune : public CHudItemEffectMeter
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CHudItemEffectMeter_Rune( const char *pszElementName, C_TFPlayer* pPlayer );
|
||
|
|
||
|
// Effect Meter Logic
|
||
|
virtual bool IsEnabled( void );
|
||
|
virtual float GetProgress( void );
|
||
|
virtual bool ShouldDraw( void );
|
||
|
|
||
|
virtual const char* GetLabelText( void ) { return "Powerup"; }
|
||
|
virtual const char *GetResFile( void ) { return "resource/UI/HudPowerupEffectMeter.res"; }
|
||
|
|
||
|
virtual int GetCount( void ) { return -1; }
|
||
|
virtual bool ShouldFlash( void );
|
||
|
virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
|
||
|
};
|
||
|
|
||
|
#ifdef STAGING_ONLY
|
||
|
class CHudItemEffectMeter_SpaceJump : public CHudItemEffectMeter
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CHudItemEffectMeter_SpaceJump( const char *pszElementName, C_TFPlayer* pPlayer );
|
||
|
|
||
|
// Effect Meter Logic
|
||
|
virtual bool IsEnabled( void );
|
||
|
virtual float GetProgress( void );
|
||
|
virtual bool ShouldDraw( void );
|
||
|
|
||
|
virtual const char* GetLabelText( void ) { return "Fuel"; }
|
||
|
virtual const char *GetResFile( void ) { return "resource/UI/HudItemEffectMeter.res"; }
|
||
|
|
||
|
virtual int GetCount( void ) { return -1; }
|
||
|
virtual bool ShouldFlash( void ) { return false; }
|
||
|
virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
|
||
|
};
|
||
|
|
||
|
class CHudItemEffectMeter_Tranq : public CHudItemEffectMeter
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CHudItemEffectMeter_Tranq( const char *pszElementName, C_TFPlayer* pPlayer );
|
||
|
|
||
|
// Effect Meter Logic
|
||
|
virtual bool IsEnabled( void );
|
||
|
virtual float GetProgress( void );
|
||
|
|
||
|
virtual const char* GetLabelText( void ) { return "Finesse"; }
|
||
|
virtual const char *GetResFile( void ) { return "resource/UI/HudItemEffectMeter_Tranq.res"; }
|
||
|
|
||
|
virtual int GetCount( void ) { return -1; }
|
||
|
virtual bool ShouldFlash( void ) { return false; }
|
||
|
virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
|
||
|
};
|
||
|
#endif // STAGING_ONLY
|
||
|
|
||
|
#endif
|