|
|
//========= 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
|