You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
932 lines
28 KiB
932 lines
28 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
|
|
#include "cbase.h" |
|
|
|
#include "confirm_dialog.h" |
|
|
|
#include "ienginevgui.h" |
|
#include "econ_controls.h" |
|
#include "vgui/IInput.h" |
|
#include "vgui/ISurface.h" |
|
#include "vgui_controls/TextImage.h" |
|
#include "vgui_controls/CheckButton.h" |
|
#include "econ_ui.h" |
|
#include "store/store_panel.h" |
|
#ifdef TF_CLIENT_DLL |
|
#include "tf_playerpanel.h" |
|
#endif // TF_CLIENT_DLL |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
static const wchar_t* GetSCGlyph( const char* action ) |
|
{ |
|
auto origin = g_pInputSystem->GetSteamControllerActionOrigin( action, GAME_ACTION_SET_FPSCONTROLS ); |
|
return g_pInputSystem->GetSteamControllerFontCharacterForActionOrigin( origin ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CConfirmDialog::CConfirmDialog( vgui::Panel *parent ) |
|
: BaseClass( parent, "ConfirmDialog" ), |
|
m_pCancelButton( NULL ), |
|
m_pConfirmButton( NULL ), |
|
m_pIcon( NULL ) |
|
{ |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
LoadControlSettings( GetResFile(), "GAME" ); |
|
|
|
SetBorder( pScheme->GetBorder("EconItemBorder") ); |
|
|
|
// Cache off button ptrs |
|
m_pConfirmButton = dynamic_cast< CExButton* >( FindChildByName( "ConfirmButton" ) ); |
|
m_pCancelButton = dynamic_cast< CExButton* >( FindChildByName( "CancelButton" ) ); |
|
m_pIcon = dynamic_cast< vgui::ImagePanel* >( FindChildByName( "Icon" ) ); |
|
|
|
SetDialogVariable( "text", GetText() ); |
|
|
|
if ( ::input->IsSteamControllerActive() ) |
|
{ |
|
auto iconConfirm = GetSCGlyph( "cl_trigger_first_notification" ); |
|
auto iconCancel = GetSCGlyph( "cl_decline_first_notification" ); |
|
auto confirmHint = dynamic_cast< CExLabel* >( FindChildByName( "ConfirmButtonHintIcon" ) ); |
|
auto cancelHint = dynamic_cast< CExLabel* >( FindChildByName( "CancelButtonHintIcon" ) ); |
|
if ( confirmHint ) |
|
{ |
|
confirmHint->SetText( iconConfirm ); |
|
} |
|
|
|
if ( cancelHint ) |
|
{ |
|
cancelHint->SetText( iconCancel ); |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::Show( bool bMakePopup ) |
|
{ |
|
SetVisible( true ); |
|
if ( bMakePopup ) |
|
{ |
|
MakePopup(); |
|
} |
|
MoveToFront(); |
|
SetKeyBoardInputEnabled( true ); |
|
|
|
InvalidateLayout( true, true ); |
|
|
|
if ( ::input->IsSteamControllerActive() ) |
|
{ |
|
auto iconConfirm = GetSCGlyph( "vote_option1" ); |
|
auto iconCancel = GetSCGlyph( "vote_option2" ); |
|
bool bControllerMapped = iconConfirm[0] && iconCancel[0]; |
|
if ( bControllerMapped ) |
|
{ |
|
SetMouseInputEnabled( false ); |
|
} |
|
else |
|
{ |
|
SetMouseInputEnabled( true ); |
|
} |
|
} |
|
else |
|
{ |
|
SetMouseInputEnabled( true ); |
|
} |
|
|
|
TFModalStack()->PushModal( this ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::SetIconImage( const char *pszIcon ) |
|
{ |
|
Assert( m_pIcon ); |
|
if ( m_pIcon ) |
|
{ |
|
m_pIcon->SetImage( pszIcon ); |
|
m_pIcon->SetVisible( ( pszIcon ? true : false ) ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::OnCommand( const char *command ) |
|
{ |
|
if ( !Q_strnicmp( command, "cancel", 6 ) ) |
|
{ |
|
FinishUp(); |
|
PostMessage( GetParent(), new KeyValues( "ConfirmDlgResult", "confirmed", 0 ) ); |
|
} |
|
else if ( !Q_strnicmp( command, "confirm", 7 ) ) |
|
{ |
|
FinishUp(); |
|
PostMessage( GetParent(), new KeyValues( "ConfirmDlgResult", "confirmed", 1 ) ); |
|
} |
|
else |
|
{ |
|
engine->ClientCmd( const_cast<char *>( command ) ); |
|
} |
|
|
|
BaseClass::OnCommand( command ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::OnKeyCodeTyped( vgui::KeyCode code ) |
|
{ |
|
if( code == KEY_ESCAPE ) |
|
{ |
|
OnCommand( "cancel" ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnKeyCodePressed( code ); |
|
} |
|
} |
|
|
|
///----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::OnKeyCodePressed( vgui::KeyCode code ) |
|
{ |
|
ButtonCode_t nButtonCode = GetBaseButtonCode( code ); |
|
|
|
// We map the voting action buttons to the pseudo-buttons F1/F2 so that players can use them to interact with dialogs on the fly |
|
if( nButtonCode == KEY_XBUTTON_B || nButtonCode == STEAMCONTROLLER_F2 || nButtonCode == STEAMCONTROLLER_B ) |
|
{ |
|
OnCommand( "cancel" ); |
|
} |
|
else if ( nButtonCode == KEY_ENTER || nButtonCode == KEY_SPACE || nButtonCode == KEY_XBUTTON_A || nButtonCode == STEAMCONTROLLER_F1 || nButtonCode == STEAMCONTROLLER_A ) |
|
{ |
|
OnCommand( "confirm" ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnKeyCodePressed( code ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
const char *CConfirmDialog::GetResFile() |
|
{ |
|
if ( ::input->IsSteamControllerActive() ) |
|
{ |
|
return "Resource/UI/econ/ConfirmDialog_SC.res"; |
|
} |
|
else |
|
{ |
|
return "Resource/UI/econ/ConfirmDialog.res"; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Hide the panel, mark for deletion, remove from modal stack. |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::FinishUp() |
|
{ |
|
SetVisible( false ); |
|
TFModalStack()->PopModal( this ); |
|
MarkForDeletion(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CConfirmDialog::OnSizeChanged( int nNewWide, int nNewTall ) |
|
{ |
|
int nX, nY; |
|
|
|
// Shift buttons up |
|
if ( m_pCancelButton ) |
|
{ |
|
m_pCancelButton->GetPos( nX, nY ); |
|
m_pCancelButton->SetPos( nX, nNewTall - m_pCancelButton->GetTall() - YRES(15) ); |
|
} |
|
|
|
if ( m_pConfirmButton ) |
|
{ |
|
m_pConfirmButton->GetPos( nX, nY ); |
|
m_pConfirmButton->SetPos( nX, nNewTall - m_pConfirmButton->GetTall() - YRES(15) ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFGenericConfirmDialog::CTFGenericConfirmDialog( const char *pTitle, const char *pTextKey, |
|
const char *pConfirmBtnText, const char *pCancelBtnText, |
|
GenericConfirmDialogCallback callback, vgui::Panel *pParent ) |
|
: BaseClass( pParent ), |
|
m_pTextKey( pTextKey ) |
|
{ |
|
CommonInit( pTitle, pConfirmBtnText, pCancelBtnText, callback, pParent ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFGenericConfirmDialog::CTFGenericConfirmDialog( const char *pTitle, const wchar_t *pText, |
|
const char *pConfirmBtnText, const char *pCancelBtnText, |
|
GenericConfirmDialogCallback callback, vgui::Panel *pParent ) |
|
: BaseClass( pParent ), |
|
m_pTextKey( NULL ) |
|
{ |
|
CommonInit( pTitle, pConfirmBtnText, pCancelBtnText, callback, pParent ); |
|
|
|
V_wcsncpy( m_wszBuffer, pText, sizeof( m_wszBuffer ) ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::CommonInit( const char *pTitle, const char *pConfirmBtnText, const char *pCancelBtnText, |
|
GenericConfirmDialogCallback callback, vgui::Panel *pParent ) |
|
{ |
|
if ( pParent == NULL ) |
|
{ |
|
vgui::HScheme scheme = vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/ClientScheme.res", "ClientScheme"); |
|
SetScheme(scheme); |
|
SetProportional( true ); |
|
} |
|
|
|
m_pTitle = pTitle; |
|
m_pConfirmBtnText = pConfirmBtnText; |
|
m_pCancelBtnText = pCancelBtnText; |
|
m_pCallback = callback; |
|
m_pContext = NULL; |
|
m_pKeyValues = NULL; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFGenericConfirmDialog::~CTFGenericConfirmDialog() |
|
{ |
|
if ( m_pKeyValues ) |
|
{ |
|
m_pKeyValues->deleteThis(); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
const wchar_t *CTFGenericConfirmDialog::GetText() |
|
{ |
|
if ( m_pTextKey ) |
|
{ |
|
g_pVGuiLocalize->ConstructString_safe( m_wszBuffer, m_pTextKey, m_pKeyValues ); |
|
return m_wszBuffer; |
|
} |
|
|
|
return m_wszBuffer; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
if ( m_pConfirmButton && m_pConfirmBtnText ) |
|
{ |
|
m_pConfirmButton->SetText( m_pConfirmBtnText ); |
|
} |
|
|
|
if ( m_pCancelButton && m_pCancelBtnText ) |
|
{ |
|
m_pCancelButton->SetText (m_pCancelBtnText ); |
|
} |
|
|
|
SetXToRed( m_pConfirmButton ); |
|
SetXToRed( m_pCancelButton ); |
|
|
|
CExLabel *pTitle = dynamic_cast< CExLabel* >( FindChildByName( "TitleLabel" ) ); |
|
if ( pTitle ) |
|
{ |
|
pTitle->SetText( m_pTitle ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::PerformLayout() |
|
{ |
|
// Center it, keeping requested size |
|
int x, y, ww, wt, wide, tall; |
|
vgui::surface()->GetWorkspaceBounds( x, y, ww, wt ); |
|
GetSize(wide, tall); |
|
SetPos(x + ((ww - wide) / 2), y + ((wt - tall) / 2)); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::OnCommand( const char *command ) |
|
{ |
|
bool bFinishUp = false; |
|
bool bConfirmed = false; |
|
|
|
if ( !Q_strnicmp( command, "cancel", 6 ) ) |
|
{ |
|
bConfirmed = false; |
|
bFinishUp = true; |
|
} |
|
else if ( !Q_strnicmp( command, "confirm", 7 ) ) |
|
{ |
|
bConfirmed = true; |
|
bFinishUp = true; |
|
} |
|
|
|
if ( bFinishUp ) |
|
{ |
|
FinishUp(); |
|
if ( m_pCallback ) |
|
{ |
|
m_pCallback( bConfirmed, m_pContext ); |
|
} |
|
return; |
|
} |
|
|
|
BaseClass::OnCommand( command ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::SetStringTokens( KeyValues *pKeyValues ) |
|
{ |
|
if ( m_pKeyValues != NULL ) |
|
{ |
|
m_pKeyValues->deleteThis(); |
|
} |
|
m_pKeyValues = pKeyValues->MakeCopy(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::AddStringToken( const char* pToken, const wchar_t* pValue ) |
|
{ |
|
if ( m_pKeyValues == NULL ) |
|
{ |
|
m_pKeyValues = new KeyValues( "GenericConfirmDialog" ); |
|
} |
|
m_pKeyValues->SetWString( pToken, pValue ); |
|
InvalidateLayout( false, true ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmDialog::SetContext( void *pContext ) |
|
{ |
|
m_pContext = pContext; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFGenericConfirmOptOutDialog::CTFGenericConfirmOptOutDialog( const char *pTitle, |
|
const char *pText, |
|
const char *pConfirmBtnText, |
|
const char *pCancelBtnText, |
|
const char *pOptOutText, |
|
const char *pOptOutConVarName, |
|
GenericConfirmDialogCallback callback, |
|
vgui::Panel *parent ) : |
|
CTFGenericConfirmDialog( pTitle, pText, pConfirmBtnText, pCancelBtnText, callback, parent ) |
|
{ |
|
m_optOutText = pOptOutText; |
|
m_optOutCheckbox = NULL; |
|
m_optOutConVarName = pOptOutConVarName; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmOptOutDialog::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
m_optOutCheckbox = dynamic_cast< vgui::CheckButton * >( FindChildByName( "OptOutCheckbox" ) ); |
|
|
|
if ( m_optOutCheckbox && m_optOutText ) |
|
{ |
|
m_optOutCheckbox->SetMouseInputEnabled( true ); |
|
m_optOutCheckbox->SetText( m_optOutText ); |
|
|
|
// center horizontally |
|
vgui::Panel *parent = m_optOutCheckbox->GetParent(); |
|
if ( parent ) |
|
{ |
|
float parentWidth = parent->GetWide(); |
|
|
|
int checkBoxWidth, checkBoxHeight; |
|
m_optOutCheckbox->GetContentSize( checkBoxWidth, checkBoxHeight ); |
|
|
|
// fudge in checkbox width |
|
checkBoxWidth += 34.0f; |
|
|
|
int checkX, checkY; |
|
m_optOutCheckbox->GetPos( checkX, checkY ); |
|
|
|
m_optOutCheckbox->SetPos( ( parentWidth - checkBoxWidth ) / 2.0f, checkY ); |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
const char *CTFGenericConfirmOptOutDialog::GetResFile() |
|
{ |
|
return "Resource/UI/econ/ConfirmDialogOptOut.res"; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFGenericConfirmOptOutDialog::OnButtonChecked( KeyValues *pData ) |
|
{ |
|
ConVarRef var( m_optOutConVarName ); |
|
if ( !var.IsValid() ) |
|
return; |
|
|
|
if ( !m_optOutCheckbox ) |
|
return; |
|
|
|
var.SetValue( m_optOutCheckbox->IsSelected() ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFUpgradeBoxDialog::OnCommand( const char *command ) |
|
{ |
|
if ( !Q_stricmp( command, "upgrade" ) ) |
|
{ |
|
FinishUp(); |
|
|
|
// Open the store, and show the upgrade advice |
|
EconUI()->CloseEconUI(); |
|
EconUI()->OpenStorePanel( STOREPANEL_SHOW_UPGRADESTEPS, false ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnCommand( command ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFGenericConfirmDialog *ShowConfirmDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, const char *pCancelBtnText, GenericConfirmDialogCallback callback, |
|
vgui::Panel *parent/*=NULL*/, void *pContext/*=NULL*/, const char *pSound/*=NULL*/ ) |
|
{ |
|
CTFGenericConfirmDialog *pDialog = vgui::SETUP_PANEL( |
|
new CTFGenericConfirmDialog( |
|
pTitle, pText, |
|
pConfirmBtnText, pCancelBtnText, |
|
callback, parent |
|
) |
|
); |
|
|
|
if ( pDialog ) |
|
{ |
|
pDialog->Show(); |
|
|
|
// Play a sound, if one was supplied. |
|
if ( pSound && pSound[0] ) |
|
{ |
|
vgui::surface()->PlaySound( pSound ); |
|
} |
|
} |
|
|
|
if ( pContext ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialog *ShowMessageBox( const char *pTitle, const char *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent, void *pContext ) |
|
{ |
|
return ShowMessageBox( pTitle, pText, NULL, pConfirmBtnText, callback, parent, pContext ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialog *ShowMessageBox( const char *pTitle, const wchar_t *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent , void *pContext) |
|
{ |
|
CTFMessageBoxDialog *pDialog = vgui::SETUP_PANEL( |
|
new CTFMessageBoxDialog( |
|
pTitle, pText, |
|
pConfirmBtnText, |
|
callback, parent |
|
) |
|
); |
|
|
|
if ( pDialog ) |
|
{ |
|
if ( pContext ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
} |
|
|
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialog *ShowMessageBox( const char *pTitle, const char *pText, KeyValues *pKeyValues, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent , void *pContext) |
|
{ |
|
CTFMessageBoxDialog *pDialog = vgui::SETUP_PANEL( new CTFMessageBoxDialog( pTitle, pText, |
|
pConfirmBtnText, |
|
callback, parent ) ); |
|
|
|
if ( pDialog ) |
|
{ |
|
if ( pContext ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
} |
|
|
|
if ( pKeyValues ) |
|
{ |
|
pDialog->SetStringTokens( pKeyValues ); |
|
pDialog->SetDialogVariable( "text", pDialog->GetText() ); |
|
} |
|
|
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Pop up a model yes/no dialog with an "opt out" checkbox that persists via a ConVar |
|
//----------------------------------------------------------------------------- |
|
CTFGenericConfirmOptOutDialog *ShowConfirmOptOutDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, const char *pCancelBtnText, const char *pOptOutText, const char *pOptOutConVarName, GenericConfirmDialogCallback callback, vgui::Panel *parent) |
|
{ |
|
CTFGenericConfirmOptOutDialog *pDialog = vgui::SETUP_PANEL( new CTFGenericConfirmOptOutDialog( pTitle, pText, |
|
pConfirmBtnText, pCancelBtnText, |
|
pOptOutText, pOptOutConVarName, |
|
callback, parent ) ); |
|
if ( pDialog ) |
|
{ |
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialog *ShowUpgradeMessageBox( const char *pTitle, const char *pText, |
|
const char *pConfirmBtnText, |
|
GenericConfirmDialogCallback callback, |
|
vgui::Panel *parent, void *pContext ) |
|
{ |
|
CTFMessageBoxDialog *pDialog = vgui::SETUP_PANEL( |
|
new CTFUpgradeBoxDialog( |
|
pTitle, pText, |
|
pConfirmBtnText, callback, parent |
|
) |
|
); |
|
|
|
if ( pDialog ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Pop up a dialog prompting the player to go to the store to upgrade |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialog *ShowUpgradeMessageBox( const char *pTitle, const char *pText ) |
|
{ |
|
return ShowUpgradeMessageBox( pTitle, pText, "#GameUI_OK", NULL, NULL, NULL ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialogWithSound *ShowMessageBoxWithSound( const char *pTitle, const char *pText, const char *pszSound, float flDelay, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent, void *pContext ) |
|
{ |
|
return ShowMessageBoxWithSound( pTitle, pText, NULL, pszSound, flDelay, pConfirmBtnText, callback, parent, pContext ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialogWithSound *ShowMessageBoxWithSound( const char *pTitle, const wchar_t *pText, const char *pszSound, float flDelay, const char *pConfirmBtnText , GenericConfirmDialogCallback callback, vgui::Panel *parent, void *pContext ) |
|
{ |
|
CTFMessageBoxDialogWithSound *pDialog = vgui::SETUP_PANEL( new CTFMessageBoxDialogWithSound( pTitle, pText, pszSound, flDelay, pConfirmBtnText, callback, parent ) ); |
|
|
|
if ( pDialog ) |
|
{ |
|
if ( pContext ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
} |
|
|
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialogWithSound *ShowMessageBoxWithSound( const char *pTitle, const char *pText, KeyValues *pKeyValues, const char *pszSound, float flDelay, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent, void *pContext ) |
|
{ |
|
CTFMessageBoxDialogWithSound *pDialog = vgui::SETUP_PANEL( new CTFMessageBoxDialogWithSound( pTitle, pText, pszSound, flDelay, pConfirmBtnText, callback, parent ) ); |
|
|
|
if ( pDialog ) |
|
{ |
|
if ( pContext ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
} |
|
|
|
if ( pKeyValues ) |
|
{ |
|
pDialog->SetStringTokens( pKeyValues ); |
|
pDialog->SetDialogVariable( "text", pDialog->GetText() ); |
|
} |
|
|
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialogWithSound::CTFMessageBoxDialogWithSound( const char *pTitle, const char *pText, const char *pszSound, float flDelay, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent ) |
|
: CTFMessageBoxDialog( pTitle, pText, pConfirmBtnText, callback, parent ) |
|
{ |
|
m_szSound[0] = 0; |
|
|
|
if ( pszSound ) |
|
{ |
|
V_strcpy_safe( m_szSound, pszSound ); |
|
} |
|
|
|
m_flSoundTime = gpGlobals->curtime + flDelay; |
|
m_bPlayedSound = false; |
|
|
|
vgui::ivgui()->AddTickSignal( GetVPanel(), 50 ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFMessageBoxDialogWithSound::CTFMessageBoxDialogWithSound( const char *pTitle, const wchar_t *pText, const char *pszSound, float flDelay, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent ) |
|
: CTFMessageBoxDialog( pTitle, pText, pConfirmBtnText, callback, parent ) |
|
{ |
|
m_szSound[0] = 0; |
|
|
|
if ( pszSound ) |
|
{ |
|
V_strcpy_safe( m_szSound, pszSound ); |
|
} |
|
|
|
m_flSoundTime = gpGlobals->curtime + flDelay; |
|
m_bPlayedSound = false; |
|
|
|
vgui::ivgui()->AddTickSignal( GetVPanel(), 50 ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFMessageBoxDialogWithSound::OnTick() |
|
{ |
|
BaseClass::OnTick(); |
|
|
|
if ( !m_bPlayedSound && ( m_flSoundTime < gpGlobals->curtime ) ) |
|
{ |
|
m_bPlayedSound = true; |
|
|
|
if ( Q_strlen( m_szSound ) > 0 ) |
|
{ |
|
C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer(); |
|
if ( pLocalPlayer ) |
|
{ |
|
pLocalPlayer->EmitSound( m_szSound ); |
|
} |
|
} |
|
} |
|
} |
|
|
|
#ifdef TF_CLIENT_DLL |
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CTFReviveDialog::CTFReviveDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent ) |
|
: CTFMessageBoxDialog( pTitle, pText, pConfirmBtnText, callback, parent ) |
|
{ |
|
m_pTargetHealth = new CTFSpectatorGUIHealth( this, "SpectatorGUIHealth" ); |
|
m_pTargetHealth->SetAllowAnimations( false ); |
|
m_pTargetHealth->HideHealthBonusImage(); |
|
|
|
vgui::ivgui()->AddTickSignal( GetVPanel(), 50 ); |
|
OnTick(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFReviveDialog::PerformLayout() |
|
{ |
|
// Skipping base class |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFReviveDialog::OnTick() |
|
{ |
|
BaseClass::OnTick(); |
|
|
|
if ( !m_pTargetHealth ) |
|
return; |
|
|
|
if ( !m_hEntity ) |
|
return; |
|
|
|
float flHealth = m_hEntity->GetHealth(); |
|
if ( flHealth != m_flPrevHealth ) |
|
{ |
|
float flMaxHealth = m_hEntity->GetMaxHealth(); |
|
m_pTargetHealth->SetHealth( flHealth, flMaxHealth, flMaxHealth ); |
|
m_flPrevHealth = flHealth; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CTFReviveDialog::SetOwner( CBaseEntity *pEntity ) |
|
{ |
|
if ( pEntity ) |
|
{ |
|
m_hEntity = pEntity; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: In-game dialog that avoids the crosshair area and is much smaller |
|
//----------------------------------------------------------------------------- |
|
CTFReviveDialog *ShowRevivePrompt( CBaseEntity *pOwner, |
|
const char *pTitle, |
|
const char *pText, |
|
const char *pConfirmBtnText, |
|
GenericConfirmDialogCallback callback, |
|
vgui::Panel *parent, void *pContext ) |
|
{ |
|
CTFReviveDialog *pDialog = vgui::SETUP_PANEL( new CTFReviveDialog( pTitle, pText, pConfirmBtnText, callback, parent ) ); |
|
if ( pDialog ) |
|
{ |
|
if ( pContext ) |
|
{ |
|
pDialog->SetContext( pContext ); |
|
} |
|
|
|
pDialog->SetOwner( pOwner ); |
|
pDialog->Show(); |
|
} |
|
|
|
return pDialog; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CEconRequirementDialog::CEconRequirementDialog( const char *pTitle, const char *pTextKey, const char *pItemDefName ) |
|
: CTFGenericConfirmDialog( pTitle, pTextKey, NULL, NULL, NULL, NULL ) |
|
, m_hItemDef( pItemDefName ) |
|
{ |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
const char *CEconRequirementDialog::GetResFile() |
|
{ |
|
return "Resource/UI/MvMEconRequirementDialog.res"; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CEconRequirementDialog::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
vgui::ImagePanel *pItemImagePanel = dynamic_cast<vgui::ImagePanel *>( FindChildByName( "ItemImagePanel", true ) ); Assert( pItemImagePanel ); |
|
Assert( pItemImagePanel ); |
|
if ( pItemImagePanel && m_hItemDef ) |
|
{ |
|
pItemImagePanel->SetImage( CFmtStr( "../%s_large", m_hItemDef->GetInventoryImage() ) ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CEconRequirementDialog::OnCommand( const char *command ) |
|
{ |
|
if ( m_hItemDef && !Q_stricmp( command, "show_in_store" ) ) |
|
{ |
|
FinishUp(); |
|
|
|
// Open the store, and show the upgrade advice |
|
EconUI()->CloseEconUI(); |
|
EconUI()->OpenStorePanel( m_hItemDef->GetDefinitionIndex(), false ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnCommand( command ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void ShowEconRequirementDialog( const char *pTitle, const char *pText, const char *pItemDefName ) |
|
{ |
|
CEconRequirementDialog *pDialog = vgui::SETUP_PANEL( new CEconRequirementDialog( pTitle, pText, pItemDefName ) ); |
|
if ( pDialog ) |
|
{ |
|
pDialog->Show(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Get the correct res file to use (depends on Steam Controller state) |
|
//----------------------------------------------------------------------------- |
|
const char* CTFMessageBoxDialog::GetResFile() |
|
{ |
|
if ( ::input->IsSteamControllerActive() ) |
|
{ |
|
return "Resource/UI/econ/MessageBoxDialog_SC.res"; |
|
} |
|
else |
|
{ |
|
return "Resource/UI/econ/MessageBoxDialog.res"; |
|
} |
|
} |
|
|
|
|
|
#endif // TF_CLIENT_DLL
|
|
|