summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_item_progress_tracker.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/tf_hud_item_progress_tracker.h')
-rw-r--r--game/client/tf/tf_hud_item_progress_tracker.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_item_progress_tracker.h b/game/client/tf/tf_hud_item_progress_tracker.h
new file mode 100644
index 0000000..62c7db0
--- /dev/null
+++ b/game/client/tf/tf_hud_item_progress_tracker.h
@@ -0,0 +1,213 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef TF_HUD_ITEM_PROGRESS_TRACKER_H
+#define TF_HUD_ITEM_PROGRESS_TRACKER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cbase.h"
+#include "hud_baseachievement_tracker.h"
+#include "iachievementmgr.h"
+#include "achievementmgr.h"
+#include "baseachievement.h"
+#include "gcsdk/gcclient_sharedobjectcache.h"
+#include "econ_item_inventory.h"
+
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+using namespace vgui;
+using namespace GCSDK;
+
+
+class CItemAttributeProgressPanel : public vgui::EditablePanel
+{
+ DECLARE_CLASS_SIMPLE( CItemAttributeProgressPanel, vgui::EditablePanel );
+public:
+ CItemAttributeProgressPanel( vgui::Panel* pParent, const char *pElementName, const CQuestObjectiveDefinition *pObjectiveDef, const char* pszResFileName );
+ virtual ~CItemAttributeProgressPanel() {}
+
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
+
+ virtual void OnThink() OVERRIDE;
+
+ void SetProgress( Color glowColor );
+ int GetContentTall() const;
+
+ void SetIsValid( bool bIsValid );
+ bool IsAdvanced() const { return m_bAdvanced; }
+
+ const uint32 m_nDefIndex;
+private:
+ float m_flLastThink;
+ float m_flUpdateTime;
+ bool m_bAdvanced;
+
+ Label *m_pAttribDesc;
+ Label *m_pAttribGlow;
+ Label *m_pAttribBlur;
+
+ Color m_enabledTextColor;
+ Color m_disabledTextColor;
+
+ CUtlString m_strNormalPointLocToken;
+ CUtlString m_strAdvancedLocToken;
+
+ CUtlString m_strResFileName;
+};
+
+class CItemTrackerPanel : public vgui::EditablePanel, public CGameEventListener
+{
+ DECLARE_CLASS_SIMPLE( CItemTrackerPanel, vgui::EditablePanel );
+public:
+
+ CItemTrackerPanel( vgui::Panel* pParent, const char *pElementName, const CEconItem* pItem, const char* pszItemTrackerResFile );
+ virtual ~CItemTrackerPanel();
+
+ virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void PerformLayout() OVERRIDE;
+ virtual int GetContentTall() const;
+
+ virtual void OnThink() OVERRIDE;
+ virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
+
+ bool IsStandardCompleted() const;
+ bool IsEverythingCompleted() const;
+ bool IsDoneProgressing() const { return m_flStandardCurrentProgress == m_flStandardTargetProgress && m_flBonusCurrentProgress == m_flBonusTargetProgress; }
+
+ void SetItem( const CEconItem* pItem );
+ CItemAttributeProgressPanel* GetPanelForObjective( const CQuestObjectiveDefinition* pObjective );
+ bool IsValidForLocalPlayer() const;
+
+ const CUtlVector< CItemAttributeProgressPanel* >& GetAttributePanels() const { return m_vecAttribPanels; }
+
+protected:
+
+ enum ESoundToPlay
+ {
+ SOUND_NONE = 0,
+ SOUND_STANDARD_OBJECTIVE_TICK,
+ SOUND_ADVANCED_OBJECTIVE_TICK,
+ SOUND_QUEST_STANDARD_COMPLETE,
+ SOUND_QUEST_ADVANCED_COMPLETE,
+ };
+
+ void CaptureProgress();
+ void UpdateBars();
+
+ vgui::Label *m_pItemName;
+
+
+ CEconItemViewHandle m_pItem;
+ CUtlVector< CItemAttributeProgressPanel* > m_vecAttribPanels;
+ EditablePanel *m_pCompletedContainer;
+ Label *m_pCompletedDescGlow;
+ Label *m_pCompletedNameGlow;
+
+ EditablePanel *m_pProgressBarBackground;
+ EditablePanel *m_pProgressBarStandard;
+ EditablePanel *m_pProgressBarBonus;
+ EditablePanel *m_pProgressBarStandardHighlight;
+ EditablePanel *m_pProgressBarBonusHighlight;
+
+ float m_flStandardCurrentProgress;
+ float m_flStandardTargetProgress;
+ float m_flBonusCurrentProgress;
+ float m_flBonusTargetProgress;
+ float m_flUpdateTime;
+ float m_flLastThink;
+
+ uint32 m_nMaxStandardPoints;
+ uint32 m_nMaxBonusPoints;
+
+ ESoundToPlay m_eSoundToPlay;
+ static float m_sflEventRecievedTime;
+
+ int m_nContentTall;
+
+ CUtlString m_strStandardObjectiveTick;
+ CUtlString m_strStandardPointsComplete;
+ CUtlString m_strAdvancedObjectiveComplete;
+ CUtlString m_strAdvancedPointsComplete;
+
+ CUtlString m_strItemAttributeResFile;
+ CUtlString m_strItemTrackerResFile;
+
+ CUtlString m_strProgressBarStandardLocToken;
+ CUtlString m_strProgressBarAdvancedLocToken;
+
+ CPanelAnimationVarAliasType( int, m_nAttribYStartOffset, "attrib_y_start_offset", "5", "proportional_int");
+ CPanelAnimationVarAliasType( int, m_nAttribYStep, "attrib_y_step", "0", "proportional_int");
+ CPanelAnimationVarAliasType( int, m_nAttribXOffset, "attrib_x_offset", "5", "proportional_int");
+ CPanelAnimationVar( bool, m_bNoEffects, "no_effects", "0" );
+
+ CPanelAnimationVarAliasType( int, m_nBarGap, "bar_gap", "0", "proportional_int");
+
+ CPanelAnimationVar( Color, m_clrStandardHighlight, "standard_glow_color", "QuestStandardHighlight" );
+ CPanelAnimationVar( Color, m_clrBonusHighlight, "bonus_glow_color", "QuestBonusHighlight" );
+};
+
+class CHudItemAttributeTracker : public CHudElement, public EditablePanel, public ISharedObjectListener
+{
+ DECLARE_CLASS_SIMPLE( CHudItemAttributeTracker, EditablePanel );
+public:
+ enum ETrackerHandling_t
+ {
+ TRACKER_INVALID,
+ TRACKER_CREATE,
+ TRACKER_UPDATE,
+ TRACKER_REMOVE,
+ };
+
+ CHudItemAttributeTracker( const char *pElementName );
+ virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
+ virtual void PerformLayout() OVERRIDE;
+ virtual void FireGameEvent( IGameEvent *pEvent ) OVERRIDE;
+ virtual bool ShouldDraw();
+ virtual void OnThink() OVERRIDE;
+
+ virtual void SOCreated( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) OVERRIDE
+ {
+ HandleSOEvent( steamIDOwner, pObject, TRACKER_CREATE );
+ }
+ virtual void PreSOUpdate( const CSteamID & steamIDOwner, ESOCacheEvent eEvent ) OVERRIDE {};
+ virtual void SOUpdated( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) OVERRIDE
+ {
+ HandleSOEvent( steamIDOwner, pObject, TRACKER_UPDATE );
+ }
+ virtual void PostSOUpdate( const CSteamID & steamIDOwner, ESOCacheEvent eEvent ) OVERRIDE {};
+ virtual void SODestroyed( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) OVERRIDE
+ {
+ HandleSOEvent( steamIDOwner, pObject, TRACKER_REMOVE );
+ }
+ virtual void SOCacheSubscribed( const CSteamID & steamIDOwner, ESOCacheEvent eEvent ) OVERRIDE {};
+ virtual void SOCacheUnsubscribed( const CSteamID & steamIDOwner, ESOCacheEvent eEvent ) OVERRIDE {};
+
+ virtual void LevelInit( void ) OVERRIDE;
+ virtual void LevelShutdown( void ) OVERRIDE;
+
+private:
+
+ void HandleSOEvent( const CSteamID & steamIDOwner, const CSharedObject *pObject, ETrackerHandling_t eHandling );
+ bool FindTrackerForItem( const CEconItem* pItem, CItemTrackerPanel** ppTracker, bool bCreateIfNotFound );
+
+ CUtlMap< itemid_t, CItemTrackerPanel* > m_mapTrackers;
+ EditablePanel *m_pStatusContainer;
+ Label *m_pCallToActionLabel;
+ Label *m_pStatusHeaderLabel;
+ CPanelAnimationVarAliasType( int, m_nStatusBufferWidth, "stats_buffer_width", "0", "proportional_int");
+
+};
+
+int QuestSort_PointsAscending( CItemAttributeProgressPanel* const* p1, CItemAttributeProgressPanel* const* p2 );
+
+#endif // TF_HUD_ITEM_PROGRESS_TRACKER_H \ No newline at end of file