Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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

5 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