Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

291 lines
8.6 KiB

5 years ago
//========= 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