diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/hud_vote.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/hud_vote.h')
| -rw-r--r-- | game/client/hud_vote.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/game/client/hud_vote.h b/game/client/hud_vote.h new file mode 100644 index 0000000..ab68a26 --- /dev/null +++ b/game/client/hud_vote.h @@ -0,0 +1,200 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef HUD_VOTE_H +#define HUD_VOTE_H +#ifdef _WIN32 +#pragma once +#endif + +#include "hudelement.h" +#include <vgui_controls/EditablePanel.h> +#include <vgui_controls/SectionedListPanel.h> +#include <vgui_controls/Frame.h> +#include <vgui_controls/Button.h> +#include <networkstringtabledefs.h> +#include "vgui_avatarimage.h" + +extern INetworkStringTable *g_pStringTableServerMapCycle; + +#ifdef TF_CLIENT_DLL +extern INetworkStringTable *g_pStringTableServerPopFiles; +extern INetworkStringTable *g_pStringTableServerMapCycleMvM; +#endif + +static const int k_MAX_VOTE_NAME_LENGTH = 256; + +namespace vgui +{ + class SectionedListPanel; + class ComboBox; + class ImageList; +}; + +struct VoteIssue_t +{ + char szName[k_MAX_VOTE_NAME_LENGTH]; + char szNameString[k_MAX_VOTE_NAME_LENGTH]; + bool bIsActive; +}; + +class VoteBarPanel : public vgui::Panel, public CGameEventListener +{ + DECLARE_CLASS_SIMPLE( VoteBarPanel, vgui::Panel ); + + VoteBarPanel( vgui::Panel *parent, const char *panelName ); + + virtual void Paint( void ); + virtual void FireGameEvent( IGameEvent *event ); + +private: + int m_nVoteOptionCount[MAX_VOTE_OPTIONS]; // Vote options counter + int m_nPotentialVotes; // If set, draw a line at this point to show the required bar length + + CPanelAnimationVarAliasType( int, m_iBoxSize, "box_size", "16", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iSpacer, "spacer", "4", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iBoxInset, "box_inset", "1", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_nYesTextureId, "yes_texture", "vgui/hud/vote_yes", "textureid" ); + CPanelAnimationVarAliasType( int, m_nNoTextureId, "no_texture", "vgui/hud/vote_no", "textureid" ); +}; + +//----------------------------------------------------------------------------- +// Purpose: A selection UI for votes that require additional parameters - such as players, maps +//----------------------------------------------------------------------------- + +class CVoteSetupDialog : public vgui::Frame +{ + DECLARE_CLASS_SIMPLE( CVoteSetupDialog, vgui::Frame ); + +public: + CVoteSetupDialog( vgui::Panel *parent ); + ~CVoteSetupDialog(); + + virtual void Activate(); + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void PostApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void ApplySettings(KeyValues *inResourceData); + + void InitializeIssueList( void ); + void UpdateCurrentMap( void ); + void AddVoteIssues( CUtlVector< VoteIssue_t > &m_VoteSetupIssues ); + void AddVoteIssueParams_MapCycle( CUtlStringList &m_VoteSetupMapCycle ); + +#ifdef TF_CLIENT_DLL + void AddVoteIssueParams_PopFiles( CUtlStringList &m_VoteSetupPopFiles ); +#endif + +private: + //MESSAGE_FUNC( OnItemSelected, "ItemSelected" ); + MESSAGE_FUNC_PTR( OnItemSelected, "ItemSelected", panel ); + + virtual void OnCommand( const char *command ); + virtual void OnClose( void ); + + void RefreshIssueParameters( void ); + void ResetData( void ); + + vgui::ComboBox *m_pComboBox; + + vgui::SectionedListPanel *m_pVoteSetupList; + vgui::SectionedListPanel *m_pVoteParameterList; + vgui::Button *m_pCallVoteButton; + vgui::ImageList *m_pImageList; + + CUtlVector< VoteIssue_t > m_VoteIssues; + CUtlVector<const char*> m_VoteIssuesMapCycle; + +#ifdef TF_CLIENT_DLL + CUtlVector<const char*> m_VoteIssuesPopFiles; +#endif + + CPanelAnimationVarAliasType( int, m_iIssueWidth, "issue_width", "100", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iParameterWidth, "parameter_width", "150", "proportional_int" ); + + bool m_bVoteButtonEnabled; + char m_szCurrentMap[MAX_MAP_NAME]; + + vgui::HFont m_hHeaderFont; + Color m_HeaderFGColor; + vgui::HFont m_hIssueFont; + Color m_IssueFGColor; + Color m_IssueFGColorDisabled; +}; + + +class CHudVote : public vgui::EditablePanel, public CHudElement +{ + DECLARE_CLASS_SIMPLE( CHudVote, vgui::EditablePanel ); + + CHudVote( const char *pElementName ); + + virtual void LevelInit( void ); + virtual void Init( void ); + virtual bool ShouldDraw( void ); + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void FireGameEvent( IGameEvent *event ); + virtual void OnThink(); + virtual int KeyInput( int down, ButtonCode_t keynum, const char *pszCurrentBinding ); + + // NOTE: Any MsgFunc_*() methods added here need to check IsPlayingDemo(). + void MsgFunc_CallVoteFailed( bf_read &msg ); + void MsgFunc_VoteStart( bf_read &msg ); + void MsgFunc_VotePass( bf_read &msg ); + void MsgFunc_VoteFailed( bf_read &msg ); + void MsgFunc_VoteSetup( bf_read &msg ); + + void PropagateOptionParameters( void ); + void ShowVoteUI( bool bShow ) { m_bShowVoteActivePanel = bShow; } + bool IsVoteUIActive( void ); + bool IsVoteSystemActive( void ) { return m_bVoteSystemActive; } + + bool IsShowingVoteSetupDialog(); + bool IsShowingVotingUI(); + + virtual GameActionSet_t GetPreferredActionSet() { return IsShowingVoteSetupDialog() ? GAME_ACTION_SET_MENUCONTROLS : CHudElement::GetPreferredActionSet(); } + +private: + bool IsPlayingDemo() const; + + EditablePanel *m_pVoteActive; + vgui::Label *m_pVoteActiveIssueLabel; + CAvatarImagePanel *m_pVoteActiveTargetAvatar; + VoteBarPanel *m_voteBar; + EditablePanel *m_pVoteFailed; + EditablePanel *m_pVotePassed; + EditablePanel *m_pCallVoteFailed; + CVoteSetupDialog *m_pVoteSetupDialog; + + CUtlVector< VoteIssue_t > m_VoteSetupIssues; + CUtlStringList m_VoteSetupMapCycle; + + int m_nVoteActiveIssueLabelX; + int m_nVoteActiveIssueLabelY; + +#ifdef TF_CLIENT_DLL + CUtlStringList m_VoteSetupPopFiles; +#endif + + CUtlStringList m_VoteSetupChoices; + + bool m_bVotingActive; + bool m_bVoteSystemActive; + float m_flVoteResultCycleTime; // what time will we cycle to the result + float m_flHideTime; // what time will we hide + bool m_bVotePassed; // what mode are we going to cycle to + int m_nVoteOptionCount[MAX_VOTE_OPTIONS]; // Vote options counter + int m_nPotentialVotes; // If set, draw a line at this point to show the required bar length + bool m_bIsYesNoVote; + int m_nVoteChoicesCount; + bool m_bPlayerVoted; + float m_flPostVotedHideTime; + bool m_bShowVoteActivePanel; + int m_iVoteCallerIdx; + int m_nVoteTeamIndex; // If defined, only players on this team will see/vote on the issue +}; + +#endif // HUD_VOTE_H |