//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef TF_HUD_MATCH_STATUS_H #define TF_HUD_MATCH_STATUS_H #ifdef _WIN32 #pragma once #endif #include "GameEventListener.h" #include "hudelement.h" #include "basemodelpanel.h" #include "tf_teamstatus.h" #include "tf_matchmaking_shared.h" using namespace vgui; bool ShouldUseMatchHUD(); //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CRoundCounterPanel : public EditablePanel, public CGameEventListener { public: DECLARE_CLASS_SIMPLE( CRoundCounterPanel, EditablePanel ); typedef CUtlVector< ImagePanel* > ImageVector; CRoundCounterPanel( Panel *parent, const char *panelName ); ~CRoundCounterPanel(); virtual void ApplySchemeSettings(IScheme *pScheme) OVERRIDE; virtual void ApplySettings(KeyValues *inResourceData) OVERRIDE; virtual void PerformLayout() OVERRIDE; virtual void OnThink() OVERRIDE; virtual void FireGameEvent(IGameEvent * event) OVERRIDE; private: void CreateRoundPanels( ImageVector& vecImages, const char* pszName, KeyValues* pKVSettings ); enum EAlignment { ALIGN_WEST, ALIGN_EAST }; void LayoutPanels( ImageVector& vecImages, EAlignment eAlignment, int nStartPos, int nMaxWide ); KeyValues* m_pRoundIndicatorKVs; KeyValues* m_pRoundWinIndicatorRedKV; KeyValues* m_pRoundWinIndicatorBlueKV; ImageVector m_vecRedRoundIndicators; ImageVector m_vecBlueRoundIndicators; ImageVector m_vecRedWinIndicators; ImageVector m_vecBlueWinIndicators; bool m_bCountDirty; CPanelAnimationVarAliasType( int, m_nStartingWidth, "starting_width", "10", "proportional_int" ); CPanelAnimationVarAliasType( int, m_nWidthPerRound, "width_per_round", "10", "proportional_int" ); CPanelAnimationVarAliasType( int, m_nIndicatorStartOffset, "indicator_start_offset", "8", "proportional_int" ); CPanelAnimationVarAliasType( int, m_nIndicatorPanelStep, "indicator_max_wide", "10", "proportional_int" ); }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFHudMatchStatus : public CHudElement, public EditablePanel { DECLARE_CLASS_SIMPLE( CTFHudMatchStatus, EditablePanel ); public: CTFHudMatchStatus( const char *pElementName ); virtual ~CTFHudMatchStatus( void ); virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; virtual void FireGameEvent( IGameEvent * event ) OVERRIDE; virtual void OnThink() OVERRIDE; virtual void PerformLayout() OVERRIDE; virtual bool ShouldDraw( void ) OVERRIDE; virtual void Reset() OVERRIDE; void SetPanelsVisible(); private: void ShowMatchStartDoors(); void ShowRoundSign( int nRoundNumber ); void InitPlayerList( SectionedListPanel *pPlayerList, int nTeam ); void UpdatePlayerList(); void UpdatePlayerAvatar( int playerIndex, KeyValues *kv ); void UpdateTeamInfo(); void HandleCountdown( int nTime ); CRoundCounterPanel *m_pRoundCounter; class CTFHudTimeStatus *m_pTimePanel; CModelPanel *m_pRoundSignModel; CTFTeamStatus *m_pTeamStatus; CModelPanel *m_pMatchStartModelPanel; EMatchGroup m_eMatchGroupSettings; vgui::EditablePanel *m_pBlueTeamPanel; vgui::SectionedListPanel *m_pPlayerListBlue; vgui::EditablePanel *m_pRedTeamPanel; vgui::SectionedListPanel *m_pPlayerListRed; vgui::ImageList *m_pImageList; CUtlMap m_mapAvatarsToImageList; CAvatarImagePanel *m_pRedLeaderAvatarImage; EditablePanel *m_pRedLeaderAvatarBG; vgui::ImagePanel *m_pRedTeamImage; CExLabel *m_pRedTeamName; CAvatarImagePanel *m_pBlueLeaderAvatarImage; EditablePanel *m_pBlueLeaderAvatarBG; vgui::ImagePanel *m_pBlueTeamImage; CExLabel *m_pBlueTeamName; CPanelAnimationVar( int, m_iAvatarWidth, "avatar_width", "34" ); // Avatar width doesn't scale with resolution CPanelAnimationVarAliasType( int, m_iSpacerWidth, "spacer", "5", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iNameWidth, "name_width", "136", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iHorizFillInset, "horiz_inset", "4", "proportional_int" ); vgui::HFont m_hPlayerListFont; bool m_bUseMatchHUD; }; #endif // TF_HUD_MATCH_STATUS_H