mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-12 19:59:09 +00:00
1
This commit is contained in:
@@ -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", "" );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user