summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/tf_lobby_container_frame_comp.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/vgui/tf_lobby_container_frame_comp.cpp
downloadarchived-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.cpp297
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();
+}