sqwarmed/sdk_src/game/client/hud_baseachievement_tracker.h

118 lines
4.1 KiB
C++

#ifndef HUD_ACHIEVEMENT_TRACKER_H
#define HUD_ACHIEVEMENT_TRACKER_H
#ifdef _WIN32
#pragma once
#endif
#include "hudelement.h"
#include <vgui_controls/EditablePanel.h>
class IAchievement;
namespace vgui
{
class ImagePanel;
};
//-----------------------------------------------------------------------------
// Purpose: Draws information about one achievement (name, description, progress)
//-----------------------------------------------------------------------------
class CAchievementTrackerItem : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CAchievementTrackerItem, vgui::EditablePanel );
public:
CAchievementTrackerItem( vgui::Panel* pParent, const char *pElementName );
virtual ~CAchievementTrackerItem();
virtual void ApplySchemeSettings( vgui::IScheme *scheme );
virtual void SetAchievement( IAchievement* pAchievement );
virtual void OnThink();
virtual void SetSlot( int i ) { m_iSlot = i; }
virtual void PerformLayout();
virtual void AchievementIncremented( int iCount );
virtual int GetAchievementID() { return m_iAchievementID; }
virtual float GetGlow() { return m_flGlow; }
virtual void ShowAccumulatedIncrements();
virtual int GetLastCount() { return m_iLastCount; }
virtual void UpdateAchievementDisplay();
protected:
vgui::Label *m_pAchievementName;
vgui::Label *m_pAchievementNameGlow;
vgui::Label *m_pAchievementDesc;
vgui::ImagePanel *m_pProgressBarBackground;
vgui::ImagePanel *m_pProgressBar;
int m_iAchievementID;
int m_iLastPaintedAchievementID;
int m_iLastProgressBarGoal, m_iLastProgressBarCount, m_iLastCount;
int m_iSlot;
float m_flGlowTime;
float m_flGlow;
float m_flShowIncrementsTime;
int m_iAccumulatedIncrement;
CPanelAnimationVarAliasType( int, m_iPadding, "Padding", "1", "proportional_int" ); // space between description and bar
};
//---------------------------------------------------------------------------------------------
// Purpose: Scrolls a floating number up the screen to indicate achievement progression
//---------------------------------------------------------------------------------------------
enum floating_number_directions
{
FN_DIR_UP,
FN_DIR_DOWN,
FN_DIR_LEFT,
FN_DIR_RIGHT,
};
class CFloatingAchievementNumber : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CFloatingAchievementNumber, vgui::EditablePanel );
public:
CFloatingAchievementNumber( int iProgress, int x, int y, floating_number_directions iDir, vgui::Panel* pParent );
virtual ~CFloatingAchievementNumber();
virtual void ApplySchemeSettings( vgui::IScheme *scheme );
virtual void OnThink();
protected:
vgui::Label *m_pNumberLabel;
int m_iStartX;
int m_iStartY;
int m_iProgress;
float m_fStartTime;
floating_number_directions m_iDirection;
CPanelAnimationVarAliasType( int, m_iScrollDistance, "ScrollDistance", "40", "proportional_int" ); // how far the floating number will scroll up before disappearing completely
};
//-----------------------------------------------------------------------------
// Purpose: Creates panels to show achievements on the HUD
//-----------------------------------------------------------------------------
class CHudBaseAchievementTracker : public CHudElement, public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CHudBaseAchievementTracker, vgui::EditablePanel );
public:
CHudBaseAchievementTracker( const char *pElementName );
virtual void Reset();
virtual void LevelInit();
virtual void ApplySchemeSettings( vgui::IScheme *scheme );
virtual void OnThink();
virtual bool ShouldDraw();
virtual void PerformLayout();
virtual bool ShouldShowAchievement( IAchievement *pAchievement );
virtual void UpdateAchievementItems();
virtual int GetMaxAchievementsShown();
virtual CAchievementTrackerItem* GetAchievementPanel( int i );
virtual CAchievementTrackerItem* CreateAchievementPanel();
protected:
float m_flNextThink;
CUtlVector<CAchievementTrackerItem*> m_AchievementItem;
CPanelAnimationVarAliasType( int, m_iItemPadding, "ItemPadding", "8", "proportional_int" ); // space between each achievement item
};
#endif // HUD_ACHIEVEMENT_TRACKER_H