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/tf_hud_disconnect_prompt.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/tf_hud_disconnect_prompt.cpp')
| -rw-r--r-- | game/client/tf/tf_hud_disconnect_prompt.cpp | 215 |
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(); +} |