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.

195 lines
6.3 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================
  7. #ifndef C_TF_ITEMEFFECTMETER_H
  8. #define C_TF_ITEMEFFECTMETER_H
  9. #include "cbase.h"
  10. #include "c_tf_player.h"
  11. #include "c_tf_playerclass.h"
  12. #include "hudelement.h"
  13. #include "iclientmode.h"
  14. #include "tf_weapon_invis.h"
  15. #include <vgui_controls/EditablePanel.h>
  16. #include <vgui_controls/ProgressBar.h>
  17. #include <vgui_controls/Label.h>
  18. using namespace vgui;
  19. class CHudItemEffectMeter;
  20. class CItemEffectMeterLogic;
  21. class CItemEffectMeterManager;
  22. extern CItemEffectMeterManager g_ItemEffectMeterManager;
  23. //-----------------------------------------------------------------------------
  24. // Purpose:
  25. //-----------------------------------------------------------------------------
  26. class CItemEffectMeterManager : public CGameEventListener
  27. {
  28. public:
  29. ~CItemEffectMeterManager();
  30. void ClearExistingMeters();
  31. void SetPlayer( C_TFPlayer* pPlayer );
  32. void Update( C_TFPlayer* pPlayer );
  33. virtual void FireGameEvent( IGameEvent *event );
  34. int GetNumEnabled( void );
  35. private:
  36. CUtlVector< vgui::DHANDLE< CHudItemEffectMeter > > m_Meters;
  37. };
  38. //-----------------------------------------------------------------------------
  39. // Purpose:
  40. //-----------------------------------------------------------------------------
  41. DECLARE_AUTO_LIST( IHudItemEffectMeterAutoList );
  42. class CHudItemEffectMeter : public CHudElement, public EditablePanel, public IHudItemEffectMeterAutoList
  43. {
  44. DECLARE_CLASS_SIMPLE( CHudItemEffectMeter, EditablePanel );
  45. public:
  46. CHudItemEffectMeter( const char *pszElementName, C_TFPlayer* pPlayer );
  47. ~CHudItemEffectMeter();
  48. static void CreateHudElementsForClass( C_TFPlayer* pPlayer, CUtlVector< vgui::DHANDLE< CHudItemEffectMeter > >& outMeters );
  49. // Hud Element
  50. virtual void ApplySchemeSettings( IScheme *scheme );
  51. virtual void PerformLayout();
  52. virtual bool ShouldDraw( void );
  53. virtual void Update( C_TFPlayer* pPlayer, const char* pSoundScript = "TFPlayer.ReCharged" );
  54. // Effect Meter Logic
  55. virtual bool IsEnabled( void ) { return m_bEnabled; }
  56. virtual const char* GetLabelText( void );
  57. virtual const char* GetIconName( void ) { return "../hud/ico_stickybomb_red"; }
  58. virtual float GetProgress( void );
  59. virtual bool ShouldBeep( void )
  60. {
  61. if ( m_pPlayer )
  62. {
  63. CTFWeaponInvis *pWpn = (CTFWeaponInvis *) m_pPlayer->Weapon_OwnsThisID( TF_WEAPON_INVIS );
  64. if ( pWpn && pWpn->HasFeignDeath() )
  65. return true;
  66. }
  67. return false;
  68. }
  69. virtual const char *GetResFile( void ) { return "resource/UI/HudItemEffectMeter.res"; }
  70. virtual int GetCount( void ) { return -1; }
  71. virtual bool ShouldFlash( void ) { return false; }
  72. virtual bool ShowPercentSymbol( void ) { return false; }
  73. virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
  74. virtual bool IsKillstreakMeter( void ) { return false; }
  75. protected:
  76. vgui::Label *m_pLabel;
  77. vgui::ContinuousProgressBar *m_pProgressBar;
  78. float m_flOldProgress;
  79. protected:
  80. CHandle<C_TFPlayer> m_pPlayer;
  81. bool m_bEnabled;
  82. CPanelAnimationVarAliasType( float, m_iXOffset, "x_offset", "0", "proportional_float" );
  83. };
  84. //-----------------------------------------------------------------------------
  85. // Purpose: Template variation for weapon based meters.
  86. //-----------------------------------------------------------------------------
  87. template <class T>
  88. class CHudItemEffectMeter_Weapon : public CHudItemEffectMeter
  89. {
  90. public:
  91. CHudItemEffectMeter_Weapon( const char *pszElementName, C_TFPlayer* pPlayer, int iWeaponID, bool bBeeps=true, const char* pszResFile=NULL );
  92. T* GetWeapon( void );
  93. virtual void Update( C_TFPlayer* pPlayer, const char* pSoundScript = "TFPlayer.ReCharged" );
  94. // Effect Meter Logic
  95. virtual bool IsEnabled( void );
  96. virtual const char* GetLabelText( void ) { return m_pWeapon ? m_pWeapon->GetEffectLabelText() : ""; }
  97. virtual const char* GetIconName( void ) { return "../hud/ico_stickybomb_red"; }
  98. virtual float GetProgress( void );
  99. virtual bool ShouldBeep( void ) { return m_bBeeps; }
  100. virtual const char *GetResFile( void );
  101. virtual int GetCount( void ) { return -1; }
  102. virtual bool ShouldFlash( void ) { return false; }
  103. virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
  104. virtual bool ShouldDraw( void );
  105. virtual bool ShowPercentSymbol( void ) { return false; }
  106. virtual bool IsKillstreakMeter( void ) { return false; }
  107. private:
  108. CHandle<T> m_pWeapon;
  109. int m_iWeaponID;
  110. bool m_bBeeps;
  111. const char* m_pszResFile;
  112. };
  113. class CHudItemEffectMeter_Rune : public CHudItemEffectMeter
  114. {
  115. public:
  116. CHudItemEffectMeter_Rune( const char *pszElementName, C_TFPlayer* pPlayer );
  117. // Effect Meter Logic
  118. virtual bool IsEnabled( void );
  119. virtual float GetProgress( void );
  120. virtual bool ShouldDraw( void );
  121. virtual const char* GetLabelText( void ) { return "Powerup"; }
  122. virtual const char *GetResFile( void ) { return "resource/UI/HudPowerupEffectMeter.res"; }
  123. virtual int GetCount( void ) { return -1; }
  124. virtual bool ShouldFlash( void );
  125. virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
  126. };
  127. #ifdef STAGING_ONLY
  128. class CHudItemEffectMeter_SpaceJump : public CHudItemEffectMeter
  129. {
  130. public:
  131. CHudItemEffectMeter_SpaceJump( const char *pszElementName, C_TFPlayer* pPlayer );
  132. // Effect Meter Logic
  133. virtual bool IsEnabled( void );
  134. virtual float GetProgress( void );
  135. virtual bool ShouldDraw( void );
  136. virtual const char* GetLabelText( void ) { return "Fuel"; }
  137. virtual const char *GetResFile( void ) { return "resource/UI/HudItemEffectMeter.res"; }
  138. virtual int GetCount( void ) { return -1; }
  139. virtual bool ShouldFlash( void ) { return false; }
  140. virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
  141. };
  142. class CHudItemEffectMeter_Tranq : public CHudItemEffectMeter
  143. {
  144. public:
  145. CHudItemEffectMeter_Tranq( const char *pszElementName, C_TFPlayer* pPlayer );
  146. // Effect Meter Logic
  147. virtual bool IsEnabled( void );
  148. virtual float GetProgress( void );
  149. virtual const char* GetLabelText( void ) { return "Finesse"; }
  150. virtual const char *GetResFile( void ) { return "resource/UI/HudItemEffectMeter_Tranq.res"; }
  151. virtual int GetCount( void ) { return -1; }
  152. virtual bool ShouldFlash( void ) { return false; }
  153. virtual Color GetFgColor( void ) { return Color( 255, 255, 255, 255 ); }
  154. };
  155. #endif // STAGING_ONLY
  156. #endif