source-engine/game/client/dod/dod_hud_playerstatuspanel.cpp
2022-04-16 12:05:19 +03:00

185 lines
4.7 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#include "cbase.h"
#include "hudelement.h"
#include <vgui_controls/EditablePanel.h>
#include <vgui_controls/ImagePanel.h>
#include <vgui/ISurface.h>
#include "c_dod_player.h"
#include "clientmode_dod.h"
#include "dodcornercutpanel.h"
#include "c_dod_objective_resource.h"
#include "c_dod_playerresource.h"
#include "dod_hud_playerstatus_ammo.h"
#include "dod_hud_playerstatus_health.h"
#include "dod_hud_playerstatus_weapon.h"
#include "dod_hud_playerstatus_stamina.h"
#include "dod_hud_playerstatus_mgheat.h"
#include "dod_hud_playerstatus_fireselect.h"
#include "dod_hud_playerstatus_tnt.h"
class CDoDHudPlayerStatusPanel : public CHudElement, public vgui::EditablePanel
{
public:
DECLARE_CLASS_SIMPLE( CDoDHudPlayerStatusPanel, vgui::EditablePanel );
CDoDHudPlayerStatusPanel( const char *pElementName );
virtual void Init();
virtual void OnThink();
virtual void PerformLayout();
virtual void ApplySchemeSettings( IScheme *pScheme );
private:
CDoDCutEditablePanel *m_pMainBar;
ImagePanel *m_pAlliesIcon;
ImagePanel *m_pAxisIcon;
CDoDHudAmmo *m_pAmmoStatus;
CDoDHudHealth *m_pHealthStatus;
CDoDHudCurrentWeapon *m_pCurrentWeapon;
CDoDHudStamina *m_pStamina;
CDoDHudMGHeat *m_pMGHeat;
CDoDHudFireSelect *m_pFireSelect;
CDoDHudTNT *m_pTNT;
};
DECLARE_HUDELEMENT( CDoDHudPlayerStatusPanel );
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CDoDHudPlayerStatusPanel::CDoDHudPlayerStatusPanel( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudPlayerStatusPanel" )
{
SetParent( g_pClientMode->GetViewport() );
m_pMainBar = new CDoDCutEditablePanel( this, "PlayerStatusMainBackground" );
m_pAlliesIcon = new ImagePanel( this, "PlayerStatusAlliesIcon" );
m_pAxisIcon = new ImagePanel( this, "PlayerStatusAxisIcon" );
m_pAmmoStatus = new CDoDHudAmmo( this, "PlayerStatusAmmo" );
m_pCurrentWeapon = new CDoDHudCurrentWeapon( this, "PlayerStatusCurrentWeapon" );
m_pHealthStatus = new CDoDHudHealth( this, "PlayerStatusHealth" );
m_pStamina = new CDoDHudStamina( this, "PlayerStatusStamina" );
m_pMGHeat = new CDoDHudMGHeat( this, "PlayerStatusMGHeat" );
m_pFireSelect = new CDoDHudFireSelect( this, "PlayerStatusFireSelect" );
m_pTNT = new CDoDHudTNT( this, "PlayerStatusTNT" );
}
void CDoDHudPlayerStatusPanel::ApplySchemeSettings( IScheme *pScheme )
{
// load control settings...
LoadControlSettings( "resource/UI/HudPlayerStatusPanel.res" );
BaseClass::ApplySchemeSettings( pScheme );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CDoDHudPlayerStatusPanel::Init()
{
if ( m_pMainBar )
{
m_pMainBar->SetVisible( true );
}
if ( m_pStamina )
{
m_pStamina->SetVisible( true );
}
if ( m_pAlliesIcon )
{
m_pAlliesIcon->SetVisible( false );
}
if ( m_pAxisIcon )
{
m_pAxisIcon->SetVisible( false );
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CDoDHudPlayerStatusPanel::PerformLayout()
{
BaseClass::PerformLayout();
int x, y, w, t;
GetBounds( x, y, w, t );
if ( w != ScreenWidth() )
{
// doing this because of the 16:9 and 16:10 resolutions (VGUI doesn't scale properly for them)
SetBounds( x, y, ScreenWidth(), t );
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CDoDHudPlayerStatusPanel::OnThink()
{
BaseClass::OnThink();
C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer();
if ( pPlayer )
{
// turn off the panel and children if the player is dead
if ( !pPlayer->IsAlive() )
{
if ( IsVisible() )
{
SetVisible( false );
}
return;
}
else
{
if ( !IsVisible() )
{
SetVisible( true );
}
}
// set our team icon
int nTeam = pPlayer->GetTeamNumber();
switch( nTeam )
{
case TEAM_AXIS:
if ( m_pAlliesIcon && m_pAlliesIcon->IsVisible() )
{
m_pAlliesIcon->SetVisible( false );
}
if ( m_pAxisIcon && !m_pAxisIcon->IsVisible() )
{
m_pAxisIcon->SetVisible( true );
}
break;
case TEAM_ALLIES:
default:
if ( m_pAlliesIcon && !m_pAlliesIcon->IsVisible() )
{
m_pAlliesIcon->SetVisible( true );
}
if ( m_pAxisIcon && m_pAxisIcon->IsVisible() )
{
m_pAxisIcon->SetVisible( false );
}
break;
}
}
}