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/econ/confirm_dialog.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/econ/confirm_dialog.cpp')
| -rw-r--r-- | game/client/econ/confirm_dialog.cpp | 932 |
1 files changed, 932 insertions, 0 deletions
diff --git a/game/client/econ/confirm_dialog.cpp b/game/client/econ/confirm_dialog.cpp new file mode 100644 index 0000000..f9d0f77 --- /dev/null +++ b/game/client/econ/confirm_dialog.cpp @@ -0,0 +1,932 @@ +//========= 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 |