summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/tf_classmenu.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/vgui/tf_classmenu.h')
-rw-r--r--game/client/tf/vgui/tf_classmenu.h177
1 files changed, 177 insertions, 0 deletions
diff --git a/game/client/tf/vgui/tf_classmenu.h b/game/client/tf/vgui/tf_classmenu.h
new file mode 100644
index 0000000..8d908da
--- /dev/null
+++ b/game/client/tf/vgui/tf_classmenu.h
@@ -0,0 +1,177 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TF_CLASSMENU_H
+#define TF_CLASSMENU_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <classmenu.h>
+#include <vgui_controls/EditablePanel.h>
+#include "vgui_controls/KeyRepeat.h"
+#include <filesystem.h>
+#include <tf_shareddefs.h>
+#include "cbase.h"
+#include "tf_controls.h"
+#include "tf_gamerules.h"
+#include "basemodelpanel.h"
+#include "IconPanel.h"
+#include <vgui_controls/CheckButton.h>
+#include "GameEventListener.h"
+#include "c_tf_playerresource.h"
+#include "tf_playermodelpanel.h"
+#include "tf_mann_vs_machine_stats.h"
+
+using namespace vgui;
+
+#define CLASS_COUNT_IMAGES 11
+
+class CTFClassTipsPanel;
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+class CTFClassTipsItemPanel : public vgui::EditablePanel
+{
+ DECLARE_CLASS_SIMPLE( CTFClassTipsItemPanel, vgui::EditablePanel );
+
+public:
+ CTFClassTipsItemPanel( Panel *parent, const char *pszName, int iListItemID );
+ ~CTFClassTipsItemPanel();
+
+ void SetClassTip( const wchar_t *pwszText, const char *pszIcon );
+ virtual void ApplySchemeSettings( IScheme *pScheme );
+
+private:
+ vgui::ImagePanel *m_pTipIcon;
+ CExLabel *m_pTipLabel;
+};
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+class CTFClassMenu : public CClassMenu, public CGameEventListener
+{
+private:
+ DECLARE_CLASS_SIMPLE( CTFClassMenu, CClassMenu );
+
+public:
+ CTFClassMenu( IViewPort *pViewPort );
+
+ virtual void Update( void );
+ virtual Panel *CreateControlByName( const char *controlName );
+ virtual void OnTick( void );
+ virtual void PaintBackground( void );
+ virtual void SetVisible( bool state );
+ virtual void PerformLayout();
+
+ MESSAGE_FUNC_PTR_CHARPTR( OnShowPage, "ShowPage", panel, page );
+ CON_COMMAND_MEMBER_F( CTFClassMenu, "join_class", Join_Class, "Send a joinclass command", 0 );
+
+ virtual void OnCommand( const char *command );
+ virtual void OnClose();
+ virtual void ShowPanel( bool bShow );
+ virtual void UpdateClassCounts( void ){}
+ void SelectClass( int iClass );
+
+ virtual int GetTeamNumber( void ) = 0;
+
+ // IGameEventListener interface:
+ virtual void FireGameEvent( IGameEvent *event );
+
+ MESSAGE_FUNC( OnEconUIClosed, "EconUIClosed" ); // If the econ UI was opened (for editing loadout), we'll get notified when the user's done.
+
+ virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_IN_GAME_HUD; }
+
+protected:
+ virtual void ApplySchemeSettings( IScheme *pScheme );
+ virtual void OnKeyCodePressed( KeyCode code );
+ CExImageButton *GetCurrentClassButton();
+ virtual void OnKeyCodeReleased( vgui::KeyCode code );
+ virtual void OnThink();
+ virtual void UpdateNumClassLabels( int iTeam );
+
+ void UpdateButtonSelectionStates( int iClass );
+ void SetCancelButtonVisible( bool bVisible );
+ int GetCurrentPlayerClass();
+ void LoadItems();
+ void Go();
+
+protected:
+
+ CExImageButton *m_pClassButtons[TF_CLASS_MENU_BUTTONS];
+ vgui::ImagePanel *m_pMvmUpgradeImages[TF_CLASS_MENU_BUTTONS];
+ CSCHintIcon *m_pClassHintIcons[TF_CLASS_MENU_BUTTONS];
+
+ CTFClassTipsPanel *m_pClassTipsPanel;
+ CTFPlayerModelPanel *m_pTFPlayerModelPanel;
+ CExButton *m_pEditLoadoutButton;
+ CExLabel *m_pSelectAClassLabel;
+ CExplanationPopup *m_pClassHighlightPanel;
+ CSCHintIcon *m_pEditLoadoutHintIcon;
+ CSCHintIcon *m_pCancelHintIcon;
+
+private:
+
+ void CheckMvMUpgrades();
+
+#ifdef _X360
+ CTFFooter *m_pFooter;
+#endif
+
+ ButtonCode_t m_iClassMenuKey;
+ int m_iCurrentClassIndex;
+ vgui::CKeyRepeatHandler m_KeyRepeat;
+
+ int m_nBaseMusicGuid;
+
+#ifndef _X360
+ CTFImagePanel *m_ClassCountImages[CLASS_COUNT_IMAGES];
+ CExLabel *m_pCountLabel;
+ CTFImagePanel *m_pLocalPlayerImage;
+ CTFImagePanel *m_pLocalPlayerBG;
+ int m_iLocalPlayerClass;
+#endif
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Draws the blue class menu
+//-----------------------------------------------------------------------------
+
+class CTFClassMenu_Blue : public CTFClassMenu
+{
+private:
+ DECLARE_CLASS_SIMPLE( CTFClassMenu_Blue, CTFClassMenu );
+
+public:
+ CTFClassMenu_Blue( IViewPort *pViewPort ) : BaseClass( pViewPort ) {}
+
+ virtual const char *GetName( void ) { return PANEL_CLASS_BLUE; }
+ virtual int GetTeamNumber( void ) { return TF_TEAM_BLUE; }
+ virtual void UpdateClassCounts( void ){ UpdateNumClassLabels( TF_TEAM_BLUE ); }
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Draws the red class menu
+//-----------------------------------------------------------------------------
+
+class CTFClassMenu_Red : public CTFClassMenu
+{
+private:
+ DECLARE_CLASS_SIMPLE( CTFClassMenu_Red, CTFClassMenu );
+
+public:
+ CTFClassMenu_Red( IViewPort *pViewPort ) : BaseClass( pViewPort ) {}
+
+ virtual const char *GetName( void ) { return PANEL_CLASS_RED; }
+ virtual int GetTeamNumber( void ) { return TF_TEAM_RED; }
+ virtual void UpdateClassCounts( void ){ UpdateNumClassLabels( TF_TEAM_RED ); }
+};
+
+#endif // TF_CLASSMENU_H
+