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.
152 lines
4.3 KiB
152 lines
4.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "hudelement.h" |
|
#include <vgui_controls/Panel.h> |
|
#include <vgui_controls/EditablePanel.h> |
|
#include <vgui_controls/ImagePanel.h> |
|
#include <vgui/ISurface.h> |
|
#include "c_dod_player.h" |
|
#include "clientmode_dod.h" |
|
#include "dod_hud_tnt_pickup.h" |
|
#include <vgui/ILocalize.h> |
|
|
|
DECLARE_HUDELEMENT( CDODHudTNTPickupPanel ); |
|
|
|
ConVar hud_c4pickuppanel( "hud_c4pickuppanel", "1", FCVAR_CLIENTDLL | FCVAR_ARCHIVE, "Set to 0 to not draw the HUD c4 pickup panel" ); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Constructor |
|
//----------------------------------------------------------------------------- |
|
CDODHudTNTPickupPanel::CDODHudTNTPickupPanel( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudTNTPickupPanel" ) |
|
{ |
|
SetParent( g_pClientMode->GetViewport() ); |
|
|
|
m_pBackground = new vgui::Panel( this, "CapturePanelBackground" ); |
|
m_pTNTImage = new CIconPanel( this, "TNTImage" ); |
|
|
|
m_pPickupLabel = new vgui::Label( this, "pickupLabel", "..." ); |
|
|
|
// load control settings... |
|
LoadControlSettings( "resource/UI/HudTNTPickupPanel.res" ); |
|
|
|
SetVisible( false ); |
|
m_flShowUntilTime = 0; |
|
|
|
m_bInitLayout = true; |
|
|
|
RegisterForRenderGroup( "winpanel" ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDODHudTNTPickupPanel::Init() |
|
{ |
|
// listen for client side events |
|
ListenForGameEvent( "dod_tnt_pickup" ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDODHudTNTPickupPanel::VidInit() |
|
{ |
|
// listen for client side events |
|
m_flShowUntilTime = 0; |
|
|
|
m_bInitLayout = true; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDODHudTNTPickupPanel::OnScreenSizeChanged( int iOldWide, int iOldTall ) |
|
{ |
|
LoadControlSettings( "resource/UI/HudTNTPickupPanel.res" ); |
|
|
|
m_bInitLayout = true; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDODHudTNTPickupPanel::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
LoadControlSettings( "resource/UI/HudTNTPickupPanel.res" ); |
|
m_bInitLayout = true; |
|
|
|
if ( m_pBackground ) |
|
{ |
|
m_pBackground->SetBgColor( GetSchemeColor( "HintMessageBg", pScheme ) ); |
|
m_pBackground->SetPaintBackgroundType( 2 ); |
|
} |
|
} |
|
|
|
void CDODHudTNTPickupPanel::FireGameEvent( IGameEvent *event ) |
|
{ |
|
const char *pszEventName = event->GetName(); |
|
|
|
C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer(); |
|
|
|
if ( !Q_strcmp( pszEventName, "dod_tnt_pickup" ) && pPlayer && pPlayer->ShouldShowHints() ) |
|
{ |
|
if ( hud_c4pickuppanel.GetBool() ) |
|
{ |
|
// fire the show animation |
|
SetVisible( true ); |
|
m_flShowUntilTime = gpGlobals->curtime + 3.5; |
|
|
|
m_pTNTImage->SetVisible( true ); |
|
} |
|
} |
|
} |
|
|
|
void CDODHudTNTPickupPanel::OnThink( void ) |
|
{ |
|
BaseClass::OnThink(); |
|
|
|
// if only vgui had relative layouts for elements.. |
|
if ( m_bInitLayout ) |
|
{ |
|
// localize text if we need |
|
m_pPickupLabel->SetText( g_pVGuiLocalize->Find( "dod_tnt_pickup_help" ) ); |
|
|
|
// size label to contents |
|
m_pPickupLabel->SizeToContents(); |
|
|
|
int labelX, labelY, labelW, labelH; |
|
m_pPickupLabel->GetBounds( labelX, labelY, labelW, labelH ); |
|
|
|
int imageX, imageY, imageH, imageW; |
|
m_pTNTImage->GetBounds( imageX, imageY, imageH, imageW ); |
|
|
|
// total width is: |
|
// margin + image width + margin + text + margin |
|
int newWidth = 3 * XRES(10) + imageW + labelW; |
|
|
|
int bgX, bgY, bgW, bgH; |
|
m_pBackground->GetBounds( bgX, bgY, bgW, bgH ); |
|
|
|
int newX = XRES(320) - newWidth/2; |
|
|
|
m_pBackground->SetBounds( newX, bgY, newWidth, bgH ); |
|
|
|
m_pTNTImage->SetPos( newX + XRES(10), imageY ); |
|
|
|
m_pPickupLabel->SetPos( newX + 2 * XRES(10) + imageW, bgY + ( bgH - labelY) / 2 ); |
|
|
|
m_bInitLayout = false; |
|
} |
|
|
|
if ( IsVisible() && gpGlobals->curtime > m_flShowUntilTime ) |
|
{ |
|
SetVisible( false ); |
|
} |
|
} |