//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef ACHIEVEMENTSDIALOG_H #define ACHIEVEMENTSDIALOG_H #ifdef _WIN32 #pragma once #endif #include "basedialog.h" #include "vgui_controls/PanelListPanel.h" #include "vgui_controls/Label.h" #include "tier1/KeyValues.h" #include "TGAImagePanel.h" #define MAX_ACHIEVEMENT_GROUPS 25 class IAchievement; #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 LoadAchievementIcon( vgui::ImagePanel* pIconPanel, IAchievement *pAchievement, const char *pszExt = NULL ); // Updates a listed achievement item's progress bar. void UpdateProgressBar( vgui::EditablePanel* pPanel, IAchievement *pAchievement, Color clrProgressBar ); //----------------------------------------------------------------------------- // Purpose: Simple menu to choose a matchmaking session type //----------------------------------------------------------------------------- class CAchievementsDialog_XBox : public CBaseDialog { DECLARE_CLASS_SIMPLE( CAchievementsDialog_XBox, CBaseDialog ); public: CAchievementsDialog_XBox(vgui::Panel *parent); ~CAchievementsDialog_XBox(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void ApplySettings( KeyValues *pResourceData ); virtual void PerformLayout(); virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void HandleKeyRepeated( vgui::KeyCode code ); virtual void OnClose(); private: vgui::Panel *m_pProgressBg; vgui::Panel *m_pProgressBar; vgui::Label *m_pProgressPercent; vgui::Label *m_pNumbering; vgui::Label *m_pUpArrow; vgui::Label *m_pDownArrow; KeyValues* m_pResourceData; CFooterPanel *m_pFooter; bool m_bCenterOnScreen; int m_iNumItems; int m_nTotalAchievements; // Total achievements for this title int m_nUnlocked; int m_iSelection; int m_iScroll; }; //////////////////////////////////////////////////////////////////////////// // PC version ////////////////////////////////////////////////////////////////////////// class CAchievementsDialog : public vgui::Frame { DECLARE_CLASS_SIMPLE ( CAchievementsDialog, vgui::Frame ); public: CAchievementsDialog( vgui::Panel *parent ); ~CAchievementsDialog(); virtual void ApplySchemeSettings( IScheme *pScheme ); void ScrollToItem( int nDirection ); virtual void OnKeyCodePressed( vgui::KeyCode code ); virtual void UpdateAchievementDialogInfo( void ); virtual void OnCommand( const char* command ); virtual void ApplySettings( KeyValues *pResourceData ); virtual void OnSizeChanged( int newWide, int newTall ); MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel ); MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); void CreateNewAchievementGroup( int iMinRange, int iMaxRange ); void CreateOrUpdateComboItems( bool bCreate ); void UpdateAchievementList(); vgui::PanelListPanel *m_pAchievementsList; vgui::ImagePanel *m_pListBG; vgui::ImagePanel *m_pPercentageBarBackground; vgui::ImagePanel *m_pPercentageBar; vgui::ImagePanel *m_pSelectionHighlight; vgui::ComboBox *m_pAchievementPackCombo; vgui::CheckButton *m_pHideAchievedCheck; int m_nUnlocked; int m_nTotalAchievements; int m_iFixedWidth; typedef struct { int m_iMinRange; int m_iMaxRange; int m_iNumAchievements; int m_iNumUnlocked; int m_iDropDownGroupID; } achievement_group_t; int m_iNumAchievementGroups; achievement_group_t m_AchievementGroups[ MAX_ACHIEVEMENT_GROUPS ]; int m_nScrollItem; int m_nOldScrollItem; }; ////////////////////////////////////////////////////////////////////////// // Individual item panel, displaying stats for one achievement class CAchievementDialogItemPanel : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CAchievementDialogItemPanel, vgui::EditablePanel ); public: CAchievementDialogItemPanel( vgui::PanelListPanel *parent, const char* name, int iListItemID ); ~CAchievementDialogItemPanel(); void SetAchievementInfo ( IAchievement* pAchievement ); IAchievement* GetAchievementInfo( void ) { return m_pSourceAchievement; } void UpdateAchievementInfo( IScheme *pScheme ); virtual void ApplySchemeSettings( IScheme *pScheme ); void ToggleShowOnHUD( void ); MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel ); private: void PreloadResourceFile( void ); IAchievement* m_pSourceAchievement; int m_iSourceAchievementIndex; vgui::PanelListPanel *m_pParent; vgui::Label *m_pAchievementNameLabel; vgui::Label *m_pAchievementDescLabel; vgui::Label *m_pPercentageText; vgui::ImagePanel *m_pLockedIcon; vgui::ImagePanel *m_pAchievementIcon; vgui::ImagePanel *m_pPercentageBarBackground; vgui::ImagePanel *m_pPercentageBar; vgui::CheckButton *m_pShowOnHUDCheck; vgui::IScheme *m_pSchemeSettings; CPanelAnimationVar( Color, m_clrProgressBar, "ProgressBarColor", "140 140 140 255" ); int m_iListItemID; }; #endif // ACHIEVEMENTSDIALOG_H