summaryrefslogtreecommitdiff
path: root/game/client/dod/dod_hud_tnt_pickup.cpp
blob: 6e728112fb6e03e473dfccc93e9c99a4081b3f10 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//========= 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 );
	}
}