diff options
Diffstat (limited to 'game/client/tf/tf_hud_mainmenuoverride.h')
| -rw-r--r-- | game/client/tf/tf_hud_mainmenuoverride.h | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_mainmenuoverride.h b/game/client/tf/tf_hud_mainmenuoverride.h new file mode 100644 index 0000000..9015aad --- /dev/null +++ b/game/client/tf/tf_hud_mainmenuoverride.h @@ -0,0 +1,290 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef TF_HUD_MAINMENUOVERRIDE_H +#define TF_HUD_MAINMENUOVERRIDE_H +#ifdef _WIN32 +#pragma once +#endif + +#include <vgui_controls/EditablePanel.h> +#include <vgui_controls/ScrollableEditablePanel.h> +#include <game/client/iviewport.h> +#include <vgui/IScheme.h> +#include <vgui/ISurface.h> +#include "hud.h" +#include "hudelement.h" +#include "tf_shareddefs.h" +#include "vgui_avatarimage.h" +#include "tf_imagepanel.h" +#include "tf_gamestats_shared.h" +#include "tf_controls.h" +#include "item_model_panel.h" +#include "motd.h" +#include "gcsdk/gcclientsdk.h" +#include "quest_log_panel.h" +#include "local_steam_shared_object_listener.h" + +using namespace vgui; +using namespace GCSDK; + +class CExButton; +class HTML; +class CSaxxyAwardsPanel; +class CTFStreamListPanel; +class CLobbyContainerFrame_Comp; +class CLobbyContainerFrame_MvM; +class CLobbyContainerFrame_Casual; + +enum mm_button_styles +{ + MMBS_NORMAL = 0, + MMBS_SUBBUTTON = 1, + MMBS_CUSTOM, +}; + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +class CHudMainMenuOverride : public vgui::EditablePanel, public IViewPortPanel, public CGameEventListener, public CLocalSteamSharedObjectListener +{ + DECLARE_CLASS_SIMPLE( CHudMainMenuOverride, vgui::EditablePanel ); + + enum mm_highlight_anims + { + MMHA_TUTORIAL = 0, + MMHA_PRACTICE, + MMHA_NEWUSERFORUM, + MMHA_OPTIONS, + MMHA_LOADOUT, + MMHA_STORE, + MMHA_WAR, + + NUM_ANIMS + }; + +public: + CHudMainMenuOverride( IViewPort *pViewPort ); + ~CHudMainMenuOverride( void ); + + void AttachToGameUI( void ); + virtual const char *GetName( void ){ return PANEL_MAINMENUOVERRIDE; } + virtual void SetData( KeyValues *data ){} + virtual void Reset(){ Update(); SetVisible( true ); } + virtual void Update() { return; } + virtual bool NeedsUpdate( void ){ return false; } + virtual bool HasInputElements( void ){ return true; } + virtual void ShowPanel( bool bShow ) { SetVisible( true ); } // Refuses to hide + + // both vgui::Frame and IViewPortPanel define these, so explicitly define them here as passthroughs to vgui + vgui::VPANEL GetVPanel( void ){ return BaseClass::GetVPanel(); } + virtual bool IsVisible(); + virtual void SetParent( vgui::VPANEL parent ){ BaseClass::SetParent( parent ); } + + virtual void ApplySettings( KeyValues *inResourceData ); + virtual void ApplySchemeSettings( IScheme *scheme ); + virtual void PerformLayout( void ); + + void OnCommand( const char *command ); + + void OnKeyCodePressed( KeyCode code ); + + void LoadMenuEntries( void ); + void RemoveAllMenuEntries( void ); + virtual void FireGameEvent( IGameEvent *event ); + + void LoadCharacterImageFile( void ); + + void UpdateNotifications(); + void SetNotificationsButtonVisible( bool bVisible ); + void SetNotificationsPanelVisible( bool bVisible ); + void AdjustNotificationsPanelHeight(); + + void SetMOTDButtonVisible( bool bVisible ); + void SetMOTDVisible( bool bVisible ); + void SetQuestLogVisible( bool bVisible ); + void SetWatchStreamVisible( bool bVisible ); + void OpenMvMMMPanel(); + void OpenCompMMPanel(); + void OpenCasualMMPanel(); + void ReloadMMPanels(); + void UpdateMOTD( bool bNewMOTDs ); + bool ReloadedAllMOTDs( void ) { return m_bReloadedAllMOTDs; } + CMOTDManager & GetMOTDManager() { return m_MOTDManager; } + RTime32 GetLastMOTDRequestTime( void ) { return m_nLastMOTDRequestAt; } + ELanguage GetLastMOTDRequestLanguage( void ) { return m_nLastMOTDRequestLanguage; } + + void UpdatePromotionalCodes( void ); + + void CheckTrainingStatus( void ); + void StartHighlightAnimation( mm_highlight_anims iAnim ); + void HideHighlight( mm_highlight_anims iAnim ); + + MESSAGE_FUNC( OnUpdateMenu, "UpdateMenu" ); + MESSAGE_FUNC_PARAMS( OnConfirm, "ConfirmDlgResult", data ); + + void ScheduleTrainingCheck( bool bWasInTraining ) { m_flCheckTrainingAt = (engine->Time() + 1.5); m_bWasInTraining = bWasInTraining; } + void ScheduleItemCheck( void ) { m_flCheckUnclaimedItems = (engine->Time() + 1.5); } + + void CheckUnclaimedItems(); + + void OnTick(); + + virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_NONE; } // Seems like this should be GAME_ACTION_SET_MENU, but it's not because it's apparently visible *all* *the* *damn* *time* + +#ifdef _DEBUG + void Refresh(); +#endif + void CheckForNewQuests( void ); + void UpdatePlaylistEntries( void ); + + virtual void SOCreated( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) OVERRIDE { SOEvent( pObject ); } + virtual void SOUpdated( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) OVERRIDE { SOEvent( pObject ); } + + CLobbyContainerFrame_Comp* GetCompLobbyPanel(); + CLobbyContainerFrame_MvM* GetMvMLobbyPanel(); + CLobbyContainerFrame_Casual* GetCasualLobbyPanel(); + +#ifdef STAGING_ONLY + void GenerateIconsThink( void ); + void GenerateIcons( bool bLarge, int min = -1, int max = -1 ); + + bool m_bGeneratingIcons; + bool m_bGeneratingLargeTestIcons; + CEconItemView *m_pIconData; + CUtlVector< item_definition_index_t > m_vecIconDefs; +#endif + +protected: + virtual void PaintTraverse( bool Repaint, bool allowForce = true ) OVERRIDE; + +private: + + void SOEvent( const CSharedObject* pObject ); + + void PerformKeyRebindings( void ); + void TogglePlayListMenu( void ); + + bool CheckAndWarnForPREC( void ); + void StopUpdateGlow(); + +private: + + // Store + CItemModelPanel *m_pFeaturedItemPanel; + CItemModelPanel *m_pFeaturedItemMouseOverPanel; + + CItemModelPanel *m_pMouseOverItemPanel; + CItemModelPanelToolTip *m_pMouseOverTooltip; + + // Notifications + vgui::EditablePanel *m_pNotificationsShowPanel; + vgui::EditablePanel *m_pNotificationsPanel; + vgui::EditablePanel *m_pNotificationsControl; + vgui::ScrollableEditablePanel *m_pNotificationsScroller; + int m_iNumNotifications; + int m_iNotiPanelWide; + + // MOTDs + vgui::EditablePanel *m_pMOTDShowPanel; + vgui::EditablePanel *m_pMOTDPanel; + vgui::Label *m_pMOTDHeaderLabel; + vgui::ImagePanel *m_pMOTDHeaderIcon; + vgui::ScrollableEditablePanel *m_pMOTDTextScroller; + vgui::EditablePanel *m_pMOTDTextPanel; + vgui::Label *m_pMOTDTextLabel; + vgui::Label *m_pMOTDTitleLabel; + vgui::EditablePanel *m_pMOTDTitleImageContainer; + vgui::ImagePanel *m_pMOTDTitleImage; + + int m_hTitleLabelFont; + bool m_bInitMOTD; + + CExImageButton *m_pMOTDNextButton; + CExImageButton *m_pMOTDPrevButton; + CExButton *m_pMOTDURLButton; + + // MOTD handling + CMOTDManager m_MOTDManager; + bool m_bHaveNewMOTDs; + RTime32 m_nLastMOTDRequestAt; + ELanguage m_nLastMOTDRequestLanguage; + bool m_bReloadedAllMOTDs; + int m_iCurrentMOTD; + bool m_bMOTDShownAtStartup; + + class CWarLandingPanel *m_pWarLandingPage; + + vgui::ImagePanel *m_pCharacterImagePanel; + int m_iCharacterImageIdx; + + CExButton *m_pQuitButton; + CExButton *m_pDisconnectButton; + bool m_bIsDisconnectText; + + CExButton *m_pBackToReplaysButton; + ImagePanel *m_pStoreHasNewItemsImage; + + CExButton *m_pVRModeButton; + vgui::Panel *m_pVRModeBackground; + + KeyValues *m_pButtonKV; + bool m_bReapplyButtonKVs; + + DHANDLE< CExplanationPopup > m_pHighlightAnims[ NUM_ANIMS ]; + + float m_flCheckTrainingAt; + bool m_bWasInTraining; + + float m_flCheckUnclaimedItems; + + vgui::ImagePanel *m_pBackground; + + struct mainmenu_entry_t + { + vgui::EditablePanel *pPanel; + bool bOnlyInGame; + bool bOnlyInReplay; + bool bOnlyAtMenu; + bool bIsVisible; + bool bOnlyVREnabled; + int iStyle; + const char *pszImage; + const char *pszTooltip; + }; + CUtlVector<mainmenu_entry_t> m_pMMButtonEntries; + + CMainMenuToolTip *m_pToolTip; + vgui::EditablePanel *m_pToolTipEmbeddedPanel; + + CSimplePanelToolTip *m_pFeaturedItemToolTip; + + EditablePanel *m_pQuestLogButton; + EditablePanel *m_pEventPromoContainer; + EditablePanel *m_pSafeModeContainer; + + vgui::DHANDLE<vgui::Frame> m_hReportPlayerDialog; + + CTFStreamListPanel *m_pWatchStreamsPanel; + + bool m_bPlayListExpanded; + bool m_bStabilizedInitialLayout; + float m_flLastWarNagTime; + bool m_bBackgroundUsesCharacterImages; + + EditablePanel *m_pCompetitiveAccessInfo; +#ifdef SAXXYMAINMENU_ENABLED + CSaxxyAwardsPanel *m_pSaxxyAwardsPanel; + KeyValues *m_pSaxxySettings; +#endif + + CPanelAnimationVarAliasType( int, m_iButtonXOffset, "button_x_offset", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iButtonY, "button_y", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iButtonYDelta, "button_y_delta", "0", "proportional_int" ); +}; + +#endif //TF_HUD_MAINMENUOVERRIDE_H |