summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_disguise_status.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/tf/tf_hud_disguise_status.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/tf_hud_disguise_status.cpp')
-rw-r--r--game/client/tf/tf_hud_disguise_status.cpp364
1 files changed, 364 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_disguise_status.cpp b/game/client/tf/tf_hud_disguise_status.cpp
new file mode 100644
index 0000000..b5798da
--- /dev/null
+++ b/game/client/tf/tf_hud_disguise_status.cpp
@@ -0,0 +1,364 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: HUD Target ID element
+//
+// $NoKeywords: $
+//=============================================================================
+#include "cbase.h"
+#include "c_tf_player.h"
+#include "c_playerresource.h"
+#include "c_tf_playerresource.h"
+#include "tf_classdata.h"
+#include "hud.h"
+#include "hudelement.h"
+#include "iclientmode.h"
+#include "tf_imagepanel.h"
+#include "item_model_panel.h"
+#include "tf_hud_playerstatus.h"
+#include "tf_spectatorgui.h"
+#include "vgui/ILocalize.h"
+#include "vgui/ISurface.h"
+#include "vgui/IInput.h"
+#include <vgui/IVGui.h>
+#include <vgui/IScheme.h>
+#include <vgui_controls/Panel.h>
+#include <vgui_controls/Frame.h>
+#include "vgui_controls/TextImage.h"
+#include "vgui_controls/Label.h"
+#include "vgui_controls/Button.h"
+#include "ienginevgui.h"
+#include "hud_chat.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+using namespace vgui;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class CDisguiseStatus : public CHudElement, public EditablePanel
+{
+ DECLARE_CLASS_SIMPLE( CDisguiseStatus, EditablePanel );
+
+public:
+ CDisguiseStatus( const char *pElementName );
+
+ void Init( void );
+ virtual void ApplySchemeSettings( IScheme *scheme );
+ virtual void PerformLayout( void );
+ virtual void Paint( void );
+
+ void ShowAndUpdateStatus( void );
+ void HideStatus( void );
+ virtual bool ShouldDraw( void );
+
+ void CheckName( void );
+ void CheckWeapon( void );
+ void CheckHealth( void );
+
+private:
+ CPanelAnimationVar( HFont, m_hFont, "TextFont", "TargetID" );
+
+ CTFImagePanel *m_pBGPanel;
+ CEmbeddedItemModelPanel *m_pModelPanel;
+
+ CTFSpectatorGUIHealth *m_pDisguiseHealth;
+
+ Label *m_pDisguiseNameLabel;
+ Label *m_pWeaponNameLabel;
+
+ bool m_bDisguised;
+ CTFWeaponBase *m_pDisguiseWeapon;
+ int m_iDisguiseTeam;
+};
+
+DECLARE_HUDELEMENT( CDisguiseStatus );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CDisguiseStatus::CDisguiseStatus( const char *pElementName ) :
+ CHudElement( pElementName ), BaseClass( NULL, "DisguiseStatus" )
+{
+ Panel *pParent = g_pClientMode->GetViewport();
+ SetParent( pParent );
+
+ SetHiddenBits( HIDEHUD_MISCSTATUS );
+
+ m_pModelPanel = NULL;
+ m_pBGPanel = NULL;
+ m_pDisguiseNameLabel = NULL;
+ m_pWeaponNameLabel = NULL;
+
+ m_pDisguiseHealth = new CTFSpectatorGUIHealth( this, "SpectatorGUIHealth" );
+
+ m_bDisguised = true;
+ m_pDisguiseWeapon = NULL;
+ m_iDisguiseTeam = TEAM_UNASSIGNED;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Setup
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::Init( void )
+{
+ HideStatus();
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::ApplySchemeSettings( vgui::IScheme *scheme )
+{
+ BaseClass::ApplySchemeSettings( scheme );
+
+ LoadControlSettings( "Resource/UI/DisguiseStatusPanel.res" );
+ m_pModelPanel = dynamic_cast<CEmbeddedItemModelPanel*>( FindChildByName("itemmodelpanel") );
+ m_pBGPanel = dynamic_cast<CTFImagePanel *> ( FindChildByName("DisguiseStatusBG") );
+ m_pDisguiseNameLabel = dynamic_cast<Label *>(FindChildByName("DisguiseNameLabel"));
+ m_pWeaponNameLabel = dynamic_cast<Label *>(FindChildByName("WeaponNameLabel"));
+
+ SetPaintBackgroundEnabled( false );
+
+ HideStatus();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CDisguiseStatus::ShouldDraw( void )
+{
+ bool bShow = false;
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return false;
+
+ if ( !pPlayer->m_Shared.InCond( TF_COND_DISGUISED ) )
+ {
+ bShow = false;
+ }
+ else
+ {
+ bShow = true;
+ }
+
+ if ( bShow && (!m_bDisguised || (m_pDisguiseWeapon != pPlayer->m_Shared.GetDisguiseWeapon()) || (m_iDisguiseTeam != pPlayer->m_Shared.GetDisguiseTeam()) ) )
+ {
+ ShowAndUpdateStatus();
+ }
+ else if ( !bShow && m_bDisguised )
+ {
+ HideStatus();
+ }
+
+ return bShow;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::ShowAndUpdateStatus( void )
+{
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return;
+
+ m_iDisguiseTeam = pPlayer->m_Shared.GetDisguiseTeam();
+
+// m_pModelPanel->SetVisible( false );
+
+ if ( m_pBGPanel )
+ {
+ m_pBGPanel->SetVisible( true );
+ m_pBGPanel->SetBGTeam( m_iDisguiseTeam );
+ m_pBGPanel->UpdateBGImage();
+ }
+
+ if ( m_pDisguiseNameLabel )
+ {
+ m_pDisguiseNameLabel->SetVisible( true );
+
+ CheckName();
+ }
+
+ if ( m_pWeaponNameLabel )
+ {
+ m_pWeaponNameLabel->SetVisible( true );
+
+ CheckWeapon();
+ }
+
+ if ( m_pDisguiseHealth )
+ {
+ m_pDisguiseHealth->SetVisible( true );
+
+ CheckHealth();
+ }
+
+ m_bDisguised = true;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::HideStatus( void )
+{
+ if ( m_pModelPanel )
+ {
+ m_pModelPanel->SetVisible( false );
+ }
+
+ if ( m_pBGPanel )
+ {
+ m_pBGPanel->SetVisible( false );
+ }
+
+ if ( m_pDisguiseNameLabel )
+ {
+ m_pDisguiseNameLabel->SetVisible( false );
+ }
+
+ if ( m_pWeaponNameLabel )
+ {
+ m_pWeaponNameLabel->SetVisible( false );
+ }
+
+ if ( m_pDisguiseHealth )
+ {
+ m_pDisguiseHealth->SetVisible( false );
+ }
+
+ m_bDisguised = false;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::CheckName( void )
+{
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return;
+
+ int nIndex = pPlayer->m_Shared.GetDisguiseTargetIndex();
+ if ( nIndex != TF_DISGUISE_TARGET_INDEX_NONE )
+ {
+ if ( g_PR != NULL )
+ {
+ const char *pszName = g_PR->GetPlayerName( nIndex );
+ if ( pszName && pszName[0] )
+ {
+ SetDialogVariable( "disguisename", pszName );
+ return;
+ }
+ }
+ }
+
+ SetDialogVariable( "disguisename", pPlayer->GetPlayerName() );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::CheckWeapon( void )
+{
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return;
+
+ m_pDisguiseWeapon = pPlayer->m_Shared.GetDisguiseWeapon();
+ if ( m_pDisguiseWeapon )
+ {
+ const wchar_t *pszDisguiseWeapon = g_pVGuiLocalize->Find( m_pDisguiseWeapon->GetTFWpnData().szPrintName );
+
+ CAttributeContainer *pContainer = m_pDisguiseWeapon->GetAttributeContainer();
+ if ( pContainer )
+ {
+ CEconItemView *pItem = pContainer->GetItem();
+ if ( pItem )
+ {
+ pszDisguiseWeapon = pItem->GetItemName();
+ }
+ }
+
+ SetDialogVariable( "weaponname", pszDisguiseWeapon );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::CheckHealth( void )
+{
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return;
+
+ if ( !m_pDisguiseHealth )
+ return;
+
+ m_pDisguiseHealth->SetHealth( pPlayer->m_Shared.GetDisguiseHealth(), pPlayer->m_Shared.GetDisguiseMaxHealth(), pPlayer->m_Shared.GetDisguiseMaxBuffedHealth() );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::PerformLayout( void )
+{
+ /*
+ int iXIndent = XRES(5);
+ int iXPostdent = XRES(10);
+ int iWidth = m_pTargetHealth->GetWide() + iXIndent + iXPostdent;
+
+ int iTextW, iTextH;
+ int iDataW, iDataH;
+
+ if ( m_pTargetNameLabel && m_pTargetDataLabel )
+ {
+ m_pTargetNameLabel->GetContentSize( iTextW, iTextH );
+ m_pTargetDataLabel->GetContentSize( iDataW, iDataH );
+ iWidth += max(iTextW,iDataW);
+
+ SetSize( iWidth, GetTall() );
+
+ int nOffset = m_bArenaPanelVisible ? YRES (120) : 0; // HACK: move the targetID up a bit so it won't overlap the panel
+
+ SetPos( (ScreenWidth() - iWidth) * 0.5, m_nOriginalY - nOffset );
+
+ if ( m_pBGPanel )
+ {
+ m_pBGPanel->SetSize( iWidth, GetTall() );
+ }
+ }
+ */
+
+ BaseClass::PerformLayout();
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Draw function for the element
+//-----------------------------------------------------------------------------
+void CDisguiseStatus::Paint()
+{
+ C_TFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return;
+
+ if ( !pPlayer->m_Shared.InCond( TF_COND_DISGUISED ) )
+ return;
+
+// ConVarRef cl_hud_minmode( "cl_hud_minmode", true );
+// if ( cl_hud_minmode.IsValid() && cl_hud_minmode.GetBool() )
+// {
+// HideStatus();
+// return;
+// }
+
+ CheckName();
+
+ CheckWeapon();
+
+ CheckHealth();
+} \ No newline at end of file