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
//========= 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(); |
|
} |