diff options
Diffstat (limited to 'game/client/tf/vgui/quest_item_panel.h')
| -rw-r--r-- | game/client/tf/vgui/quest_item_panel.h | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/game/client/tf/vgui/quest_item_panel.h b/game/client/tf/vgui/quest_item_panel.h new file mode 100644 index 0000000..dfdb5a8 --- /dev/null +++ b/game/client/tf/vgui/quest_item_panel.h @@ -0,0 +1,265 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef QUEST_ITEM_PANEL_H +#define QUEST_ITEM_PANEL_H +#ifdef _WIN32 +#pragma once +#endif + +#include "econ_item_inventory.h" +#include "tf_controls.h" + +using namespace vgui; + +class CScrollableQuestList; +class CItemModelPanel; + +//----------------------------------------------------------------------------- +// Simple tooltip class that looks into the moused-over panel's dialog variables +// for "tiptext" and uses that value as its string to present. +//----------------------------------------------------------------------------- +class CQuestTooltip : public CTFTextToolTip +{ + DECLARE_CLASS_SIMPLE( CQuestTooltip, CTFTextToolTip ); +public: + CQuestTooltip( vgui::Panel *parent, const char *text = NULL ) + : BaseClass( parent, text ) + {} + + virtual void ShowTooltip( Panel *pCurrentPanel ) OVERRIDE; + virtual void PositionWindow( Panel *pTipPanel ) OVERRIDE; +private: +}; + +//----------------------------------------------------------------------------- +// Can pass various input events to other panels +//----------------------------------------------------------------------------- +class CInputProxyPanel : public EditablePanel +{ +public: + + enum EInputTypes + { + INPUT_MOUSE_ENTER = 0, + INPUT_MOUSE_EXIT, + INPUT_MOUSE_PRESS, + INPUT_MOUSE_DOUBLE_PRESS, + INPUT_MOUSE_RELEASED, + INPUT_MOUSE_WHEEL, + INPUT_MOUSE_MOVE, + NUM_INPUT_TYPES, + }; + + DECLARE_CLASS_SIMPLE( CInputProxyPanel, EditablePanel ); + CInputProxyPanel( Panel *parent, const char *pszPanelName ); + + void AddPanelForCommand( EInputTypes eInputType, Panel* pPanel, const char* pszCommand ); + + MESSAGE_FUNC_INT_INT( OnCursorMoved, "OnCursorMoved", x, y ); + virtual void OnCursorEntered(); + virtual void OnCursorExited(); + virtual void OnMousePressed(MouseCode code); + virtual void OnMouseDoublePressed(MouseCode code); + virtual void OnMouseReleased(MouseCode code); + virtual void OnMouseWheeled(int delta); + +private: + + struct CommandPair_t + { + Panel* m_pPanel; + const char* m_pszCommand; + }; + CUtlVector< CommandPair_t > m_vecRedirectPanels[NUM_INPUT_TYPES]; +}; + +//----------------------------------------------------------------------------- +// Contains a panel that animates into place when it needs to show or hide +//----------------------------------------------------------------------------- +class CQuestStatusPanel : public EditablePanel +{ +public: + DECLARE_CLASS_SIMPLE( CQuestStatusPanel, EditablePanel ); + CQuestStatusPanel( Panel *parent, const char *pszPanelName ); + + void SetShow( bool bShow ); + virtual void OnThink() OVERRIDE; + +private: + EditablePanel* m_pMovingContainer; + RealTimeCountdownTimer m_transitionTimer; + bool m_bShouldBeVisible; + + CPanelAnimationVarAliasType( int, m_iVisibleY, "visible_y", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iHiddenY, "hidden_y", "40", "proportional_int" ); +}; + +//----------------------------------------------------------------------------- +// An representation of a single quest +//----------------------------------------------------------------------------- +class CQuestItemPanel : public EditablePanel, CGameEventListener +{ +public: + enum EItemPanelState_t + { + STATE_NORMAL = 0, + STATE_UNIDENTIFIED, + STATE_IDENTIFYING, + STATE_COMPLETED, + STATE_TURNING_IN__WAITING_FOR_GC, + STATE_TURNING_IN__GC_RESPONDED, + STATE_SHOW_ACCEPTED, + + NUM_STATES, + }; + + DECLARE_CLASS_SIMPLE( CQuestItemPanel, EditablePanel ); + + CQuestItemPanel( Panel *parent, const char *pszPanelName, CEconItemView* pQuestItem, CScrollableQuestList* pQuestList ); + virtual ~CQuestItemPanel(); + + virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; + virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE; + virtual void PerformLayout( void ) OVERRIDE; + virtual void OnCommand( const char *command ) OVERRIDE; + virtual void OnThink() OVERRIDE; + virtual void FireGameEvent( IGameEvent *event ) OVERRIDE; + virtual void OnSizeChanged(int wide, int tall) OVERRIDE {} + virtual void OnMouseReleased(MouseCode code) OVERRIDE; + + const CEconItemView* GetItem() { return m_hQuestItem; } + void SetItem( CEconItemView* pItem ); + void QuestCompletedResponse(); + EItemPanelState_t GetState() const { return m_eState; } + void SetSelected( bool bSelected, bool bImmediate ); + bool IsSelected() const { return !m_bCollapsed; } + bool IsCursorOverMainContainer() const; + + MESSAGE_FUNC( OnCollapsedGlowStart, "CollapsedGlowStart" ); + MESSAGE_FUNC( OnCollapsedGlowEnd, "CollapsedGlowEnd" ); + MESSAGE_FUNC( OnDiscardQuest, "DiscardQuest" ); + MESSAGE_FUNC( OnEquipLoaners, "EquipLoaners" ); + void OnCompleteQuest(); + void OnConfirmDelete( bool bConfirm ); + void OnConfirmEquipLoaners( bool bConfirm ); + +protected: + + bool HasAllControls() const { return m_bHasAllControls; } + + void LoadResFileForCurrentItem(); + void OnIdentify(); + void SetupObjectivesPanels( bool bRecreate ); + bool IsUnacknowledged(); + void SetState( EItemPanelState_t eState ); + void CaptureAndEncodeStrings(); + const wchar_t* GetDecodedString( const char* pszKeyName, float flPercentDecoded ); + void UpdateInvalidReasons(); + + EItemPanelState_t m_eState; + CEconItemViewHandle m_hQuestItem; + + EditablePanel *m_pQuestPaperContainer; + EditablePanel *m_pFrontFolderContainer; + ImagePanel *m_pFrontFolderImage; + EditablePanel *m_pBackFolderContainer; + ImagePanel *m_pBackFolderImage; + ImagePanel *m_pEncodedImage; + EditablePanel *m_pMainContainer; + + CQuestStatusPanel *m_pEncodedStatus; + CQuestStatusPanel *m_pInactiveStatus; + CQuestStatusPanel *m_pReadyToTurnInStatus; + Label *m_pFlavorText; + Label *m_pObjectiveExplanationLabel; + Label *m_pExpirationLabel; + EditablePanel *m_pTurnInContainer; + EditablePanel *m_pTurnInDimmer; + Button *m_pTurnInButton; + EditablePanel *m_pTurnInSpinnerContainer; + CExButton *m_pTitleButton; + EditablePanel *m_pIdentifyDimmer; + EditablePanel *m_pIdentifyContainer; + CExButton *m_pIdentifyButton; + ImagePanel *m_pPhotoStatic; + ImagePanel *m_pAcceptedImage; + Label *m_pTurningInLabel; + class CExScrollingEditablePanel *m_pFlavorScrollingContainer; + CExButton *m_pFindServerButton; + + // loaners + EditablePanel *m_pLoanerContainerPanel; + CExButton *m_pRequestLoanerItemsButton; + CExButton *m_pEquipLoanerItemsButton; + CItemModelPanel *m_pLoanerItemModelPanel[2]; + + CExButton *m_pDiscardButton; + + + int m_nPaperXPos; + int m_nPaperYPos; + int m_nPaperXShakePos; + int m_nPaperYShakePos; + bool m_bHasAllControls; + CUtlString m_strItemTrackerResFile; + CUtlString m_strQuickPlayMap; + + CUtlString m_strMatchmakingGroupName; + CUtlString m_strMatchmakingCategoryName; + CUtlString m_strMatchmakingMapName; + + // Sound effects + CUtlString m_strExpandSound; + CUtlString m_strCollapseSound; + CUtlString m_strTurnInSound; + CUtlString m_strTurnInSuccessSound; + CUtlString m_strDecodeSound; + + // Animation + CUtlString m_strReset; + CUtlString m_strAnimExpand; + CUtlString m_strAnimCollapse; + CUtlString m_strTurningIn; + CUtlString m_strHighlightOn; + CUtlString m_strHighlightOff; + + class CItemTrackerPanel *m_pItemTrackerPanel; + + CScrollableQuestList *m_pQuestList; + + RealTimeCountdownTimer m_StateTimer; + KeyValues *m_pKVItemTracker; + + struct FolderPair_t + { + CUtlString m_strFront; + CUtlString m_strBack; + }; + CUtlVector< FolderPair_t > m_vecFoldersImages; + + CUtlString m_strEncodedText; + CUtlString m_strExpireText; + const char *m_pszCompleteSound; + bool m_bCollapsed; + + KeyValues *m_pKVCipherStrings; + + CPanelAnimationVarAliasType( int, m_iFrontPaperHideHeight, "front_paper_hide_height", "1000", "proportional_int" ); // Default to a large value so it wont be visible + CPanelAnimationVarAliasType( int, m_iUnidentifiedHeight, "unidentified_height", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iObjectiveInset, "objective_inset", "200", "proportional_int" ); + //CPanelAnimationVarAliasType( int, m_iScrollingContainerHeight, "scrolling_container_height", "200", "proportional_int" ); + + enum EDecodeStyle + { + DECODE_STYLE_CYPHER = 0, + DECODE_STYLE_PANEL_FADE, + }; + CPanelAnimationVarAliasType( EDecodeStyle, m_eDecodeStyle, "decode_style", "0", "int" ); +}; + +#endif // QUEST_ITEM_PANEL_H |