summaryrefslogtreecommitdiff
path: root/game/client/game_controls/clientscoreboarddialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/game_controls/clientscoreboarddialog.h')
-rw-r--r--game/client/game_controls/clientscoreboarddialog.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/game/client/game_controls/clientscoreboarddialog.h b/game/client/game_controls/clientscoreboarddialog.h
new file mode 100644
index 0000000..896f0d7
--- /dev/null
+++ b/game/client/game_controls/clientscoreboarddialog.h
@@ -0,0 +1,129 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef CLIENTSCOREBOARDDIALOG_H
+#define CLIENTSCOREBOARDDIALOG_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <vgui_controls/EditablePanel.h>
+#include <game/client/iviewport.h>
+#include "GameEventListener.h"
+
+#define TYPE_NOTEAM 0 // NOTEAM must be zero :)
+#define TYPE_TEAM 1 // a section for a single team
+#define TYPE_PLAYERS 2
+#define TYPE_SPECTATORS 3 // a section for a spectator group
+#define TYPE_BLANK 4
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game ScoreBoard
+//-----------------------------------------------------------------------------
+class CClientScoreBoardDialog : public vgui::EditablePanel, public IViewPortPanel, public CGameEventListener
+{
+private:
+ DECLARE_CLASS_SIMPLE( CClientScoreBoardDialog, vgui::EditablePanel );
+
+protected:
+// column widths at 640
+ enum { NAME_WIDTH = 160, SCORE_WIDTH = 60, DEATH_WIDTH = 60, PING_WIDTH = 80, VOICE_WIDTH = 0, FRIENDS_WIDTH = 0 };
+ // total = 340
+
+public:
+ CClientScoreBoardDialog( IViewPort *pViewPort );
+ ~CClientScoreBoardDialog();
+
+ virtual const char *GetName( void ) { return PANEL_SCOREBOARD; }
+ virtual void SetData(KeyValues *data) {};
+ virtual void Reset();
+ virtual void Update();
+ virtual bool NeedsUpdate( void );
+ virtual bool HasInputElements( void ) { return true; }
+ virtual void ShowPanel( bool bShow );
+
+ virtual bool ShowAvatars()
+ {
+#ifdef CSS_PERF_TEST
+ return false;
+#endif
+ return IsPC();
+ }
+
+ // both vgui::Frame and IViewPortPanel define these, so explicitly define them here as passthroughs to vgui
+ vgui::VPANEL GetVPanel( void ) { return BaseClass::GetVPanel(); }
+ virtual bool IsVisible() { return BaseClass::IsVisible(); }
+ virtual void SetParent( vgui::VPANEL parent ) { BaseClass::SetParent( parent ); }
+
+ // IGameEventListener interface:
+ virtual void FireGameEvent( IGameEvent *event);
+
+ virtual void UpdatePlayerAvatar( int playerIndex, KeyValues *kv );
+
+ virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_NONE; }
+
+protected:
+ MESSAGE_FUNC_INT( OnPollHideCode, "PollHideCode", code );
+
+ // functions to override
+ virtual bool GetPlayerScoreInfo(int playerIndex, KeyValues *outPlayerInfo);
+ virtual void InitScoreboardSections();
+ virtual void UpdateTeamInfo();
+ virtual void UpdatePlayerInfo();
+ virtual void OnThink();
+ virtual void AddHeader(); // add the start header of the scoreboard
+ virtual void AddSection(int teamType, int teamNumber); // add a new section header for a team
+ virtual int GetAdditionalHeight() { return 0; }
+
+ // sorts players within a section
+ static bool StaticPlayerSortFunc(vgui::SectionedListPanel *list, int itemID1, int itemID2);
+
+ virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
+
+ virtual void PostApplySchemeSettings( vgui::IScheme *pScheme );
+
+ // finds the player in the scoreboard
+ int FindItemIDForPlayerIndex(int playerIndex);
+
+ int m_iNumTeams;
+
+ vgui::SectionedListPanel *m_pPlayerList;
+ int m_iSectionId; // the current section we are entering into
+
+ int s_VoiceImage[5];
+ int TrackerImage;
+ int m_HLTVSpectators;
+ int m_ReplaySpectators;
+ float m_fNextUpdateTime;
+
+ void MoveLabelToFront(const char *textEntryName);
+ void MoveToCenterOfScreen();
+
+ vgui::ImageList *m_pImageList;
+ CUtlMap<CSteamID,int> m_mapAvatarsToImageList;
+
+ CPanelAnimationVar( int, m_iAvatarWidth, "avatar_width", "34" ); // Avatar width doesn't scale with resolution
+ CPanelAnimationVarAliasType( int, m_iNameWidth, "name_width", "136", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iClassWidth, "class_width", "35", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iScoreWidth, "score_width", "35", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iDeathWidth, "death_width", "35", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iPingWidth, "ping_width", "23", "proportional_int" );
+
+private:
+ int m_iPlayerIndexSymbol;
+ int m_iDesiredHeight;
+ IViewPort *m_pViewPort;
+ ButtonCode_t m_nCloseKey;
+
+
+ // methods
+ void FillScoreBoard();
+};
+
+
+#endif // CLIENTSCOREBOARDDIALOG_H