//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //============================================================================= #ifndef TF_STATSSUMMARY_H #define TF_STATSSUMMARY_H #ifdef _WIN32 #pragma once #endif #include "tf_hud_statpanel.h" #include "GameEventListener.h" struct ClassDetails_t { TFStatType_t statType; // type of stat uint iFlagsClass; // bit mask of classes to show this stat for const char * szResourceName; // name of label resource (format "Most damage:" const char * szAltResourceName; // name of alternative label resource "damage" }; extern ClassDetails_t g_PerClassStatDetails[15]; #define MAKESTATFLAG(x) ( 1 << x ) #define ALL_CLASSES 0xFFFFFFFF class CTFStatsSummaryPanel : public vgui::EditablePanel, public CGameEventListener { private: DECLARE_CLASS_SIMPLE( CTFStatsSummaryPanel, vgui::EditablePanel ); public: CTFStatsSummaryPanel(); CTFStatsSummaryPanel( vgui::Panel *parent ); ~CTFStatsSummaryPanel(); void Init( void ); virtual void ApplySchemeSettings(vgui::IScheme *pScheme); virtual void OnCommand( const char *command ); virtual void OnKeyCodePressed( KeyCode code ); virtual void PerformLayout(); virtual void OnThink(); void SetStats( CUtlVector &vecClassStats ); void ShowModal(); void SetupForEmbedded( void ); void OnMapLoad( const char *pMapName ); virtual void FireGameEvent( IGameEvent *event ); private: MESSAGE_FUNC( OnActivate, "activate" ); MESSAGE_FUNC( OnDeactivate, "deactivate" ); enum StatDisplay_t { SHOW_MAX = 1, SHOW_TOTAL, SHOW_AVG }; void Reset(); void SetDefaultSelections(); void UpdateDialog(); void UpdateBarCharts(); void UpdateClassDetails( bool bIsMVM = false ); void UpdateTip(); void UpdateControls(); void ClearMapLabel(); void ShowMapInfo( bool bShowMapInfo, bool bIsMVM = false, bool bBackgroundOverride = false ); void UpdateLeaderboard(); void InitBarChartComboBox( vgui::ComboBox *pComboBox ); void SetValueAsClass( const char *pDialogVariable, int iValue, int iPlayerClass ); void DisplayBarValue( int iChart, int iClass, ClassStats_t &stats, TFStatType_t statType, StatDisplay_t flags, float flMaxValue ); static float GetDisplayValue( ClassStats_t &stats, TFStatType_t statType, StatDisplay_t statDisplay ); const char *RenderValue( float flValue, TFStatType_t statType, StatDisplay_t statDisplay ); static float SafeCalcFraction( float flNumerator, float flDemoninator ); static int __cdecl CompareClassStats( const ClassStats_t *pStats0, const ClassStats_t *pStats1 ); MESSAGE_FUNC( DoResetStats, "DoResetStats" ); MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); vgui::EditablePanel *m_pPlayerData; vgui::EditablePanel *m_pInteractiveHeaders; vgui::EditablePanel *m_pNonInteractiveHeaders; vgui::ComboBox *m_pBarChartComboBoxA; vgui::ComboBox *m_pBarChartComboBoxB; vgui::ComboBox *m_pClassComboBox; CTFImagePanel *m_pTipImage; vgui::Label *m_pTipText; vgui::EditablePanel *m_pMapInfoPanel; vgui::Panel *m_pLeaderboardTitle; vgui::ImagePanel *m_pMainBackground; void UpdateMainBackground( void ); vgui::EditablePanel *m_pContributedPanel; #ifdef _X360 CTFFooter *m_pFooter; #else vgui::Button *m_pNextTipButton; vgui::Button *m_pCloseButton; vgui::Button *m_pResetStatsButton; #endif bool m_bInteractive; // are we in interactive mode bool m_bEmbedded; // are we embedded in a property sheet? bool m_bControlsLoaded; // have we loaded controls yet CUtlVector m_aClassStats; // stats data int m_xStartLHBar; // x min of bars in left hand bar chart int m_xStartRHBar; // x min of bars in right hand bar chart int m_iBarMaxWidth; // width of bars in bar charts int m_iBarHeight; // height of bars in bar charts int m_iSelectedClass; // what class is selected, if any int m_iTotalSpawns; // how many spawns of all classes does this player have TFStatType_t m_statBarGraph[2]; // what stat is displayed in the left hand and right hand bar graphs StatDisplay_t m_displayBarGraph[2]; // the display type for the left hand and right hand bar graphs bool m_bShowingLeaderboard; bool m_bLoadingCommunityMap; int m_xStartLeaderboard; int m_yStartLeaderboard; CUtlVector< vgui::EditablePanel* > m_vecLeaderboardEntries; #ifdef _X360 bool m_bShowBackButton; #endif }; CTFStatsSummaryPanel *GStatsSummaryPanel(); void DestroyStatsSummaryPanel(); const char *FormatSeconds( int seconds ); void UpdateStatSummaryPanels( CUtlVector &vecClassStats ); #endif // TF_STATSSUMMARY_H