Team Fortress 2 Source Code as on 22/4/2020
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.

180 lines
5.8 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #ifndef QUEST_NOTIFICATION_PANEL_H
  8. #define QUEST_NOTIFICATION_PANEL_H
  9. #ifdef _WIN32
  10. #pragma once
  11. #endif
  12. #include <vgui/VGUI.h>
  13. #include "hudelement.h"
  14. #include "vgui_controls/EditablePanel.h"
  15. #include <../common/GameUI/cvarslider.h>
  16. #include "vgui_controls/CheckButton.h"
  17. #include "vgui_controls/ScrollableEditablePanel.h"
  18. #include "econ_item_inventory.h"
  19. using namespace vgui;
  20. #define NEVER_REPEAT -1.f
  21. class CQuestNotificationPanel;
  22. //-----------------------------------------------------------------------------
  23. //
  24. //-----------------------------------------------------------------------------
  25. class CQuestNotification
  26. {
  27. public:
  28. CQuestNotification( CEconItem *pItem );
  29. enum ENotificationType_t
  30. {
  31. NOTIFICATION_TYPE_NEW_QUEST = 0,
  32. NOTIFICATION_TYPE_COMPLETED,
  33. NOTIFICATION_TYPE_FULLY_COMPLETED,
  34. NUM_NOTIFICATION_TYPES
  35. };
  36. virtual ~CQuestNotification() {}
  37. virtual float Present( CQuestNotificationPanel* pNotificationPanel );
  38. virtual void Update( CQuestNotificationPanel* pNotificationPanel ) = 0;
  39. virtual bool IsDone() const = 0;
  40. virtual bool ShouldPresent() const = 0;
  41. virtual ENotificationType_t GetType() const = 0;
  42. virtual float GetReplayTime() const = 0;
  43. CEconItemHandle& GetItemHandle() { return m_hItem; }
  44. protected:
  45. CEconItemHandle m_hItem;
  46. RealTimeCountdownTimer m_timerDialog;
  47. RealTimeCountdownTimer m_timerShow;
  48. };
  49. //-----------------------------------------------------------------------------
  50. // Notifications where we'll speak
  51. //-----------------------------------------------------------------------------
  52. class CQuestNotification_Speaking : public CQuestNotification
  53. {
  54. public:
  55. CQuestNotification_Speaking( CEconItem *pItem );
  56. virtual ~CQuestNotification_Speaking() {}
  57. virtual float Present( CQuestNotificationPanel* pNotificationPanel ) OVERRIDE;
  58. virtual void Update( CQuestNotificationPanel* pNotificationPanel ) OVERRIDE;
  59. virtual bool IsDone() const OVERRIDE;
  60. protected:
  61. virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) = 0;
  62. const char *m_pszSoundToSpeak;
  63. };
  64. //-----------------------------------------------------------------------------
  65. // New quest notification
  66. //-----------------------------------------------------------------------------
  67. class CQuestNotification_NewQuest : public CQuestNotification_Speaking
  68. {
  69. DECLARE_CLASS_SIMPLE( CQuestNotification_NewQuest, CQuestNotification_Speaking );
  70. public:
  71. CQuestNotification_NewQuest( CEconItem *pItem )
  72. : CQuestNotification_Speaking( pItem )
  73. {}
  74. virtual ~CQuestNotification_NewQuest() {}
  75. virtual bool ShouldPresent() const OVERRIDE;
  76. ENotificationType_t GetType() const { return NOTIFICATION_TYPE_NEW_QUEST; }
  77. virtual float GetReplayTime() const { return 300.f; }
  78. static float k_flReplayTime;
  79. protected:
  80. virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) OVERRIDE;
  81. static CUtlVector< itemid_t > m_vecNotifiedItemIDs;
  82. };
  83. //-----------------------------------------------------------------------------
  84. // Quest complete notification
  85. //-----------------------------------------------------------------------------
  86. class CQuestNotification_CompletedQuest : public CQuestNotification_Speaking
  87. {
  88. DECLARE_CLASS_SIMPLE( CQuestNotification_CompletedQuest, CQuestNotification_Speaking );
  89. public:
  90. CQuestNotification_CompletedQuest( CEconItem *pItem );
  91. virtual ~CQuestNotification_CompletedQuest() {}
  92. virtual bool ShouldPresent() const;
  93. ENotificationType_t GetType() const { return NOTIFICATION_TYPE_COMPLETED; }
  94. virtual float GetReplayTime() const { return NEVER_REPEAT; }
  95. protected:
  96. virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) OVERRIDE;
  97. RealTimeCountdownTimer m_PresentTimer;
  98. };
  99. class CQuestNotification_FullyCompletedQuest : public CQuestNotification_CompletedQuest
  100. {
  101. DECLARE_CLASS_SIMPLE( CQuestNotification_FullyCompletedQuest, CQuestNotification_CompletedQuest );
  102. public:
  103. CQuestNotification_FullyCompletedQuest( CEconItem *pItem ) : CQuestNotification_CompletedQuest( pItem )
  104. {
  105. }
  106. virtual ~CQuestNotification_FullyCompletedQuest() {}
  107. ENotificationType_t GetType() const { return NOTIFICATION_TYPE_FULLY_COMPLETED; }
  108. protected:
  109. virtual const char *GetSoundEntry( const CQuestThemeDefinition* pTheme, int nClassIndex ) OVERRIDE;
  110. };
  111. //-----------------------------------------------------------------------------
  112. // The quest notification panel where a character tells the user about quest state
  113. //-----------------------------------------------------------------------------
  114. class CQuestNotificationPanel : public CHudElement, public EditablePanel
  115. {
  116. DECLARE_CLASS_SIMPLE( CQuestNotificationPanel, EditablePanel );
  117. public:
  118. CQuestNotificationPanel( const char *pszElementName );
  119. virtual ~CQuestNotificationPanel();
  120. virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
  121. virtual void PerformLayout() OVERRIDE;
  122. virtual void FireGameEvent( IGameEvent * event ) OVERRIDE;
  123. virtual void Reset() OVERRIDE;
  124. virtual bool ShouldDraw() OVERRIDE;
  125. virtual void OnThink() OVERRIDE;
  126. private:
  127. bool ShouldPresent();
  128. void Update();
  129. void CheckForNotificationOpportunities();
  130. bool AddNotificationForItem( const CEconItemView *pItem, CQuestNotification* pNotification );
  131. void SetCharacterImage( const char *pszImageName );
  132. CUtlVector< CQuestNotification* > m_vecNotifications;
  133. float m_flTimeSinceLastShown;
  134. bool m_bIsPresenting;
  135. RealTimeCountdownTimer m_timerHoldUp;
  136. RealTimeCountdownTimer m_timerNotificationCooldown;
  137. RealTimeCountdownTimer m_animTimer;
  138. EditablePanel *m_pMainContainer;
  139. bool m_bInitialized;
  140. CUtlMap< itemid_t, CCopyableUtlVector< float > > m_mapNotifiedItemIDs;
  141. };
  142. #endif // QUEST_NOTIFICATION_PANEL_H