summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_mainmenuoverride.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/tf_hud_mainmenuoverride.h')
-rw-r--r--game/client/tf/tf_hud_mainmenuoverride.h290
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