summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_mann_vs_machine_loss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/tf_hud_mann_vs_machine_loss.cpp')
-rw-r--r--game/client/tf/tf_hud_mann_vs_machine_loss.cpp352
1 files changed, 352 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_mann_vs_machine_loss.cpp b/game/client/tf/tf_hud_mann_vs_machine_loss.cpp
new file mode 100644
index 0000000..95a6017
--- /dev/null
+++ b/game/client/tf/tf_hud_mann_vs_machine_loss.cpp
@@ -0,0 +1,352 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Wave Loss Screen for MvM
+//
+// $NoKeywords: $
+//=============================================================================
+#include "cbase.h"
+#include "tf_hud_mann_vs_machine_loss.h"
+
+using namespace vgui;
+
+#ifdef STAGING_ONLY
+ConVar tf_tips_show_captain_canteen( "tf_tips_show_captain_canteen", 0, FCVAR_NONE, "Show Captain Canteen when displaying tips" );
+#endif
+
+
+const char *g_pszInactiveClassPortraits[] =
+{
+ "", // TF_CLASS_UNDEFINED = 0,
+ "class_sel_sm_scout_inactive",
+ "class_sel_sm_soldier_inactive",
+ "class_sel_sm_pyro_inactive",
+ "class_sel_sm_demo_inactive",
+ "class_sel_sm_heavy_inactive",
+ "class_sel_sm_engineer_inactive",
+ "class_sel_sm_medic_inactive",
+ "class_sel_sm_sniper_inactive",
+ "class_sel_sm_spy_inactive",
+ "class_sel_sm_random_inactive", // Random
+};
+
+//-----------------------------------------------------------------------------
+// CMvMVictoryPanelContainer
+//-----------------------------------------------------------------------------
+DECLARE_BUILD_FACTORY( CMvMWaveLossPanel );
+
+CMvMWaveLossPanel::CMvMWaveLossPanel( Panel *parent, const char *pName ) : vgui::EditablePanel( parent, pName )
+{
+ SetMouseInputEnabled( true );
+
+ MakePopup();
+ MoveToFront();
+
+ m_pVoteButton = new CExImageButton( this, "VoteButton", g_pVGuiLocalize->Find( "#TF_PVE_Vote_MissionRestart" ), this );
+ m_pCloseButton = new CExImageButton( this, "ContinueButton", g_pVGuiLocalize->Find( "#ConfirmButtonText" ), this );
+
+ m_pHintContainer = NULL;
+ m_pCollectionContainer = NULL;
+ m_pUsageContainer = NULL;
+ m_pCaptainCanteenBody = NULL;
+ m_pCaptainCanteenMisc = NULL;
+ m_pCaptainCanteenHat = NULL;
+ m_pHintImage1 = NULL;
+ m_pHintImage2 = NULL;
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ // load control settings...
+ LoadControlSettings( "resource/UI/MvMWaveLossPanel.res" );
+
+ m_pHintContainer = dynamic_cast<vgui::EditablePanel*>( FindChildByName( "HintContainer" ) );
+ m_pCollectionContainer = dynamic_cast<vgui::EditablePanel*>( FindChildByName( "CollectionContainer" ) );
+ m_pUsageContainer = dynamic_cast<vgui::EditablePanel*>( FindChildByName( "UsageContainer" ) );
+
+ if ( m_pHintContainer )
+ {
+ m_pCaptainCanteenBody = dynamic_cast<vgui::ImagePanel*>( m_pHintContainer->FindChildByName( "CptCntnBody" ) );
+ m_pCaptainCanteenMisc = dynamic_cast<vgui::ImagePanel*>( m_pHintContainer->FindChildByName( "CptCntnMisc" ) );
+ m_pCaptainCanteenHat = dynamic_cast<vgui::ImagePanel*>( m_pHintContainer->FindChildByName( "CptCntnHat" ) );
+
+ m_pHintImage1 = dynamic_cast<vgui::ImagePanel*>( m_pHintContainer->FindChildByName( "HintImage1" ) );
+ m_pHintImage2 = dynamic_cast<vgui::ImagePanel*>( m_pHintContainer->FindChildByName( "HintImage2" ) );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::FireGameEvent( IGameEvent * event )
+{
+
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::OnTick( void )
+{
+ if ( !IsVisible() )
+ return;
+
+ if ( TFObjectiveResource() && !TFObjectiveResource()->GetMannVsMachineIsBetweenWaves() )
+ {
+ // Close it if the mission starts
+ SetMouseInputEnabled( false );
+ SetVisible( false );
+ }
+
+ // Display Credit Usage Stats
+ CMannVsMachineStats *pMVMStats = MannVsMachineStats_GetInstance();
+ if ( pMVMStats != NULL )
+ {
+ if ( m_pCollectionContainer )
+ {
+ m_pCollectionContainer->SetDialogVariable( "creditscollected", (int)pMVMStats->GetAcquiredCredits( -1, false ) );
+ m_pCollectionContainer->SetDialogVariable( "creditsmissed", (int)pMVMStats->GetMissedCredits( -1 ) );
+ m_pCollectionContainer->SetDialogVariable( "creditbonus", (int)pMVMStats->GetBonusCredits( -1 ) );
+ }
+
+ if ( m_pUsageContainer )
+ {
+ // Local Player
+ m_pUsageContainer->SetDialogVariable( "buybacksyou", (int)pMVMStats->GetLocalPlayerBuyBackSpending( -1 ) );
+ m_pUsageContainer->SetDialogVariable( "bottlesyou", (int)pMVMStats->GetLocalPlayerBottleSpending( -1 ) );
+
+ int nTotalUpgradeCosts = (int)pMVMStats->GetLocalPlayerUpgradeSpending( -1 );
+ CSteamID steamID;
+ int nActiveUpgradeCosts = 0;
+ if ( C_TFPlayer::GetLocalTFPlayer()->GetSteamID( &steamID ) )
+ {
+ nActiveUpgradeCosts = (int)pMVMStats->GetPlayerActiveUpgradeCosts( steamID.ConvertToUint64() );
+ }
+
+ m_pUsageContainer->SetDialogVariable( "inactiveupgradesyou", nTotalUpgradeCosts - nActiveUpgradeCosts );
+
+ // Team
+ nTotalUpgradeCosts = (int)pMVMStats->GetUpgradeSpending();
+ nActiveUpgradeCosts = (int)pMVMStats->GetPlayerActiveUpgradeCosts( 0 );
+
+ m_pUsageContainer->SetDialogVariable( "buybacksteam", (int)pMVMStats->GetBuyBackSpending() );
+ m_pUsageContainer->SetDialogVariable( "bottlesteam", (int)pMVMStats->GetBottleSpending() );
+ m_pUsageContainer->SetDialogVariable( "inactiveupgradesteam", nTotalUpgradeCosts - nActiveUpgradeCosts );
+ }
+ }
+
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::OnCommand( const char *command )
+{
+ if ( !Q_stricmp( command, "vote_restart" ) )
+ {
+ engine->ClientCmd( "callvote RestartGame;" );
+ SetMouseInputEnabled( false );
+ SetVisible( false );
+ }
+ else if ( !Q_stricmp( command, "continue" ) )
+ {
+ SetMouseInputEnabled( false );
+ SetVisible( false );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::ShowPanel()
+{
+ SetVisible( true );
+ SetKeyBoardInputEnabled( false );
+ SetMouseInputEnabled( true );
+ MoveToFront();
+
+ ClearContents();
+
+ if ( TFObjectiveResource() )
+ {
+ // Get the WaveNumber
+ int iWaveNumber = TFObjectiveResource()->GetMannVsMachineWaveCount();
+
+ wchar_t wszWaveNumber[16];
+ _snwprintf( wszWaveNumber, ARRAYSIZE( wszWaveNumber ), L"%d", MAX( 1, iWaveNumber ) );
+
+ wchar_t wszLocalizedWave[512];
+ g_pVGuiLocalize->ConstructString_safe( wszLocalizedWave, g_pVGuiLocalize->Find( "#TF_PVE_WaveCountFail" ), 1, wszWaveNumber );
+ SetDialogVariable( "waveheader", wszLocalizedWave );
+
+ // Pop file
+ char szTempName[MAX_PATH];
+ V_FileBase( TFObjectiveResource()->GetMvMPopFileName(), szTempName, sizeof( szTempName ) );
+ int iChallengeIndex = GetItemSchema()->FindMvmMissionByName( szTempName );
+
+ wchar_t wszLocalizedSummary[ MAX_PATH ];
+ if ( GetItemSchema()->GetMvmMissions().IsValidIndex( iChallengeIndex ) )
+ {
+ const MvMMission_t &mission = GetItemSchema()->GetMvmMissions()[ iChallengeIndex ];
+ g_pVGuiLocalize->ConstructString_safe( wszLocalizedSummary, g_pVGuiLocalize->Find( "#TF_PVE_MissionSummaryScheme" ), 2,
+ g_pVGuiLocalize->Find( mission.m_sDisplayName.Get() ), g_pVGuiLocalize->Find( mission.m_sMode.Get() ) );
+ }
+ else
+ {
+ wchar_t wszName[256];
+ g_pVGuiLocalize->ConvertANSIToUnicode( GetMapDisplayName( szTempName ), wszName, sizeof(wszName) );
+ g_pVGuiLocalize->ConstructString_safe( wszLocalizedSummary, g_pVGuiLocalize->Find( "#TF_PVE_MissionSummaryDefault" ), 1,
+ wszName );
+ }
+
+ SetDialogVariable( "summaryheader", wszLocalizedSummary );
+ }
+
+
+ // Tips
+ if ( m_pHintContainer )
+ {
+ int iClassUsed;
+ m_pHintContainer->SetDialogVariable( "hint1", g_TFTips.GetRandomMvMTip( iClassUsed ) );
+
+#ifdef STAGING_ONLY
+ bool bShowCaptainCanteen = tf_tips_show_captain_canteen.GetBool();
+
+ if ( tf_tips_show_captain_canteen.GetInt() > 1 )
+ {
+ // Force Captain Canteen on to test
+ iClassUsed = TF_LAST_NORMAL_CLASS;
+ }
+#else
+ bool bShowCaptainCanteen = false;
+#endif
+
+ if ( m_pHintImage1 )
+ {
+ SetHintImage( m_pHintImage1, iClassUsed, bShowCaptainCanteen );
+ }
+
+ // Make sure we only use captain canteen once
+ bool bUsedCaptainCanteen = ( iClassUsed == TF_LAST_NORMAL_CLASS );
+
+ m_pHintContainer->SetDialogVariable( "hint2", g_TFTips.GetRandomMvMTip( iClassUsed ) );
+
+ if ( m_pHintImage2 )
+ {
+ SetHintImage( m_pHintImage2, iClassUsed, bShowCaptainCanteen && !bUsedCaptainCanteen );
+ }
+
+ if ( !bUsedCaptainCanteen && iClassUsed != TF_LAST_NORMAL_CLASS )
+ {
+ // We didn't use captain canteen, hide him
+ if ( m_pCaptainCanteenBody )
+ {
+ m_pCaptainCanteenBody->SetVisible( false );
+ }
+ if ( m_pCaptainCanteenMisc )
+ {
+ m_pCaptainCanteenMisc->SetVisible( false );
+ }
+ if ( m_pCaptainCanteenHat )
+ {
+ m_pCaptainCanteenHat->SetVisible( false );
+ }
+ }
+ }
+
+ /*waveheader
+ summaryheader
+ creditscollected
+ creditsmissed
+ creditbonus
+
+ buybacks
+ bottles
+ activeupgrades
+ inactiveupgrades
+
+ hint1
+ hint2*/
+}
+
+void CMvMWaveLossPanel::SetCaptainCanteenImage( vgui::ImagePanel *panel, const char *pchImage, int nNewX )
+{
+ if ( !panel )
+ return;
+
+ int nX, nY;
+ panel->SetVisible( true );
+ panel->SetImage( pchImage );
+ panel->GetPos( nX, nY );
+ panel->SetPos( nNewX, nY );
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::SetHintImage( vgui::ImagePanel *panel, int iClassUsed, bool bAllowCaptainCanteen )
+{
+ if ( !panel )
+ return;
+
+ if ( bAllowCaptainCanteen && iClassUsed == TF_LAST_NORMAL_CLASS )
+ {
+ // Hide the normal tip image
+ panel->SetVisible( false );
+
+ // Get the asset images
+ const char *pchCaptainCanteenBody;
+ const char *pchCaptainCanteenMisc;
+ const char *pchCaptainCanteenHat;
+ g_TFTips.GetRandomCaptainCanteenImages( &pchCaptainCanteenBody, &pchCaptainCanteenMisc, &pchCaptainCanteenHat );
+
+ // Get the destination X position
+ int nX, nY;
+ panel->GetPos( nX, nY );
+
+ // Set up the canteen images
+ if ( m_pCaptainCanteenBody )
+ {
+ SetCaptainCanteenImage( m_pCaptainCanteenBody, pchCaptainCanteenBody, nX );
+ }
+ if ( m_pCaptainCanteenMisc )
+ {
+ SetCaptainCanteenImage( m_pCaptainCanteenMisc, pchCaptainCanteenMisc, nX );
+ }
+ if ( m_pCaptainCanteenHat )
+ {
+ SetCaptainCanteenImage( m_pCaptainCanteenHat, pchCaptainCanteenHat, nX );
+ }
+ }
+ else
+ {
+ panel->SetVisible( true );
+ panel->SetImage( g_pszInactiveClassPortraits[ iClassUsed ] );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CMvMWaveLossPanel::ClearContents()
+{
+ SetDialogVariable( "waveheader", "" );
+ SetDialogVariable( "summaryheader", "" );
+
+ if ( m_pCollectionContainer )
+ {
+ m_pCollectionContainer->SetDialogVariable( "creditscollected", "" );
+ m_pCollectionContainer->SetDialogVariable( "creditsmissed", "" );
+ m_pCollectionContainer->SetDialogVariable( "creditbonus", "" );
+ }
+
+ if ( m_pUsageContainer )
+ {
+ m_pUsageContainer->SetDialogVariable( "buybacksyou", "" );
+ m_pUsageContainer->SetDialogVariable( "bottlesyou", "" );
+ m_pUsageContainer->SetDialogVariable( "activeupgradesyou", "" );
+ m_pUsageContainer->SetDialogVariable( "inactiveupgradesyou", "" );
+
+ m_pUsageContainer->SetDialogVariable( "buybacksteam", "" );
+ m_pUsageContainer->SetDialogVariable( "bottlesteam", "" );
+ m_pUsageContainer->SetDialogVariable( "activeupgradesteam", "" );
+ m_pUsageContainer->SetDialogVariable( "inactiveupgradesteam", "" );
+ }
+
+ // Tips
+ if ( m_pHintContainer )
+ {
+ m_pHintContainer->SetDialogVariable( "hint1", "" );
+ m_pHintContainer->SetDialogVariable( "hint2", "" );
+ }
+} \ No newline at end of file