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.
249 lines
9.5 KiB
249 lines
9.5 KiB
5 years ago
|
//========= 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
|