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.
364 lines
9.1 KiB
364 lines
9.1 KiB
![]()
4 years ago
|
//========= 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();
|
||
|
}
|