summaryrefslogtreecommitdiff
path: root/game/client/tf2/hud_orders.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/tf2/hud_orders.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf2/hud_orders.cpp')
-rw-r--r--game/client/tf2/hud_orders.cpp278
1 files changed, 278 insertions, 0 deletions
diff --git a/game/client/tf2/hud_orders.cpp b/game/client/tf2/hud_orders.cpp
new file mode 100644
index 0000000..30f2ec3
--- /dev/null
+++ b/game/client/tf2/hud_orders.cpp
@@ -0,0 +1,278 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Order window
+//
+// $NoKeywords: $
+//=============================================================================//
+#include "cbase.h"
+#include "hud_orders.h"
+#include "hud.h"
+#include "c_basetfplayer.h"
+#include "clientmode_tfnormal.h"
+#include "VGUI_BasePanel.h"
+#include <vgui/IScheme.h>
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudLabel::SetSelected( bool bSelected )
+{
+ m_bSelected = bSelected;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CHudOrderList *GetHudOrderList( void )
+{
+ return GET_HUDELEMENT( CHudOrderList );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CHudOrder::CHudOrder( int x,int y,int wide,int tall ) : vgui::Panel( NULL, "CHudOrder")
+{
+ SetBounds( x, y, wide, tall );
+ SetAutoDelete( false );
+ m_pOrder = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CHudOrder::~CHudOrder( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrder::Init( void )
+{
+ SetSize( ORDERS_ELEMENT_WIDTH, ORDERS_ELEMENT_HEIGHT );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Called every frame
+//-----------------------------------------------------------------------------
+void CHudOrder::Paint( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrder::SetOrder( C_Order *pOrder )
+{
+ // If we had an order, tell it to clean up
+ if ( m_pOrder )
+ {
+ m_pOrder->DestroyStatus();
+ }
+
+ m_pOrder = pOrder;
+
+ // Tell the order to create it's elements
+ if ( m_pOrder )
+ {
+ m_pOrder->CreateStatus( this );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+C_Order *CHudOrder::GetOrder( void )
+{
+ return m_pOrder;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrder::UpdateOrder( void )
+{
+ if ( m_pOrder == NULL )
+ return;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Our order has been deleted.
+//-----------------------------------------------------------------------------
+void CHudOrder::OrderRemoved( void )
+{
+ m_pOrder = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrder::ApplySchemeSettings(vgui::IScheme *pScheme)
+{
+ Panel::ApplySchemeSettings(pScheme);
+
+ if ( m_pOrder && m_pOrder->IsPersonalOrder() )
+ {
+ SetBgColor( GetSchemeColor("HudStatusSelectedBgColor", pScheme) );
+ }
+ else
+ {
+ SetBgColor( GetSchemeColor("HudStatusBgColor", pScheme) );
+ }
+}
+
+//================================================================================================================
+// LARGE STATUS PANEL.
+//================================================================================================================
+// Purpose:
+//-----------------------------------------------------------------------------
+CHudOrderList::CHudOrderList( const char *pElementName ) :
+ CHudElement( pElementName ), vgui::Panel( NULL, "HudOrderList" )
+{
+ vgui::Panel *pParent = g_pClientMode->GetViewport();
+ SetParent( pParent );
+
+ SetPaintBackgroundEnabled( false );
+ for (int i = 0; i < MAX_HUD_ORDERS; i++)
+ {
+ m_pOrderPanels[i] = NULL;
+ m_pOrderLabels[i] = NULL;
+ }
+
+ SetHiddenBits( HIDEHUD_MISCSTATUS | HIDEHUD_PLAYERDEAD );
+}
+
+DECLARE_HUDELEMENT( CHudOrderList );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CHudOrderList::~CHudOrderList( void )
+{
+ for (int i = 0; i < MAX_HUD_ORDERS; i++)
+ {
+ if ( m_pOrderPanels[i] )
+ {
+ delete m_pOrderPanels[i];
+ delete m_pOrderLabels[i];
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrderList::LevelInit( void )
+{
+ SetPos( ORDERS_LEFT, ORDERS_TOP );
+ SetSize( ORDERS_WIDTH, ORDERS_HEIGHT );
+
+ for ( int i = 0; i < MAX_HUD_ORDERS; i++ )
+ {
+ m_pOrderPanels[i] = new CHudOrder( ORDERS_ELEMENT_LEFT - ORDERS_LEFT, ORDERS_ELEMENT_HEIGHT * i, ORDERS_ELEMENT_WIDTH, ORDERS_ELEMENT_HEIGHT );
+ m_pOrderPanels[i]->Init();
+
+ m_pOrderLabels[i] = new CHudLabel( NULL, "orderlabels", " " );
+ m_pOrderLabels[i]->SetBounds( 0, ORDERS_ELEMENT_HEIGHT * i, ORDERS_ELEMENT_LEFT - ORDERS_LEFT, ORDERS_ELEMENT_HEIGHT );
+ m_pOrderLabels[i]->SetContentAlignment( vgui::Label::a_northwest );
+ m_pOrderLabels[i]->SetTextInset( 4, 0 );
+
+ // Start all of them hidden
+ m_pOrderPanels[i]->SetParent( (vgui::Panel *)NULL );
+ m_pOrderLabels[i]->SetParent( (vgui::Panel *)NULL );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrderList::LevelShutdown( void )
+{
+ for ( int i = 0; i < MAX_HUD_ORDERS; i++ )
+ {
+ delete m_pOrderPanels[i];
+ m_pOrderPanels[i] = NULL;
+ delete m_pOrderLabels[i];
+ m_pOrderLabels[i] = NULL;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrderList::OnThink( void )
+{
+ // Call update for all active objects
+ for (int i = 0; i < MAX_HUD_ORDERS; i++)
+ {
+ if ( m_pOrderPanels[i] && m_pOrderPanels[i]->GetOrder() )
+ {
+ m_pOrderPanels[i]->UpdateOrder();
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudOrderList::Paint( void )
+{
+// vgui::surface()->DrawSetColor( 255,0,0, 64 );
+// vgui::surface()->DrawOutlinedRect( 0,0, GetWide(), GetTall() );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Insert the specified order into the slot
+//-----------------------------------------------------------------------------
+void CHudOrderList::InsertOrder( C_Order *pOrder, int iSlot )
+{
+ // Personal Orders don't have selection keys
+ if ( pOrder->IsPersonalOrder() )
+ {
+ m_pOrderLabels[iSlot]->SetText("");
+ }
+ else
+ {
+ // Check the key binding
+ char binding[64];
+ Q_snprintf(binding, sizeof( binding ), "order %d", iSlot+1);
+ const char *pBinding = engine->Key_LookupBinding( binding );
+ if ( pBinding && strcmp(pBinding,"") )
+ {
+ m_pOrderLabels[iSlot]->SetText( pBinding );
+ }
+ }
+
+ // Only insert it if it's not there already
+ if ( m_pOrderPanels[iSlot]->GetOrder() != pOrder )
+ {
+ m_pOrderPanels[iSlot]->SetOrder( pOrder );
+ m_pOrderPanels[iSlot]->SetParent( this );
+ m_pOrderLabels[iSlot]->SetParent( this );
+ m_pOrderLabels[iSlot]->SetSelected( pOrder->IsPersonalOrder() );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: We've received a new order, or a modified old one. Figure out what to do.
+//-----------------------------------------------------------------------------
+void CHudOrderList::RecalculateOrderList( void )
+{
+ C_BaseTFPlayer *pPlayer = C_BaseTFPlayer::GetLocalPlayer();
+
+ // Does this player have a personal order?
+ C_Order *pOrder = pPlayer->PersonalOrder();
+ if( pOrder )
+ {
+ // Highlight the selected order (and the personal order always)
+ m_pOrderPanels[0]->SetBgColor( Color( 0,0,0, 192) );
+ m_pOrderLabels[0]->SetBgColor( Color( 0,0,0, 192) );
+ }
+}
+