Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

138 lines
4.4 KiB

5 years ago
//========= 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<CSteamID, int> 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