//========= 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 #include #include 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 m_pPlayer; bool m_bEnabled; CPanelAnimationVarAliasType( float, m_iXOffset, "x_offset", "0", "proportional_float" ); }; //----------------------------------------------------------------------------- // Purpose: Template variation for weapon based meters. //----------------------------------------------------------------------------- template 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 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