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.

177 lines
5.2 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #ifndef TF_CLASSMENU_H
  8. #define TF_CLASSMENU_H
  9. #ifdef _WIN32
  10. #pragma once
  11. #endif
  12. #include <classmenu.h>
  13. #include <vgui_controls/EditablePanel.h>
  14. #include "vgui_controls/KeyRepeat.h"
  15. #include <filesystem.h>
  16. #include <tf_shareddefs.h>
  17. #include "cbase.h"
  18. #include "tf_controls.h"
  19. #include "tf_gamerules.h"
  20. #include "basemodelpanel.h"
  21. #include "IconPanel.h"
  22. #include <vgui_controls/CheckButton.h>
  23. #include "GameEventListener.h"
  24. #include "c_tf_playerresource.h"
  25. #include "tf_playermodelpanel.h"
  26. #include "tf_mann_vs_machine_stats.h"
  27. using namespace vgui;
  28. #define CLASS_COUNT_IMAGES 11
  29. class CTFClassTipsPanel;
  30. //-----------------------------------------------------------------------------
  31. //
  32. //-----------------------------------------------------------------------------
  33. class CTFClassTipsItemPanel : public vgui::EditablePanel
  34. {
  35. DECLARE_CLASS_SIMPLE( CTFClassTipsItemPanel, vgui::EditablePanel );
  36. public:
  37. CTFClassTipsItemPanel( Panel *parent, const char *pszName, int iListItemID );
  38. ~CTFClassTipsItemPanel();
  39. void SetClassTip( const wchar_t *pwszText, const char *pszIcon );
  40. virtual void ApplySchemeSettings( IScheme *pScheme );
  41. private:
  42. vgui::ImagePanel *m_pTipIcon;
  43. CExLabel *m_pTipLabel;
  44. };
  45. //-----------------------------------------------------------------------------
  46. //
  47. //-----------------------------------------------------------------------------
  48. class CTFClassMenu : public CClassMenu, public CGameEventListener
  49. {
  50. private:
  51. DECLARE_CLASS_SIMPLE( CTFClassMenu, CClassMenu );
  52. public:
  53. CTFClassMenu( IViewPort *pViewPort );
  54. virtual void Update( void );
  55. virtual Panel *CreateControlByName( const char *controlName );
  56. virtual void OnTick( void );
  57. virtual void PaintBackground( void );
  58. virtual void SetVisible( bool state );
  59. virtual void PerformLayout();
  60. MESSAGE_FUNC_PTR_CHARPTR( OnShowPage, "ShowPage", panel, page );
  61. CON_COMMAND_MEMBER_F( CTFClassMenu, "join_class", Join_Class, "Send a joinclass command", 0 );
  62. virtual void OnCommand( const char *command );
  63. virtual void OnClose();
  64. virtual void ShowPanel( bool bShow );
  65. virtual void UpdateClassCounts( void ){}
  66. void SelectClass( int iClass );
  67. virtual int GetTeamNumber( void ) = 0;
  68. // IGameEventListener interface:
  69. virtual void FireGameEvent( IGameEvent *event );
  70. MESSAGE_FUNC( OnEconUIClosed, "EconUIClosed" ); // If the econ UI was opened (for editing loadout), we'll get notified when the user's done.
  71. virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_IN_GAME_HUD; }
  72. protected:
  73. virtual void ApplySchemeSettings( IScheme *pScheme );
  74. virtual void OnKeyCodePressed( KeyCode code );
  75. CExImageButton *GetCurrentClassButton();
  76. virtual void OnKeyCodeReleased( vgui::KeyCode code );
  77. virtual void OnThink();
  78. virtual void UpdateNumClassLabels( int iTeam );
  79. void UpdateButtonSelectionStates( int iClass );
  80. void SetCancelButtonVisible( bool bVisible );
  81. int GetCurrentPlayerClass();
  82. void LoadItems();
  83. void Go();
  84. protected:
  85. CExImageButton *m_pClassButtons[TF_CLASS_MENU_BUTTONS];
  86. vgui::ImagePanel *m_pMvmUpgradeImages[TF_CLASS_MENU_BUTTONS];
  87. CSCHintIcon *m_pClassHintIcons[TF_CLASS_MENU_BUTTONS];
  88. CTFClassTipsPanel *m_pClassTipsPanel;
  89. CTFPlayerModelPanel *m_pTFPlayerModelPanel;
  90. CExButton *m_pEditLoadoutButton;
  91. CExLabel *m_pSelectAClassLabel;
  92. CExplanationPopup *m_pClassHighlightPanel;
  93. CSCHintIcon *m_pEditLoadoutHintIcon;
  94. CSCHintIcon *m_pCancelHintIcon;
  95. private:
  96. void CheckMvMUpgrades();
  97. #ifdef _X360
  98. CTFFooter *m_pFooter;
  99. #endif
  100. ButtonCode_t m_iClassMenuKey;
  101. int m_iCurrentClassIndex;
  102. vgui::CKeyRepeatHandler m_KeyRepeat;
  103. int m_nBaseMusicGuid;
  104. #ifndef _X360
  105. CTFImagePanel *m_ClassCountImages[CLASS_COUNT_IMAGES];
  106. CExLabel *m_pCountLabel;
  107. CTFImagePanel *m_pLocalPlayerImage;
  108. CTFImagePanel *m_pLocalPlayerBG;
  109. int m_iLocalPlayerClass;
  110. #endif
  111. };
  112. //-----------------------------------------------------------------------------
  113. // Purpose: Draws the blue class menu
  114. //-----------------------------------------------------------------------------
  115. class CTFClassMenu_Blue : public CTFClassMenu
  116. {
  117. private:
  118. DECLARE_CLASS_SIMPLE( CTFClassMenu_Blue, CTFClassMenu );
  119. public:
  120. CTFClassMenu_Blue( IViewPort *pViewPort ) : BaseClass( pViewPort ) {}
  121. virtual const char *GetName( void ) { return PANEL_CLASS_BLUE; }
  122. virtual int GetTeamNumber( void ) { return TF_TEAM_BLUE; }
  123. virtual void UpdateClassCounts( void ){ UpdateNumClassLabels( TF_TEAM_BLUE ); }
  124. };
  125. //-----------------------------------------------------------------------------
  126. // Purpose: Draws the red class menu
  127. //-----------------------------------------------------------------------------
  128. class CTFClassMenu_Red : public CTFClassMenu
  129. {
  130. private:
  131. DECLARE_CLASS_SIMPLE( CTFClassMenu_Red, CTFClassMenu );
  132. public:
  133. CTFClassMenu_Red( IViewPort *pViewPort ) : BaseClass( pViewPort ) {}
  134. virtual const char *GetName( void ) { return PANEL_CLASS_RED; }
  135. virtual int GetTeamNumber( void ) { return TF_TEAM_RED; }
  136. virtual void UpdateClassCounts( void ){ UpdateNumClassLabels( TF_TEAM_RED ); }
  137. };
  138. #endif // TF_CLASSMENU_H