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.

154 lines
4.1 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef CSTRIKECLIENTSCOREBOARDDIALOG_H
#define CSTRIKECLIENTSCOREBOARDDIALOG_H
#ifdef _WIN32
#pragma once
#endif
#include <clientscoreboarddialog.h>
#include <vgui_controls/ImagePanel.h>
#include "cs_shareddefs.h"
#include <vgui_controls/Frame.h>
#include "vgui_avatarimage.h"
const int cMaxScoreLines = 32; // This value must be > 2
//-----------------------------------------------------------------------------
// Purpose: Game ScoreBoard
//-----------------------------------------------------------------------------
class CCSClientScoreBoardDialog : public CClientScoreBoardDialog
{
private:
DECLARE_CLASS_SIMPLE( CCSClientScoreBoardDialog, CClientScoreBoardDialog );
public:
CCSClientScoreBoardDialog( IViewPort *pViewPort );
~CCSClientScoreBoardDialog();
virtual void Update();
// vgui overrides for rounded corner background
void UpdateMvpElements();
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void ResetFromGameOverState();
// [tj] Hook in here to hide other UI
virtual void ShowPanel( bool state );
// [tj] So we can do processing every frame
virtual void OnThink();
protected:
struct PlayerScoreInfo
{
const char* szName;
const char* szClanTag;
int playerIndex;
int frags;
int deaths;
int ping;
const char* szStatus;
bool bStatusPlayerColor;
};
struct PlayerDisplay
{
vgui::Label* pNameLabel;
vgui::Label* pClanLabel;
vgui::Label* pScoreLabel;
vgui::Label* pDeathsLabel;
vgui::Label* pPingLabel;
vgui::Label* pMVPCountLabel;
CAvatarImagePanel* pAvatar;
vgui::ImagePanel* pStatusImage;
vgui::ImagePanel* pMVPImage;
vgui::ImagePanel* pSelect;
};
struct TeamDisplayInfo
{
Color playerDataColor;
Color playerClanColor;
PlayerDisplay playerDisplay[cMaxScoreLines];
CUtlVector<PlayerScoreInfo*> playerScores; // For sorting team members outside of the listboxes
int scoreAreaInnerHeight;
int scoreAreaLineHeight;
int scoreAreaLinePreferredLeading;
int scoreAreaStartY;
int scoreAreaMinX;
int scoreAreaMaxX;
int maxPlayersVisible;
};
bool GetPlayerScoreInfo( int playerIndex, PlayerScoreInfo& playerScoreInfo );
void UpdateTeamPlayerDisplay( TeamDisplayInfo& teamDisplay );
void SetupTeamDisplay( TeamDisplayInfo& teamDisplay, const char* szTeamPrefix );
void UpdateTeamInfo();
void UpdatePlayerList();
bool ForceLocalPlayerVisible( TeamDisplayInfo& teamDisplay );
void UpdateSpectatorList();
void UpdateHLTVList( void );
void UpdateMatchEndText();
bool ShouldShowAsSpectator( int iPlayerIndex );
void FireGameEvent( IGameEvent *event );
void UpdatePlayerColors( void );
void AdjustFontToFit( const char *pString, vgui::Label *pLabel );
static int PlayerSortFunction( PlayerScoreInfo* const* pPS1, PlayerScoreInfo* const* pPS2 );
private:
vgui::HFont m_listItemFont;
vgui::HFont m_listItemFontSmaller;
vgui::HFont m_listItemFontSmallest;
vgui::HFont m_MVPFont;
int m_iImageDead;
int m_iImageMVP; // Not used in the section list explicitly. Drawn over it
int m_iImageDominated;
int m_iImageNemesis;
int m_iImageBomb;
int m_iImageVIP;
int m_iImageFriend;
int m_iImageNemesisDead;
int m_iImageDominationDead;
Color m_DeadPlayerDataColor;
Color m_PlayerDataBgColor;
Color m_DeadPlayerClanColor;
vgui::Label* m_pWinConditionLabel;
vgui::Label* m_pClockLabel;
vgui::Label* m_pLabelMapName;
vgui::Label* m_pServerLabel;
bool m_gameOver;
wchar_t m_pMapName[256];
wchar_t m_pServerName[256];
wchar_t m_pStatsEnabled[256];
wchar_t m_pStatsDisabled[256];
int m_LocalPlayerItemID;
int m_MVPXOffset;
TeamDisplayInfo m_teamDisplayT;
TeamDisplayInfo m_teamDisplayCT;
};
#endif // CSTRIKECLIENTSCOREBOARDDIALOG_H