summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_disconnect_prompt.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/tf_hud_disconnect_prompt.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/tf_hud_disconnect_prompt.cpp')
-rw-r--r--game/client/tf/tf_hud_disconnect_prompt.cpp215
1 files changed, 215 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_disconnect_prompt.cpp b/game/client/tf/tf_hud_disconnect_prompt.cpp
new file mode 100644
index 0000000..16778a8
--- /dev/null
+++ b/game/client/tf/tf_hud_disconnect_prompt.cpp
@@ -0,0 +1,215 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Disconnect prompt to warn leavers of penalty they will incur
+//
+// $NoKeywords: $
+//=============================================================================
+#include "cbase.h"
+#include "tf_hud_disconnect_prompt.h"
+#include "econ_controls.h"
+#include "tf_gc_client.h"
+#include "tf_gamerules.h"
+
+using namespace vgui;
+
+CTFDisconnectConfirmDialog::CTFDisconnectConfirmDialog(
+ const char *pTitle,
+ const char *pTextKey,
+ const char *pConfirmBtnText,
+ const char *pCancelBtnText,
+ GenericConfirmDialogCallback callback,
+ vgui::Panel *pParent
+) : CTFGenericConfirmDialog( pTitle, pTextKey, pConfirmBtnText, pCancelBtnText, callback, pParent )
+{
+ m_eAbandonStatus = GTFGCClientSystem()->GetCurrentServerAbandonStatus();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+const char *CTFDisconnectConfirmDialog::GetResFile()
+{
+ switch ( m_eAbandonStatus )
+ {
+ case k_EAbandonGameStatus_Safe:
+ return "Resource/UI/econ/ConfirmDialogAbandonSafe.res";
+ case k_EAbandonGameStatus_AbandonWithoutPenalty:
+ return "Resource/UI/econ/ConfirmDialogAbandonNoPenalty.res";
+ case k_EAbandonGameStatus_AbandonWithPenalty:
+ return "Resource/UI/econ/ConfirmDialogAbandonPenalty.res";
+ }
+
+ return "Resource/UI/econ/ConfirmDialogOptOut.res";
+}
+
+void CTFDisconnectConfirmDialog::SetReason( eDisconnectReason reason )
+{
+ m_eReason = reason;
+}
+
+void CTFDisconnectConfirmDialog::OnCommand( const char *command )
+{
+ if( FStrEq( command, "confirm" ) )
+ {
+ // Check this before disconnecting
+ if ( GTFGCClientSystem()->BExitMatchmakingAfterDisconnect() )
+ {
+ GTFGCClientSystem()->EndMatchmaking( true );
+ }
+
+ engine->DisconnectInternal();
+
+ int nCount = m_confirmCommands.Count();
+ for( int i=0; i<nCount; ++i )
+ {
+ engine->ClientCmd_Unrestricted( m_confirmCommands[i] );
+ }
+ }
+ else if( FStrEq( command, "cancel" ) )
+ {
+ int nCount = m_cancelCommands.Count();
+ for( int i=0; i<nCount; ++i )
+ {
+ engine->ClientCmd_Unrestricted( m_cancelCommands[i] );
+ }
+ }
+
+ // This will clean us up if we get a cancel or confirm command
+ BaseClass::OnCommand( command );
+}
+
+
+void CTFDisconnectConfirmDialog::AddConfirmCommand( const char *command )
+{
+ m_confirmCommands.AddToTail( command );
+}
+
+
+void CTFDisconnectConfirmDialog::AddCancelCommand( const char *command )
+{
+ m_cancelCommands.AddToTail( command );
+}
+
+//
+// Extern Helper to Build Dialog
+CTFDisconnectConfirmDialog *BuildDisconnectConfirmDialog ()
+{
+ EAbandonGameStatus eAbandonStatus = GTFGCClientSystem()->GetCurrentServerAbandonStatus();
+ const char* pszTitle = NULL;
+ const char* pszBody = NULL;
+ const char* pszConfirm = NULL;
+
+ switch ( eAbandonStatus )
+ {
+ case k_EAbandonGameStatus_Safe:
+ pszTitle = "#TF_MM_Disconnect_Title";
+ pszBody = "#TF_MM_Disconnect";
+ pszConfirm = "#TF_MM_Rejoin_Leave";
+ break;
+ case k_EAbandonGameStatus_AbandonWithoutPenalty:
+ pszTitle = "#TF_MM_Abandon_Title";
+ pszBody = "#TF_MM_Abandon_NoPenalty";
+ pszConfirm = "#TF_MM_Rejoin_Leave";
+ break;
+ case k_EAbandonGameStatus_AbandonWithPenalty:
+ pszTitle = "#TF_MM_Abandon_Title";
+ pszBody = ( TFGameRules() && TFGameRules()->IsMannVsMachineMode() ) ? "TF_MM_Abandon_Ban" : "#TF_MM_Abandon";
+ pszConfirm = "#TF_MM_Rejoin_Abandon";
+ break;
+ }
+
+ CTFDisconnectConfirmDialog *pDialog = vgui::SETUP_PANEL( new CTFDisconnectConfirmDialog(
+ pszTitle,
+ pszBody,
+ pszConfirm,
+ "#TF_MM_Rejoin_Stay",
+ NULL,
+ NULL ) );
+
+ return pDialog;
+}
+
+// sent from quit and disconnect attempts
+CON_COMMAND( cl_disconnect_prompt, "Prompt about disconnect" )
+{
+ CTFDisconnectConfirmDialog *pDialog = vgui::SETUP_PANEL( new CTFDisconnectConfirmDialog( "#TF_MM_Abandon_Title",
+ "#TF_MM_Abandon",
+ "#TF_Coach_Yes",
+ "#TF_Coach_No",
+ NULL,
+ NULL ) );
+
+ if ( pDialog )
+ {
+ pDialog->Show();
+ }
+}
+
+
+bool HandleDisconnectAttempt()
+{
+ // !FIXME! We could show different messages depending on the abandon status
+
+ if( engine->IsInGame() && GameRules() && GameRules()->ShouldConfirmOnDisconnect() &&
+ GTFGCClientSystem()->GetCurrentServerAbandonStatus() == k_EAbandonGameStatus_AbandonWithPenalty )
+ {
+ CTFDisconnectConfirmDialog *pDialog = vgui::SETUP_PANEL( new CTFDisconnectConfirmDialog( "#TF_MM_Abandon_Title",
+ "#TF_MM_Abandon",
+ "#TF_Coach_Yes",
+ "#TF_Coach_No",
+ NULL,
+ NULL ) );
+
+ if ( pDialog )
+ {
+ pDialog->Show();
+ }
+
+ // The disconnect was handled by us. Stop the engine from handling it.
+ return true;
+ }
+
+ // We're not changing the disconnect behavior in any way. Let the engine take care of it.
+ return false;
+}
+
+
+
+//-----------------------------------------------------------------------------
+// CTFRejoinConfirmDialog
+//-----------------------------------------------------------------------------
+CTFRejoinConfirmDialog::CTFRejoinConfirmDialog(
+ const char *pTitle,
+ const char *pTextKey,
+ const char *pConfirmBtnText,
+ const char *pCancelBtnText,
+ GenericConfirmDialogCallback callback,
+ vgui::Panel *pParent
+ ) : CTFGenericConfirmDialog( pTitle, pTextKey, pConfirmBtnText, pCancelBtnText, callback, pParent )
+{
+ m_eAbandonStatus = GTFGCClientSystem()->GetAssignedMatchAbandonStatus();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+const char *CTFRejoinConfirmDialog::GetResFile()
+{
+ switch ( m_eAbandonStatus )
+ {
+ case k_EAbandonGameStatus_Safe:
+ return "Resource/UI/econ/ConfirmDialogAbandonSafe.res";
+ case k_EAbandonGameStatus_AbandonWithoutPenalty:
+ return "Resource/UI/econ/ConfirmDialogAbandonNoPenalty.res";
+ case k_EAbandonGameStatus_AbandonWithPenalty:
+ return "Resource/UI/econ/ConfirmDialogAbandonPenalty.res";
+ }
+
+ return "Resource/UI/econ/ConfirmDialogOptOut.res";
+}
+
+//-----------------------------------------------------------------------------
+void CTFRejoinConfirmDialog::CloseRejoinWindow()
+{
+ FinishUp();
+}