diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/vgui/quest_notification_panel.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf/vgui/quest_notification_panel.h')
| -rw-r--r-- | game/client/tf/vgui/quest_notification_panel.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/game/client/tf/vgui/quest_notification_panel.h b/game/client/tf/vgui/quest_notification_panel.h new file mode 100644 index 0000000..1fcdb38 --- /dev/null +++ b/game/client/tf/vgui/quest_notification_panel.h @@ -0,0 +1,180 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef QUEST_NOTIFICATION_PANEL_H +#define QUEST_NOTIFICATION_PANEL_H +#ifdef _WIN32 +#pragma once +#endif + +#include <vgui/VGUI.h> +#include "hudelement.h" +#include "vgui_controls/EditablePanel.h" +#include <../common/GameUI/cvarslider.h> +#include "vgui_controls/CheckButton.h" +#include "vgui_controls/ScrollableEditablePanel.h" +#include "econ_item_inventory.h" + +using namespace vgui; +#define NEVER_REPEAT -1.f + +class CQuestNotificationPanel; + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +class CQuestNotification +{ +public: + CQuestNotification( CEconItem *pItem ); + + enum ENotificationType_t + { + NOTIFICATION_TYPE_NEW_QUEST = 0, + NOTIFICATION_TYPE_COMPLETED, + NOTIFICATION_TYPE_FULLY_COMPLETED, + + NUM_NOTIFICATION_TYPES + }; + + virtual ~CQuestNotification() {} + + virtual float Present( CQuestNotificationPanel* pNotificationPanel ); + virtual void Update( CQuestNotificationPanel* pNotificationPanel ) = 0; + virtual bool IsDone() const = 0; + virtual bool ShouldPresent() const = 0; + virtual ENotificationType_t GetType() const = 0; + virtual float GetReplayTime() const = 0; + + CEconItemHandle& GetItemHandle() { return m_hItem; } + +protected: + CEconItemHandle m_hItem; + RealTimeCountdownTimer m_timerDialog; + RealTimeCountdownTimer m_timerShow; +}; + +//----------------------------------------------------------------------------- +// Notifications where we'll speak +//----------------------------------------------------------------------------- +class CQuestNotification_Speaking : public CQuestNotification +{ +public: + + CQuestNotification_Speaking( CEconItem *pItem ); + virtual ~CQuestNotification_Speaking() {} + + virtual float Present( CQuestNotificationPanel* pNotificationPanel ) OVERRIDE; + virtual void Update( CQuestNotificationPanel* pNotificationPanel ) OVERRIDE; + virtual bool IsDone() const OVERRIDE; + +protected: + virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) = 0; + + const char *m_pszSoundToSpeak; +}; + +//----------------------------------------------------------------------------- +// New quest notification +//----------------------------------------------------------------------------- +class CQuestNotification_NewQuest : public CQuestNotification_Speaking +{ + DECLARE_CLASS_SIMPLE( CQuestNotification_NewQuest, CQuestNotification_Speaking ); +public: + CQuestNotification_NewQuest( CEconItem *pItem ) + : CQuestNotification_Speaking( pItem ) + {} + + virtual ~CQuestNotification_NewQuest() {} + + virtual bool ShouldPresent() const OVERRIDE; + ENotificationType_t GetType() const { return NOTIFICATION_TYPE_NEW_QUEST; } + virtual float GetReplayTime() const { return 300.f; } + static float k_flReplayTime; + +protected: + virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) OVERRIDE; + + static CUtlVector< itemid_t > m_vecNotifiedItemIDs; +}; + +//----------------------------------------------------------------------------- +// Quest complete notification +//----------------------------------------------------------------------------- +class CQuestNotification_CompletedQuest : public CQuestNotification_Speaking +{ + DECLARE_CLASS_SIMPLE( CQuestNotification_CompletedQuest, CQuestNotification_Speaking ); +public: + CQuestNotification_CompletedQuest( CEconItem *pItem ); + + virtual ~CQuestNotification_CompletedQuest() {} + + virtual bool ShouldPresent() const; + ENotificationType_t GetType() const { return NOTIFICATION_TYPE_COMPLETED; } + virtual float GetReplayTime() const { return NEVER_REPEAT; } + +protected: + virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) OVERRIDE; + + RealTimeCountdownTimer m_PresentTimer; +}; + +class CQuestNotification_FullyCompletedQuest : public CQuestNotification_CompletedQuest +{ + DECLARE_CLASS_SIMPLE( CQuestNotification_FullyCompletedQuest, CQuestNotification_CompletedQuest ); +public: + CQuestNotification_FullyCompletedQuest( CEconItem *pItem ) : CQuestNotification_CompletedQuest( pItem ) + { + } + + virtual ~CQuestNotification_FullyCompletedQuest() {} + + ENotificationType_t GetType() const { return NOTIFICATION_TYPE_FULLY_COMPLETED; } +protected: + virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) OVERRIDE; +}; + +//----------------------------------------------------------------------------- +// The quest notification panel where a character tells the user about quest state +//----------------------------------------------------------------------------- +class CQuestNotificationPanel : public CHudElement, public EditablePanel +{ + DECLARE_CLASS_SIMPLE( CQuestNotificationPanel, EditablePanel ); +public: + CQuestNotificationPanel( const char *pszElementName ); + virtual ~CQuestNotificationPanel(); + + virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; + virtual void PerformLayout() OVERRIDE; + virtual void FireGameEvent( IGameEvent * event ) OVERRIDE; + virtual void Reset() OVERRIDE; + virtual bool ShouldDraw() OVERRIDE; + virtual void OnThink() OVERRIDE; +private: + + bool ShouldPresent(); + + void Update(); + void CheckForNotificationOpportunities(); + + bool AddNotificationForItem( const CEconItemView *pItem, CQuestNotification* pNotification ); + void SetCharacterImage( const char *pszImageName ); + + CUtlVector< CQuestNotification* > m_vecNotifications; + + float m_flTimeSinceLastShown; + bool m_bIsPresenting; + RealTimeCountdownTimer m_timerHoldUp; + RealTimeCountdownTimer m_timerNotificationCooldown; + RealTimeCountdownTimer m_animTimer; + EditablePanel *m_pMainContainer; + bool m_bInitialized; + + CUtlMap< itemid_t, CCopyableUtlVector< float > > m_mapNotifiedItemIDs; +}; + +#endif // QUEST_NOTIFICATION_PANEL_H |