|
|
//========= 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(); }
|