summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/quest_notification_panel.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/vgui/quest_notification_panel.h')
-rw-r--r--game/client/tf/vgui/quest_notification_panel.h180
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