diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf2/hud_orders.cpp | |
| download | archived-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.cpp | 278 |
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) ); + } +} + |