summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_pve_winpanel.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/tf_hud_pve_winpanel.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/tf_hud_pve_winpanel.cpp')
-rw-r--r--game/client/tf/tf_hud_pve_winpanel.cpp218
1 files changed, 218 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_pve_winpanel.cpp b/game/client/tf/tf_hud_pve_winpanel.cpp
new file mode 100644
index 0000000..a8ab8ef
--- /dev/null
+++ b/game/client/tf/tf_hud_pve_winpanel.cpp
@@ -0,0 +1,218 @@
+
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "tf_hud_pve_winpanel.h"
+#include "tf_hud_statpanel.h"
+#include "tf_spectatorgui.h"
+#include "vgui_controls/AnimationController.h"
+#include "iclientmode.h"
+#include "engine/IEngineSound.h"
+#include "c_tf_playerresource.h"
+#include "c_team.h"
+#include "tf_clientscoreboard.h"
+#include <vgui_controls/Label.h>
+#include <vgui_controls/ImagePanel.h>
+#include <vgui/ILocalize.h>
+#include <vgui/ISurface.h>
+#include "vgui_avatarimage.h"
+#include "fmtstr.h"
+#include "teamplayroundbased_gamerules.h"
+#include "tf_hud_mann_vs_machine_status.h"
+#include "tf_gamerules.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CTFPVEWinPanel::CTFPVEWinPanel( IViewPort *pViewPort ) : EditablePanel( NULL, "PVEWinPanel" )
+{
+ //SetAlpha( 0 );
+ SetScheme( "ClientScheme" );
+
+ ListenForGameEvent( "pve_win_panel" );
+ ListenForGameEvent( "teamplay_round_start" );
+ ListenForGameEvent( "teamplay_game_over" );
+ ListenForGameEvent( "tf_game_over" );
+
+ m_bShouldBeVisible = false;
+
+ m_pRespecContainerPanel = NULL;
+ m_pRespecBackground = NULL;
+ m_pRespecCountLabel = NULL;
+ m_pRespecTextLabel = NULL;
+
+ vgui::ivgui()->AddTickSignal( GetVPanel(), 50 );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CTFPVEWinPanel::ApplySettings( KeyValues *inResourceData )
+{
+ BaseClass::ApplySettings( inResourceData );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CTFPVEWinPanel::FireGameEvent( IGameEvent * event )
+{
+ const char *pEventName = event->GetName();
+
+ if ( Q_strcmp( "teamplay_round_start", pEventName ) == 0 ||
+ Q_strcmp( "teamplay_game_over", pEventName ) == 0 ||
+ Q_strcmp( "tf_game_over", pEventName ) == 0 ||
+ Q_strcmp( "training_complete", pEventName ) == 0 )
+ {
+ m_bShouldBeVisible = false;
+ }
+ else if ( Q_strcmp( "pve_win_panel", pEventName ) == 0 )
+ {
+ if ( !g_PR )
+ return;
+
+ int iWinningTeam = event->GetInt( "winning_team" );
+ int iWinReason = event->GetInt( "winreason" );
+
+ if ( iWinningTeam != TF_TEAM_PVE_INVADERS )
+ {
+ // Only show this when the robots win
+ return;
+ }
+
+ LoadControlSettings( "resource/UI/HudPVEWinPanel.res" );
+ InvalidateLayout( false, true );
+
+ SetDialogVariable( "WinningTeamLabel", "" );
+ SetDialogVariable( "WinReasonLabel", "" );
+ SetDialogVariable( "DetailsLabel", "" );
+
+ wchar_t *pwchWinReason = L"";
+ switch ( iWinReason )
+ {
+ case 0:
+ default:
+ pwchWinReason = g_pVGuiLocalize->Find( "#Winpanel_PVE_Bomb_Deployed" );
+ }
+
+ SetDialogVariable( "WinReasonLabel", pwchWinReason );
+
+ SetDialogVariable( "DetailsLabel", g_pVGuiLocalize->Find( "#TF_PVE_RestoreToCheckpointDetailed" ) );
+
+ m_bShouldBeVisible = true;
+
+ MoveToFront();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Applies scheme settings
+//-----------------------------------------------------------------------------
+void CTFPVEWinPanel::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ LoadControlSettings( "resource/UI/HudPVEWinPanel.res" );
+
+ m_pRespecBackground = dynamic_cast< vgui::ScalableImagePanel* >( FindChildByName( "RespecBackground" ) );
+ m_pRespecContainerPanel = dynamic_cast< vgui::EditablePanel* >( FindChildByName( "RespecContainer" ) );
+ if ( m_pRespecContainerPanel )
+ {
+ m_pRespecTextLabel = dynamic_cast< vgui::Label* >( m_pRespecContainerPanel->FindChildByName( "RespecTextLabelLoss" ) );
+ m_pRespecCountLabel = dynamic_cast< vgui::Label* >( m_pRespecContainerPanel->FindChildByName( "RespecCountLabel" ) );
+ }
+}
+
+void CTFPVEWinPanel::OnTick()
+{
+ if ( m_bShouldBeVisible == true )
+ {
+ IViewPortPanel *scoreboard = gViewPortInterface->FindPanelByName( PANEL_SCOREBOARD );
+ if ( (scoreboard && scoreboard->IsVisible() == true) || IsInFreezeCam() == true )
+ {
+ SetVisible( false );
+ return;
+ }
+
+ // We dont want the stats panel showing up at the same time
+ CTFStatPanel *pStatPanel = GetStatPanel();
+ if ( pStatPanel && pStatPanel->IsVisible() )
+ {
+ pStatPanel->Hide();
+ }
+
+ if ( TFGameRules() && TFGameRules()->State_Get() != GR_STATE_TEAM_WIN )
+ {
+ m_bShouldBeVisible = false;
+ }
+
+ // Respec
+ if ( m_pRespecContainerPanel && m_pRespecBackground && m_pRespecCountLabel && m_pRespecTextLabel )
+ {
+ CMannVsMachineStats *pStats = MannVsMachineStats_GetInstance();
+ if ( pStats )
+ {
+ uint16 nRespecs = pStats->GetNumRespecsEarnedInWave();
+
+ bool bRespecVisible = nRespecs > 0;
+
+ // Do this only once
+ if ( bRespecVisible && !m_pRespecBackground->IsVisible() )
+ {
+ g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( "RespecEarnedPulseLoss" );
+
+ C_TFPlayer *pLocalTFPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( pLocalTFPlayer )
+ {
+ pLocalTFPlayer->EmitSound( "MVM.RespecAwarded" );
+ }
+ }
+
+ if ( m_pRespecContainerPanel->IsVisible() != bRespecVisible )
+ {
+ m_pRespecContainerPanel->SetVisible( bRespecVisible );
+ }
+
+ if ( m_pRespecBackground->IsVisible() != bRespecVisible )
+ {
+ m_pRespecBackground->SetVisible( bRespecVisible );
+ }
+
+ if ( m_pRespecCountLabel->IsVisible() != bRespecVisible )
+ {
+ m_pRespecCountLabel->SetVisible( bRespecVisible );
+ }
+
+ if ( m_pRespecTextLabel->IsVisible() != bRespecVisible )
+ {
+ m_pRespecTextLabel->SetVisible( bRespecVisible );
+ }
+
+ if ( bRespecVisible )
+ {
+ m_pRespecContainerPanel->SetDialogVariable( "respeccount", nRespecs );
+ }
+ }
+ }
+ }
+
+ SetVisible( m_bShouldBeVisible );
+}
+
+void CTFPVEWinPanel::Reset( void )
+{
+ Update();
+ m_bShouldBeVisible = false;
+}
+
+void CTFPVEWinPanel::Update( void )
+{
+}