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.
248 lines
9.5 KiB
248 lines
9.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef TF_MATCH_SUMMARY_H |
|
#define TF_MATCH_SUMMARY_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "hudelement.h" |
|
#include <vgui_controls/EditablePanel.h> |
|
#include <vgui_controls/SectionedListPanel.h> |
|
#include "tf_imagepanel.h" |
|
#include "econ_controls.h" |
|
#include "drawing_panel.h" |
|
#include "tf_particlepanel.h" |
|
#include "tf_matchmaking_shared.h" |
|
#include "tf_gamerules.h" |
|
#include "tf_match_join_handlers.h" |
|
|
|
using namespace vgui; |
|
|
|
class CAvatarImagePanel; |
|
class CTFBadgePanel; |
|
|
|
enum matchsummary_displaystate_t |
|
{ |
|
MS_STATE_INITIAL = 0, |
|
MS_STATE_DRAWING, |
|
MS_STATE_STATS, |
|
MS_STATE_BRONZE_MEDALS, |
|
MS_STATE_SILVER_MEDALS, |
|
MS_STATE_GOLD_MEDALS, |
|
MS_STATE_FINAL, |
|
|
|
MS_NUM_STATES |
|
}; |
|
|
|
enum matchsummary_columns_t |
|
{ |
|
MS_COLUMN_INVALID = -1, |
|
|
|
MS_COLUMN_MEDAL = 0, |
|
MS_COLUMN_AVATAR, |
|
MS_COLUMN_SPACER, |
|
MS_COLUMN_NAME, |
|
MS_COLUMN_CLASS, |
|
MS_COLUMN_SCORE, |
|
MS_COLUMN_SCORE_MEDAL, |
|
MS_COLUMN_KILLS, |
|
MS_COLUMN_KILLS_MEDAL, |
|
MS_COLUMN_DAMAGE, |
|
MS_COLUMN_DAMAGE_MEDAL, |
|
MS_COLUMN_HEALING, |
|
MS_COLUMN_HEALING_MEDAL, |
|
MS_COLUMN_SUPPORT, |
|
MS_COLUMN_SUPPORT_MEDAL, |
|
|
|
MS_NUM_COLUMNS |
|
}; |
|
|
|
class TFSectionedListPanel : public vgui::SectionedListPanel |
|
{ |
|
private: |
|
DECLARE_CLASS_SIMPLE( TFSectionedListPanel, vgui::SectionedListPanel ); |
|
|
|
public: |
|
TFSectionedListPanel( Panel *parent, const char *panelName ) : BaseClass( parent, panelName ){} |
|
virtual ~TFSectionedListPanel(){} |
|
|
|
CPanelAnimationVarAliasType( int, m_iMedalWidth, "medal_width", "s.05", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAvatarWidth, "avatar_width", "s.1", "proportional_width" ); // Avatar width doesn't scale with resolution |
|
CPanelAnimationVarAliasType( int, m_iSpacerWidth, "spacer", "s.1", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iNameWidth, "name_width", "s.1", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iClassWidth, "class_width", "s.1", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAwardWidth, "award_width", "s.1", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iStatsWidth, "stats_width", "s.1", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iHorizFillInset, "horiz_inset", "5", "proportional_int" ); |
|
}; |
|
|
|
class CTFMatchSummary : public CHudElement, public vgui::EditablePanel |
|
{ |
|
private: |
|
DECLARE_CLASS_SIMPLE( CTFMatchSummary, vgui::EditablePanel ); |
|
|
|
public: |
|
CTFMatchSummary( const char *pElementName ); |
|
virtual ~CTFMatchSummary(); |
|
|
|
virtual bool ShouldDraw( void ) OVERRIDE; |
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE; |
|
virtual void PerformLayout() OVERRIDE; |
|
virtual void SetVisible( bool state ) OVERRIDE; |
|
virtual void OnTick() OVERRIDE; |
|
virtual void LevelInit( void ) OVERRIDE; |
|
virtual void LevelShutdown( void ) OVERRIDE; |
|
|
|
virtual GameActionSet_t GetPreferredActionSet() OVERRIDE { return GAME_ACTION_SET_IN_GAME_HUD; } |
|
virtual void FireGameEvent( IGameEvent *event ) OVERRIDE; |
|
|
|
bool ShowPerformanceMedals( void ); |
|
|
|
private: |
|
|
|
void Update( void ); |
|
void InitPlayerList( TFSectionedListPanel *pPlayerList, int nTeam ); |
|
static bool TFPlayerSortFunc( vgui::SectionedListPanel *list, int itemID1, int itemID2 ); |
|
void UpdateTeamInfo(); |
|
void UpdatePlayerList(); |
|
void UpdatePlayerAvatar( int playerIndex, KeyValues *kv ); |
|
void RecalculateMedalCounts(); |
|
void UpdateBadgePanels( CUtlVector<CTFBadgePanel*> &pBadgePanels, TFSectionedListPanel *pPlayerList ); |
|
|
|
void InternalUpdateMedalCountForType( int iTeam, StatMedal_t eMedal ); |
|
matchsummary_columns_t InternalAddMedalKeyValues( int iIndex, StatMedal_t eMedal, KeyValues *pKeyValues, int nTotalMedals = -1 ); |
|
void FireMedalEffects( Panel *pPanel, int nPanelXPos, int nPanelYPos, int nPanelWide, int nPanelTall, StatMedal_t eParticleMedal ); |
|
|
|
private: |
|
EditablePanel *m_pTeamScoresPanel; |
|
|
|
int m_iImageClass[SCOREBOARD_CLASS_ICONS]; |
|
int m_iImageClassAlt[SCOREBOARD_CLASS_ICONS]; |
|
int m_iImageMedals[StatMedal_Max]; |
|
|
|
CDrawingPanel *m_pDrawingPanel; |
|
|
|
vgui::EditablePanel *m_pBlueTeamPanel; |
|
vgui::EditablePanel *m_pRedTeamPanel; |
|
|
|
vgui::EditablePanel *m_pMainStatsContainer; |
|
vgui::EditablePanel *m_pPlayerListBlueParent; |
|
TFSectionedListPanel *m_pPlayerListBlue; |
|
vgui::EditablePanel *m_pPlayerListRedParent; |
|
TFSectionedListPanel *m_pPlayerListRed; |
|
CExLabel *m_pBlueTeamScore; |
|
CExLabel *m_pBlueTeamScoreDropshadow; |
|
EditablePanel *m_pBlueTeamScoreBG; |
|
EditablePanel *m_pBluePlayerListBG; |
|
CExLabel *m_pRedTeamScore; |
|
CExLabel *m_pRedTeamScoreDropshadow; |
|
EditablePanel *m_pRedTeamScoreBG; |
|
EditablePanel *m_pRedPlayerListBG; |
|
EditablePanel *m_pBlueMedalsPanel; |
|
EditablePanel *m_pRedMedalsPanel; |
|
vgui::ImagePanel *m_pRedTeamImage; |
|
vgui::ImagePanel *m_pBlueTeamImage; |
|
CAvatarImagePanel *m_pRedLeaderAvatarImage; |
|
CAvatarImagePanel *m_pBlueLeaderAvatarImage; |
|
EditablePanel *m_pRedLeaderAvatarBG; |
|
EditablePanel *m_pBlueLeaderAvatarBG; |
|
EditablePanel *m_pStatsLabelPanel; |
|
CExLabel *m_pStatsAndMedals; |
|
CExLabel *m_pStatsAndMedalsShadow; |
|
CExLabel *m_pBlueTeamName; |
|
CExLabel *m_pRedTeamName; |
|
CExLabel *m_pRedTeamWinner; |
|
CExLabel *m_pRedTeamWinnerDropshadow; |
|
CExLabel *m_pBlueTeamWinner; |
|
CExLabel *m_pBlueTeamWinnerDropshadow; |
|
|
|
CTFParticlePanel *m_pParticlePanel; |
|
|
|
vgui::EditablePanel *m_pStatsBgPanel; |
|
|
|
vgui::ImageList *m_pImageList; |
|
CUtlMap<CSteamID,int> m_mapAvatarsToImageList; |
|
|
|
vgui::HFont m_hFont; |
|
bool m_bLargeMatchGroup; |
|
bool m_bXPShown; |
|
|
|
float m_flDrawingPanelTime; |
|
|
|
CPanelAnimationVar( Color, m_clrGoldMedal, "GoldMedalText", "214 186 24 255" ); |
|
CPanelAnimationVar( Color, m_clrSilverMedal, "SilverMedalText", "222 218 222 255" ); |
|
CPanelAnimationVar( Color, m_clrBronzeMedal, "BronzeMedalText", "214 125 57 255" ); |
|
|
|
CPanelAnimationVarAliasType( int, m_iAnimBluePlayerListParent, "AnimBluePlayerListParent", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBlueTeamScore, "AnimBlueTeamScore", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBlueTeamScoreDropshadow, "AnimBlueTeamScoreDropshadow", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBlueTeamScoreBG, "AnimBlueTeamScoreBG", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBluePlayerListBG, "AnimBluePlayerListBG", "0", "proportional_width" ); |
|
|
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamScoreBGWide, "AnimRedTeamScoreBGWide", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamScoreBGXPos, "AnimRedTeamScoreBGXPos", "0", "proportional_xpos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamScoreWide, "AnimRedTeamScoreWide", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamScoreXPos, "AnimRedTeamScoreXPos", "0", "proportional_xpos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamScoreDropshadowWide, "AnimRedTeamScoreDropshadowWide", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamScoreDropshadowXPos, "AnimRedTeamScoreDropshadowXPos", "0", "proportional_xpos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedPlayerListParentWide, "AnimRedPlayerListParentWide", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedPlayerListParentXPos, "AnimRedPlayerListParentXPos", "0", "proportional_xpos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedPlayerListBGWide, "AnimRedPlayerListBGWide", "0", "proportional_width" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedPlayerListBGXPos, "AnimRedPlayerListBGXPos", "0", "proportional_xpos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBlueMedalsYPos, "AnimBlueMedalsYPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedMedalsYPos, "AnimRedMedalsYPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimStatsLabelPanel6v6YPos, "AnimStatsLabelPanel6v6YPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBlueTeamLabel6v6YPos, "AnimBlueTeamLabel6v6YPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamLabel6v6YPos, "AnimRedTeamLabel6v6YPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimStatsLabelPanel12v12YPos, "AnimStatsLabelPanel12v12YPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimBlueTeamLabel12v12YPos, "AnimBlueTeamLabel12v12YPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimRedTeamLabel12v12YPos, "AnimRedTeamLabel12v12YPos", "0", "proportional_ypos" ); |
|
CPanelAnimationVarAliasType( int, m_iAnimStatsContainer12v12YPos, "AnimStatsContainer12v12YPos", "0", "proportional_ypos" ); |
|
|
|
struct MatchDataUpdate_t |
|
{ |
|
uint32 unRating; |
|
int nDelta; |
|
int nScoreRank; |
|
int nKillsRank; |
|
int nDamageRank; |
|
int nHealingRank; |
|
int nSupportRank; |
|
}; |
|
MatchDataUpdate_t m_SkillRatings[MAX_PLAYERS + 1]; |
|
|
|
int m_iCurrentState; |
|
float m_flNextActionTime; |
|
|
|
int m_nMedalsToAward_Bronze_Blue; |
|
int m_nMedalsToAward_Silver_Blue; |
|
int m_nMedalsToAward_Gold_Blue; |
|
int m_nMedalsToAward_Bronze_Red; |
|
int m_nMedalsToAward_Silver_Red; |
|
int m_nMedalsToAward_Gold_Red; |
|
|
|
int m_nMedalsRevealed; |
|
|
|
int m_nNumMedalsThisUpdate; |
|
|
|
bool m_bBlueGoldValueRevealed; |
|
bool m_bBlueSilverValueRevealed; |
|
bool m_bBlueBronzeValueRevealed; |
|
bool m_bRedGoldValueRevealed; |
|
bool m_bRedSilverValueRevealed; |
|
bool m_bRedBronzeValueRevealed; |
|
bool m_bPlayerAbandoned; |
|
|
|
float m_flMedalSoundTime; |
|
|
|
CUtlVector< CTFBadgePanel* > m_pBlueBadgePanels; |
|
CUtlVector< CTFBadgePanel* > m_pRedBadgePanels; |
|
}; |
|
|
|
#endif //TF_MATCH_SUMMARY_H
|
|
|