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.

265 lines
8.3 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #ifndef QUEST_ITEM_PANEL_H
  8. #define QUEST_ITEM_PANEL_H
  9. #ifdef _WIN32
  10. #pragma once
  11. #endif
  12. #include "econ_item_inventory.h"
  13. #include "tf_controls.h"
  14. using namespace vgui;
  15. class CScrollableQuestList;
  16. class CItemModelPanel;
  17. //-----------------------------------------------------------------------------
  18. // Simple tooltip class that looks into the moused-over panel's dialog variables
  19. // for "tiptext" and uses that value as its string to present.
  20. //-----------------------------------------------------------------------------
  21. class CQuestTooltip : public CTFTextToolTip
  22. {
  23. DECLARE_CLASS_SIMPLE( CQuestTooltip, CTFTextToolTip );
  24. public:
  25. CQuestTooltip( vgui::Panel *parent, const char *text = NULL )
  26. : BaseClass( parent, text )
  27. {}
  28. virtual void ShowTooltip( Panel *pCurrentPanel ) OVERRIDE;
  29. virtual void PositionWindow( Panel *pTipPanel ) OVERRIDE;
  30. private:
  31. };
  32. //-----------------------------------------------------------------------------
  33. // Can pass various input events to other panels
  34. //-----------------------------------------------------------------------------
  35. class CInputProxyPanel : public EditablePanel
  36. {
  37. public:
  38. enum EInputTypes
  39. {
  40. INPUT_MOUSE_ENTER = 0,
  41. INPUT_MOUSE_EXIT,
  42. INPUT_MOUSE_PRESS,
  43. INPUT_MOUSE_DOUBLE_PRESS,
  44. INPUT_MOUSE_RELEASED,
  45. INPUT_MOUSE_WHEEL,
  46. INPUT_MOUSE_MOVE,
  47. NUM_INPUT_TYPES,
  48. };
  49. DECLARE_CLASS_SIMPLE( CInputProxyPanel, EditablePanel );
  50. CInputProxyPanel( Panel *parent, const char *pszPanelName );
  51. void AddPanelForCommand( EInputTypes eInputType, Panel* pPanel, const char* pszCommand );
  52. MESSAGE_FUNC_INT_INT( OnCursorMoved, "OnCursorMoved", x, y );
  53. virtual void OnCursorEntered();
  54. virtual void OnCursorExited();
  55. virtual void OnMousePressed(MouseCode code);
  56. virtual void OnMouseDoublePressed(MouseCode code);
  57. virtual void OnMouseReleased(MouseCode code);
  58. virtual void OnMouseWheeled(int delta);
  59. private:
  60. struct CommandPair_t
  61. {
  62. Panel* m_pPanel;
  63. const char* m_pszCommand;
  64. };
  65. CUtlVector< CommandPair_t > m_vecRedirectPanels[NUM_INPUT_TYPES];
  66. };
  67. //-----------------------------------------------------------------------------
  68. // Contains a panel that animates into place when it needs to show or hide
  69. //-----------------------------------------------------------------------------
  70. class CQuestStatusPanel : public EditablePanel
  71. {
  72. public:
  73. DECLARE_CLASS_SIMPLE( CQuestStatusPanel, EditablePanel );
  74. CQuestStatusPanel( Panel *parent, const char *pszPanelName );
  75. void SetShow( bool bShow );
  76. virtual void OnThink() OVERRIDE;
  77. private:
  78. EditablePanel* m_pMovingContainer;
  79. RealTimeCountdownTimer m_transitionTimer;
  80. bool m_bShouldBeVisible;
  81. CPanelAnimationVarAliasType( int, m_iVisibleY, "visible_y", "0", "proportional_int" );
  82. CPanelAnimationVarAliasType( int, m_iHiddenY, "hidden_y", "40", "proportional_int" );
  83. };
  84. //-----------------------------------------------------------------------------
  85. // An representation of a single quest
  86. //-----------------------------------------------------------------------------
  87. class CQuestItemPanel : public EditablePanel, CGameEventListener
  88. {
  89. public:
  90. enum EItemPanelState_t
  91. {
  92. STATE_NORMAL = 0,
  93. STATE_UNIDENTIFIED,
  94. STATE_IDENTIFYING,
  95. STATE_COMPLETED,
  96. STATE_TURNING_IN__WAITING_FOR_GC,
  97. STATE_TURNING_IN__GC_RESPONDED,
  98. STATE_SHOW_ACCEPTED,
  99. NUM_STATES,
  100. };
  101. DECLARE_CLASS_SIMPLE( CQuestItemPanel, EditablePanel );
  102. CQuestItemPanel( Panel *parent, const char *pszPanelName, CEconItemView* pQuestItem, CScrollableQuestList* pQuestList );
  103. virtual ~CQuestItemPanel();
  104. virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
  105. virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
  106. virtual void PerformLayout( void ) OVERRIDE;
  107. virtual void OnCommand( const char *command ) OVERRIDE;
  108. virtual void OnThink() OVERRIDE;
  109. virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
  110. virtual void OnSizeChanged(int wide, int tall) OVERRIDE {}
  111. virtual void OnMouseReleased(MouseCode code) OVERRIDE;
  112. const CEconItemView* GetItem() { return m_hQuestItem; }
  113. void SetItem( CEconItemView* pItem );
  114. void QuestCompletedResponse();
  115. EItemPanelState_t GetState() const { return m_eState; }
  116. void SetSelected( bool bSelected, bool bImmediate );
  117. bool IsSelected() const { return !m_bCollapsed; }
  118. bool IsCursorOverMainContainer() const;
  119. MESSAGE_FUNC( OnCollapsedGlowStart, "CollapsedGlowStart" );
  120. MESSAGE_FUNC( OnCollapsedGlowEnd, "CollapsedGlowEnd" );
  121. MESSAGE_FUNC( OnDiscardQuest, "DiscardQuest" );
  122. MESSAGE_FUNC( OnEquipLoaners, "EquipLoaners" );
  123. void OnCompleteQuest();
  124. void OnConfirmDelete( bool bConfirm );
  125. void OnConfirmEquipLoaners( bool bConfirm );
  126. protected:
  127. bool HasAllControls() const { return m_bHasAllControls; }
  128. void LoadResFileForCurrentItem();
  129. void OnIdentify();
  130. void SetupObjectivesPanels( bool bRecreate );
  131. bool IsUnacknowledged();
  132. void SetState( EItemPanelState_t eState );
  133. void CaptureAndEncodeStrings();
  134. const wchar_t* GetDecodedString( const char* pszKeyName, float flPercentDecoded );
  135. void UpdateInvalidReasons();
  136. EItemPanelState_t m_eState;
  137. CEconItemViewHandle m_hQuestItem;
  138. EditablePanel *m_pQuestPaperContainer;
  139. EditablePanel *m_pFrontFolderContainer;
  140. ImagePanel *m_pFrontFolderImage;
  141. EditablePanel *m_pBackFolderContainer;
  142. ImagePanel *m_pBackFolderImage;
  143. ImagePanel *m_pEncodedImage;
  144. EditablePanel *m_pMainContainer;
  145. CQuestStatusPanel *m_pEncodedStatus;
  146. CQuestStatusPanel *m_pInactiveStatus;
  147. CQuestStatusPanel *m_pReadyToTurnInStatus;
  148. Label *m_pFlavorText;
  149. Label *m_pObjectiveExplanationLabel;
  150. Label *m_pExpirationLabel;
  151. EditablePanel *m_pTurnInContainer;
  152. EditablePanel *m_pTurnInDimmer;
  153. Button *m_pTurnInButton;
  154. EditablePanel *m_pTurnInSpinnerContainer;
  155. CExButton *m_pTitleButton;
  156. EditablePanel *m_pIdentifyDimmer;
  157. EditablePanel *m_pIdentifyContainer;
  158. CExButton *m_pIdentifyButton;
  159. ImagePanel *m_pPhotoStatic;
  160. ImagePanel *m_pAcceptedImage;
  161. Label *m_pTurningInLabel;
  162. class CExScrollingEditablePanel *m_pFlavorScrollingContainer;
  163. CExButton *m_pFindServerButton;
  164. // loaners
  165. EditablePanel *m_pLoanerContainerPanel;
  166. CExButton *m_pRequestLoanerItemsButton;
  167. CExButton *m_pEquipLoanerItemsButton;
  168. CItemModelPanel *m_pLoanerItemModelPanel[2];
  169. CExButton *m_pDiscardButton;
  170. int m_nPaperXPos;
  171. int m_nPaperYPos;
  172. int m_nPaperXShakePos;
  173. int m_nPaperYShakePos;
  174. bool m_bHasAllControls;
  175. CUtlString m_strItemTrackerResFile;
  176. CUtlString m_strQuickPlayMap;
  177. CUtlString m_strMatchmakingGroupName;
  178. CUtlString m_strMatchmakingCategoryName;
  179. CUtlString m_strMatchmakingMapName;
  180. // Sound effects
  181. CUtlString m_strExpandSound;
  182. CUtlString m_strCollapseSound;
  183. CUtlString m_strTurnInSound;
  184. CUtlString m_strTurnInSuccessSound;
  185. CUtlString m_strDecodeSound;
  186. // Animation
  187. CUtlString m_strReset;
  188. CUtlString m_strAnimExpand;
  189. CUtlString m_strAnimCollapse;
  190. CUtlString m_strTurningIn;
  191. CUtlString m_strHighlightOn;
  192. CUtlString m_strHighlightOff;
  193. class CItemTrackerPanel *m_pItemTrackerPanel;
  194. CScrollableQuestList *m_pQuestList;
  195. RealTimeCountdownTimer m_StateTimer;
  196. KeyValues *m_pKVItemTracker;
  197. struct FolderPair_t
  198. {
  199. CUtlString m_strFront;
  200. CUtlString m_strBack;
  201. };
  202. CUtlVector< FolderPair_t > m_vecFoldersImages;
  203. CUtlString m_strEncodedText;
  204. CUtlString m_strExpireText;
  205. const char *m_pszCompleteSound;
  206. bool m_bCollapsed;
  207. KeyValues *m_pKVCipherStrings;
  208. CPanelAnimationVarAliasType( int, m_iFrontPaperHideHeight, "front_paper_hide_height", "1000", "proportional_int" ); // Default to a large value so it wont be visible
  209. CPanelAnimationVarAliasType( int, m_iUnidentifiedHeight, "unidentified_height", "0", "proportional_int" );
  210. CPanelAnimationVarAliasType( int, m_iObjectiveInset, "objective_inset", "200", "proportional_int" );
  211. //CPanelAnimationVarAliasType( int, m_iScrollingContainerHeight, "scrolling_container_height", "200", "proportional_int" );
  212. enum EDecodeStyle
  213. {
  214. DECODE_STYLE_CYPHER = 0,
  215. DECODE_STYLE_PANEL_FADE,
  216. };
  217. CPanelAnimationVarAliasType( EDecodeStyle, m_eDecodeStyle, "decode_style", "0", "int" );
  218. };
  219. #endif // QUEST_ITEM_PANEL_H