//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef CSACHIEVEMENTSPAGE_H #define CSACHIEVEMENTSPAGE_H #ifdef _WIN32 #pragma once #endif #include "vgui_controls/PanelListPanel.h" #include "vgui_controls/Label.h" #include "tier1/KeyValues.h" #include "vgui_controls/PropertyPage.h" #include "vgui_controls/Button.h" #include "c_cs_player.h" #include "vgui_avatarimage.h" #include "GameEventListener.h" class CCSBaseAchievement; class IScheme; class CAchievementsPageGroupPanel; class StatCard; #define ACHIEVED_ICON_PATH "hud/icon_check.vtf" #define LOCK_ICON_PATH "hud/icon_locked.vtf" // Loads an achievement's icon into a specified image panel, or turns the panel off if no achievement icon was found. bool CSLoadAchievementIconForPage( vgui::ImagePanel* pIconPanel, CCSBaseAchievement *pAchievement, const char *pszExt = NULL ); // Loads an achievement's icon into a specified image panel, or turns the panel off if no achievement icon was found. bool CSLoadIconForPage( vgui::ImagePanel* pIconPanel, const char* pFilename, const char *pszExt = NULL ); // Updates a listed achievement item's progress bar. void CSUpdateProgressBarForPage( vgui::EditablePanel* pPanel, CCSBaseAchievement *pAchievement, Color clrProgressBar ); //////////////////////////////////////////////////////////////////////////// // PC version ////////////////////////////////////////////////////////////////////////// class CAchievementsPage : public vgui::PropertyPage, public CGameEventListener { DECLARE_CLASS_SIMPLE ( CAchievementsPage, vgui::PropertyPage ); public: CAchievementsPage( vgui::Panel *parent, const char *name ); ~CAchievementsPage(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); void UpdateTotalProgressDisplay(); virtual void UpdateAchievementDialogInfo( void ); virtual void OnPageShow(); virtual void OnThink(); virtual void ApplySettings( KeyValues *pResourceData ); virtual void OnSizeChanged( int newWide, int newTall ); virtual void FireGameEvent( IGameEvent *event ); void CreateNewAchievementGroup( int iMinRange, int iMaxRange ); void CreateOrUpdateComboItems( bool bCreate ); void UpdateAchievementList(CAchievementsPageGroupPanel* groupPanel); void UpdateAchievementList(int minID, int maxID); vgui::PanelListPanel *m_pAchievementsList; vgui::ImagePanel *m_pListBG; vgui::PanelListPanel *m_pGroupsList; vgui::ImagePanel *m_pGroupListBG; vgui::ImagePanel *m_pPercentageBarBackground; vgui::ImagePanel *m_pPercentageBar; StatCard* m_pStatCard; int m_iFixedWidth; bool m_bStatsDirty; bool m_bAchievementsDirty; typedef struct { int m_iMinRange; int m_iMaxRange; } achievement_group_t; int m_iNumAchievementGroups; achievement_group_t m_AchievementGroups[15]; }; class CHiddenHUDToggleButton : public vgui::Button { DECLARE_CLASS_SIMPLE( CHiddenHUDToggleButton, vgui::Button ); public: CHiddenHUDToggleButton( vgui::Panel *pParent, const char *pName, const char *pText ); virtual void DoClick( void ); }; ////////////////////////////////////////////////////////////////////////// // Individual item panel, displaying stats for one achievement class CAchievementsPageItemPanel : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CAchievementsPageItemPanel, vgui::EditablePanel ); public: CAchievementsPageItemPanel( vgui::PanelListPanel *parent, const char* name); ~CAchievementsPageItemPanel(); void SetAchievementInfo ( CCSBaseAchievement* pAchievement ); CCSBaseAchievement* GetAchievementInfo( void ) { return m_pSourceAchievement; } void UpdateAchievementInfo( vgui::IScheme *pScheme ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); void ToggleShowOnHUDButton(); MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel ); private: static void PreloadResourceFile(); CCSBaseAchievement* m_pSourceAchievement; int m_iSourceAchievementIndex; vgui::PanelListPanel *m_pParent; vgui::Label *m_pAchievementNameLabel; vgui::Label *m_pAchievementDescLabel; vgui::Label *m_pPercentageText; vgui::Label *m_pAwardDate; vgui::ImagePanel *m_pLockedIcon; vgui::ImagePanel *m_pAchievementIcon; vgui::ImagePanel *m_pPercentageBarBackground; vgui::ImagePanel *m_pPercentageBar; vgui::CheckButton *m_pShowOnHUDButton; vgui::IScheme *m_pSchemeSettings; CHiddenHUDToggleButton *m_pHiddenHUDToggleButton; CPanelAnimationVar( Color, m_clrProgressBar, "ProgressBarColor", "140 140 140 255" ); }; class CGroupButton : public vgui::Button { DECLARE_CLASS_SIMPLE( CGroupButton, vgui::Button ); public: CGroupButton( vgui::Panel *pParent, const char *pName, const char *pText ); virtual void DoClick( void ); }; ////////////////////////////////////////////////////////////////////////// // Individual achievement group panel, displaying info for one achievement group class CAchievementsPageGroupPanel : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CAchievementsPageGroupPanel, vgui::EditablePanel ); public: CAchievementsPageGroupPanel( vgui::PanelListPanel *parent, CAchievementsPage *owner, const char* name, int iListItemID ); ~CAchievementsPageGroupPanel(); void SetGroupInfo ( const wchar_t* name, int firstAchievementID, int lastAchievementID ); void UpdateAchievementInfo( vgui::IScheme *pScheme ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); int GetFirstAchievementID() { return m_iFirstAchievementID; } int GetLastAchievementID() { return m_iLastAchievementID; } vgui::PanelListPanel* GetParent() { return m_pParent; } CAchievementsPage* GetOwner() { return m_pOwner; } void SetGroupActive(bool active) { m_bActiveButton = active; } bool IsGroupActive() { return m_bActiveButton; } private: void PreloadResourceFile( void ); vgui::PanelListPanel *m_pParent; CAchievementsPage *m_pOwner; vgui::Label *m_pAchievementGroupLabel; vgui::Label *m_pPercentageText; CGroupButton *m_pGroupButton; vgui::ImagePanel *m_pGroupIcon; vgui::ImagePanel *m_pPercentageBarBackground; vgui::ImagePanel *m_pPercentageBar; vgui::IScheme *m_pSchemeSettings; bool m_bActiveButton; CPanelAnimationVar( Color, m_clrProgressBar, "ProgressBarColor", "140 140 140 255" ); int m_iFirstAchievementID; int m_iLastAchievementID; wchar_t *m_pGroupName; }; #endif // CSACHIEVEMENTSPAGE_H