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