Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

197 lines
5.0 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================
#include "cbase.h"
#include "hud.h"
#include "hudelement.h"
#include "c_tf_player.h"
#include "iclientmode.h"
#include "ienginevgui.h"
#include <vgui/ILocalize.h>
#include <vgui/ISurface.h>
#include <vgui/IVGui.h>
#include <vgui_controls/Label.h>
#include <vgui_controls/EditablePanel.h>
#include "tf_imagepanel.h"
#include "tf_gamerules.h"
#include "c_tf_team.h"
#include "tf_hud_freezepanel.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
using namespace vgui;
extern ConVar tf_arena_preround_time;
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CHudArenaCapPointCountdown : public CHudElement, public EditablePanel
{
DECLARE_CLASS_SIMPLE( CHudArenaCapPointCountdown, EditablePanel );
public:
CHudArenaCapPointCountdown( const char *pElementName );
virtual void ApplySchemeSettings( IScheme *scheme );
virtual void OnTick( void );
virtual bool ShouldDraw( void );
virtual bool IsVisible( void );
private:
bool m_bFire5SecRemain;
bool m_bFire4SecRemain;
bool m_bFire3SecRemain;
bool m_bFire2SecRemain;
bool m_bFire1SecRemain;
bool m_bFire0SecRemain;
};
DECLARE_HUDELEMENT( CHudArenaCapPointCountdown );
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CHudArenaCapPointCountdown::CHudArenaCapPointCountdown( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudArenaCapPointCountdown" )
{
Panel *pParent = g_pClientMode->GetViewport();
SetParent( pParent );
SetHiddenBits( HIDEHUD_MISCSTATUS );
vgui::ivgui()->AddTickSignal( GetVPanel() );
SetVisible( true );
m_bFire5SecRemain = true;
m_bFire4SecRemain = true;
m_bFire3SecRemain = true;
m_bFire2SecRemain = true;
m_bFire1SecRemain = true;
m_bFire0SecRemain = true;
RegisterForRenderGroup( "mid" );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CHudArenaCapPointCountdown::ApplySchemeSettings( IScheme *pScheme )
{
// load control settings...
LoadControlSettings( "resource/UI/HudArenaCapPointCountdown.res" );
BaseClass::ApplySchemeSettings( pScheme );
SetVisible( true );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CHudArenaCapPointCountdown::IsVisible( void )
{
if ( IsInFreezeCam() == true )
return false;
if ( ShouldDraw() == false )
return false;
return BaseClass::IsVisible();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CHudArenaCapPointCountdown::OnTick( void )
{
BaseClass::OnTick();
if ( TFGameRules() == NULL || ( TFGameRules() && TFGameRules()->IsInArenaMode() == false ) )
{
SetVisible( false );
return;
}
if ( TFGameRules()->State_Get() != GR_STATE_STALEMATE || ShouldDraw() == false )
{
SetVisible( false );
return;
}
C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
if ( !pLocalPlayer )
{
SetVisible( false );
return;
}
int iTimeLeft = ceil( TFGameRules()->GetCapturePointTime() - gpGlobals->curtime );
if ( iTimeLeft > 5 || iTimeLeft <= 0 )
{
if ( iTimeLeft <= 0 && m_bFire0SecRemain )
{
m_bFire0SecRemain = false;
pLocalPlayer->EmitSound( "Announcer.AM_CapEnabledRandom" );
}
m_bFire5SecRemain = true;
m_bFire4SecRemain = true;
m_bFire3SecRemain = true;
m_bFire2SecRemain = true;
m_bFire1SecRemain = true;
SetVisible( false );
return;
}
SetVisible( true );
wchar_t wzTimeLeft[128];
_snwprintf( wzTimeLeft, ARRAYSIZE( wzTimeLeft ), L"%i", iTimeLeft );
SetDialogVariable( "capturetime", wzTimeLeft );
if ( iTimeLeft <= 5 && m_bFire5SecRemain )
{
m_bFire5SecRemain = false;
pLocalPlayer->EmitSound( "Announcer.RoundBegins5Seconds" );
}
else if ( iTimeLeft <= 4 && m_bFire4SecRemain )
{
m_bFire4SecRemain = false;
pLocalPlayer->EmitSound( "Announcer.RoundBegins4Seconds" );
}
else if ( iTimeLeft <= 3 && m_bFire3SecRemain )
{
m_bFire3SecRemain = false;
pLocalPlayer->EmitSound( "Announcer.RoundBegins3Seconds" );
}
else if ( iTimeLeft <= 2 && m_bFire2SecRemain )
{
m_bFire2SecRemain = false;
pLocalPlayer->EmitSound( "Announcer.RoundBegins2Seconds" );
}
else if ( iTimeLeft <= 1 && m_bFire1SecRemain )
{
m_bFire1SecRemain = false;
m_bFire0SecRemain = true;
pLocalPlayer->EmitSound( "Announcer.RoundBegins1Seconds" );
}
}
bool CHudArenaCapPointCountdown::ShouldDraw( void )
{
return CHudElement::ShouldDraw();
}