diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/vgui/tf_lobby_container_frame_comp.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf/vgui/tf_lobby_container_frame_comp.cpp')
| -rw-r--r-- | game/client/tf/vgui/tf_lobby_container_frame_comp.cpp | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/game/client/tf/vgui/tf_lobby_container_frame_comp.cpp b/game/client/tf/vgui/tf_lobby_container_frame_comp.cpp new file mode 100644 index 0000000..838f271 --- /dev/null +++ b/game/client/tf/vgui/tf_lobby_container_frame_comp.cpp @@ -0,0 +1,297 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "tf_gc_client.h" +#include "tf_party.h" + +#include "vgui_controls/PropertySheet.h" +#include "vgui_controls/ComboBox.h" +#include "vgui_controls/ScrollableEditablePanel.h" +#include "vgui_avatarimage.h" +#include "tf_leaderboardpanel.h" +#include "tf_lobbypanel_comp.h" +#include "tf_hud_mainmenuoverride.h" + +#include "tf_lobby_container_frame_comp.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include <tier0/memdbgon.h> + +//----------------------------------------------------------------------------- + +// Purpose: Override of the generic messagebox dialog to provide a welcome-to-competitive message + +//----------------------------------------------------------------------------- +ConVar tf_comp_welcome_hide_forever( "tf_comp_welcome_hide_forever", "0", FCVAR_ARCHIVE | FCVAR_HIDDEN ); +ConVar tf_comp_welcome_hide( "tf_comp_welcome_hide", "0", FCVAR_HIDDEN ); +class CTFCompetitiveWelcomeDialog : public CTFMessageBoxDialog +{ + DECLARE_CLASS_SIMPLE( CTFCompetitiveWelcomeDialog, CTFMessageBoxDialog ); +public: + CTFCompetitiveWelcomeDialog() + : CTFMessageBoxDialog( NULL, (const char *)NULL, NULL, NULL, NULL ) + {} + + virtual ~CTFCompetitiveWelcomeDialog() {}; + + virtual void OnCommand( const char *command ) + { + if ( FStrEq( "hideforever", command ) ) + { + tf_comp_welcome_hide_forever.SetValue( 1 ); + return; + } + else if ( FStrEq( "show_explanations", command ) ) + { + CHudMainMenuOverride *pMMOverride = (CHudMainMenuOverride*)( gViewPortInterface->FindPanelByName( PANEL_MAINMENUOVERRIDE ) ); + pMMOverride->GetCompLobbyPanel()->OnCommand( command ); + OnCommand( "confirm" ); + return; + } + + BaseClass::OnCommand( command ); + } + + MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel ) + { + CheckButton* pNeverAskAgainCheckBox = FindControl< CheckButton >( "NeverShowAgainCheckBox" ); + if ( panel == pNeverAskAgainCheckBox ) + { + tf_comp_welcome_hide_forever.SetValue( pNeverAskAgainCheckBox->IsSelected() ); + } + } + + virtual const char *GetResFile() OVERRIDE + { + // FIXME controller? + return "Resource/UI/CompetitiveWelcomeDialog.res"; + } +}; + + +//----------------------------------------------------------------------------- +CLobbyContainerFrame_Comp::CLobbyContainerFrame_Comp() + : CBaseLobbyContainerFrame( "LobbyContainerFrame" ) +{ + // Our internal lobby panel + m_pContents = new CLobbyPanel_Comp( this, this ); + m_pContents->AddActionSignalTarget( this ); + AddPage( m_pContents, "#TF_Matchmaking_HeaderCompetitive" ); + GetPropertySheet()->SetNavToRelay( m_pContents->GetName() ); + m_pContents->SetVisible( true ); +} + +//----------------------------------------------------------------------------- +CLobbyContainerFrame_Comp::~CLobbyContainerFrame_Comp( void ) +{ +} + +void CLobbyContainerFrame_Comp::ShowPanel( bool bShow ) +{ + if ( bShow ) + { + if ( tf_comp_welcome_hide.GetBool() == false + && tf_comp_welcome_hide_forever.GetBool() == false + && GTFGCClientSystem()->GetWizardStep() == TF_Matchmaking_WizardStep_LADDER ) + { + CTFCompetitiveWelcomeDialog *pDialog = vgui::SETUP_PANEL( new CTFCompetitiveWelcomeDialog() ); + + if ( pDialog ) + { + tf_comp_welcome_hide.SetValue( 1 ); + pDialog->Show(); + } + else + { + Warning( "Failed to create CompetitiveWelcomeDialog. Outdated HUD?\n" ); + } + } + } + + + + BaseClass::ShowPanel( bShow ); +} + +void CLobbyContainerFrame_Comp::OnCommand( const char *command ) +{ + if ( FStrEq( command, "next" ) ) + { + switch ( GTFGCClientSystem()->GetWizardStep() ) + { + case TF_Matchmaking_WizardStep_LADDER: + StartSearch(); + break; + + default: + AssertMsg1( false, "Unexpected wizard step %d", (int)GTFGCClientSystem()->GetWizardStep() ); + break; + } + return; + } + else if ( FStrEq( command, "show_explanations" ) ) + { + CExplanationPopup *pPopup = FindControl<CExplanationPopup>( "StartExplanation" ); + if ( pPopup ) + { + pPopup->Popup(); + } + return; + } + + BaseClass::OnCommand( command ); +} + +//----------------------------------------------------------------------------- +void CLobbyContainerFrame_Comp::WriteControls() +{ + // Make sure we want to be in matchmaking. (If we don't, the frame should hide us pretty quickly.) + // We might get an event or something right at the transition point occasionally when the UI should + // not be visible + if ( GTFGCClientSystem()->GetMatchmakingUIState() == eMatchmakingUIState_Inactive ) + { + return; + } + + const char *pszBackButtonText = "#TF_Matchmaking_Back"; + const char *pszNextButtonText = NULL; + + if ( GCClientSystem()->BConnectedtoGC() ) + { + if ( BIsPartyLeader() ) + { + switch ( GTFGCClientSystem()->GetWizardStep() ) + { + case TF_Matchmaking_WizardStep_LADDER: + pszBackButtonText = "#TF_Matchmaking_Back"; + pszNextButtonText = "#TF_Matchmaking_StartSearch"; + break; + + case TF_Matchmaking_WizardStep_SEARCHING: + pszBackButtonText = "#TF_Matchmaking_CancelSearch"; + break; + + case TF_Matchmaking_WizardStep_INVALID: + // Still being setup + break; + + default: + AssertMsg1( false, "Unknown wizard step %d", (int)GTFGCClientSystem()->GetWizardStep() ); + break; + } + } + else + { + pszBackButtonText = "#TF_Matchmaking_LeaveParty"; + m_pNextButton->SetEnabled( false ); + } + } + + m_pBackButton->SetText( pszBackButtonText ); + m_pNextButton->SetText( pszNextButtonText ); + m_pNextButton->SetVisible( pszNextButtonText != NULL ); + + BaseClass::WriteControls(); +} + +//----------------------------------------------------------------------------- +bool CheckCompetitiveConvars() +{ + static ConVarRef mat_dxlevel( "mat_dxlevel"); + return mat_dxlevel.GetInt() >= 90; +} + +//----------------------------------------------------------------------------- +bool CLobbyContainerFrame_Comp::VerifyPartyAuthorization() const +{ + // Solo + CTFParty *pParty = GTFGCClientSystem()->GetParty(); + if ( pParty == NULL || pParty->GetNumMembers() <= 1 ) + { + if ( !GTFGCClientSystem()->BHasCompetitiveAccess() ) + { + ShowEconRequirementDialog( "#TF_Competitive_RequiresPass_Title", "#TF_Competitive_RequiresPass", CTFItemSchema::k_rchLadderPassItemDefName ); + return false; + } + else if ( !CheckCompetitiveConvars() ) + { + ShowMessageBox( "#TF_Competitive_Convars_CantProceed_Title", "#TF_Competitive_Convars_CantProceed", "#GameUI_OK" ); + return false; + } + } + // Group + else + { + wchar_t wszLocalized[512]; + char szLocalized[512]; + wchar_t wszCharPlayerName[128]; + + bool bAnyMembersWithoutAuth = false; + + for ( int i = 0 ; i < pParty->GetNumMembers() ; ++i ) + { + // Need a ticket and two-factor for the beta + if ( !pParty->Obj().members( i ).competitive_access() ) + { + bAnyMembersWithoutAuth = true; + V_UTF8ToUnicode( steamapicontext->SteamFriends()->GetFriendPersonaName( pParty->GetMember( i ) ), wszCharPlayerName, sizeof( wszCharPlayerName ) ); + g_pVGuiLocalize->ConstructString_safe( wszLocalized, g_pVGuiLocalize->Find( "#TF_Matchmaking_MissingPass" ), 1, wszCharPlayerName ); + g_pVGuiLocalize->ConvertUnicodeToANSI( wszLocalized, szLocalized, sizeof( szLocalized ) ); + + GTFGCClientSystem()->SendSteamLobbyChat( CTFGCClientSystem::k_eLobbyMsg_SystemMsgFromLeader, szLocalized ); + } + } + + if ( bAnyMembersWithoutAuth ) + { + ShowMessageBox( "#TF_Competitive_RequiresPass_Title", "#TF_Competitive_RequiresPass", "#GameUI_OK" ); + return false; + } + } + + CLobbyPanel_Comp* pCompContents = static_cast< CLobbyPanel_Comp* >( m_pContents ); + if ( pCompContents ) + { + uint32 unModeType = pCompContents->GetMatchGroup(); + + if ( unModeType >= k_nMatchGroup_Ladder_First && unModeType <= k_nMatchGroup_Ladder_Last ) + { + GTFGCClientSystem()->SetLadderType( unModeType ); + } + } + + return true; +} + +void CLobbyContainerFrame_Comp::HandleBackPressed() +{ + switch ( GTFGCClientSystem()->GetWizardStep() ) + { + case TF_Matchmaking_WizardStep_LADDER: + // !FIXME! Really need to confirm this! + GTFGCClientSystem()->EndMatchmaking(); + // And hide us + ShowPanel( false ); + return; + + case TF_Matchmaking_WizardStep_SEARCHING: + switch ( GTFGCClientSystem()->GetSearchMode() ) + { + case TF_Matchmaking_LADDER: + GTFGCClientSystem()->RequestSelectWizardStep( TF_Matchmaking_WizardStep_LADDER ); + return; + } + break; + + default: + Msg( "Unexpected wizard step %d", (int)GTFGCClientSystem()->GetWizardStep() ); + break; + } + + // Unhandled case + BaseClass::HandleBackPressed(); +} |