//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef TF_HUD_MAINMENUOVERRIDE_H #define TF_HUD_MAINMENUOVERRIDE_H #ifdef _WIN32 #pragma once #endif #include #include #include #include #include #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 m_pMMButtonEntries; CMainMenuToolTip *m_pToolTip; vgui::EditablePanel *m_pToolTipEmbeddedPanel; CSimplePanelToolTip *m_pFeaturedItemToolTip; EditablePanel *m_pQuestLogButton; EditablePanel *m_pEventPromoContainer; EditablePanel *m_pSafeModeContainer; vgui::DHANDLE 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