summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/tf_classmenu.h
blob: 8d908da42031774f21165721118d67bf4e252e7c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
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