Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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 ) { }
|