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.
196 lines
5.2 KiB
196 lines
5.2 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include "hud.h"
|
||
|
#include "hudelement.h"
|
||
|
#include <vgui_controls/Panel.h>
|
||
|
#include "c_basetfplayer.h"
|
||
|
#include "tf_shareddefs.h"
|
||
|
#include "iclientmode.h"
|
||
|
#include "clientmode_tfnormal.h"
|
||
|
#include "materialsystem/imaterial.h"
|
||
|
#include "materialsystem/imesh.h"
|
||
|
#include "materialsystem/imaterialvar.h"
|
||
|
#include <vgui_controls/Controls.h>
|
||
|
#include <vgui/ISurface.h>
|
||
|
#include "clienteffectprecachesystem.h"
|
||
|
|
||
|
// EMP level positions
|
||
|
#define HUDEMP_LEFT ((ScreenWidth() / 2)- XRES(40))
|
||
|
#define HUDEMP_WIDTH XRES(16)
|
||
|
#define HUDEMP_TOP YRES(210)
|
||
|
#define HUDEMP_HEIGHT YRES(16)
|
||
|
|
||
|
// Changes per second
|
||
|
#define HUDEMP_FRAMERATE 30.0f
|
||
|
|
||
|
CLIENTEFFECT_REGISTER_BEGIN( PrecacheHudDamage )
|
||
|
CLIENTEFFECT_MATERIAL( "Hud/emp/emp_damage" )
|
||
|
CLIENTEFFECT_REGISTER_END()
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool GetEMPDamage()
|
||
|
{
|
||
|
C_BaseTFPlayer *pPlayer;
|
||
|
pPlayer = C_BaseTFPlayer::GetLocalPlayer();
|
||
|
if ( !pPlayer )
|
||
|
return false;
|
||
|
|
||
|
return pPlayer->HasPowerup(POWERUP_EMP) ? true : false;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Icon showing EMP damage is occuring
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CHudEMP : public CHudElement, public vgui::Panel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CHudEMP, vgui::Panel );
|
||
|
|
||
|
public:
|
||
|
DECLARE_MULTIPLY_INHERITED();
|
||
|
|
||
|
CHudEMP( const char *pElementName );
|
||
|
~CHudEMP();
|
||
|
|
||
|
// vgui::Panel overrides.
|
||
|
virtual void Paint( void );
|
||
|
|
||
|
// CHudElement overrides.
|
||
|
virtual bool ShouldDraw( void );
|
||
|
virtual void Init( void );
|
||
|
|
||
|
protected:
|
||
|
IMaterial *m_pEMPIcon;
|
||
|
IMaterialVar *m_pFrameVar;
|
||
|
|
||
|
float m_flNextFrameChange;
|
||
|
int m_nNumFrames;
|
||
|
};
|
||
|
|
||
|
//DECLARE_HUDELEMENT( CHudEMP, CHudEMP );
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CHudEMP::CHudEMP( const char *pElementName ) :
|
||
|
CHudElement( pElementName ), vgui::Panel( NULL, pElementName )
|
||
|
{
|
||
|
m_pEMPIcon = NULL;
|
||
|
m_pFrameVar = NULL;
|
||
|
m_flNextFrameChange = 0.0f;
|
||
|
m_nNumFrames = 1;
|
||
|
//SetPaintBackgroundEnabled( false );
|
||
|
SetAutoDelete( false );
|
||
|
SetName( "emp" );
|
||
|
|
||
|
SetHiddenBits( HIDEHUD_HEALTH );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CHudEMP::~CHudEMP( void )
|
||
|
{
|
||
|
if ( m_pEMPIcon )
|
||
|
{
|
||
|
m_pEMPIcon->DecrementReferenceCount();
|
||
|
m_pEMPIcon = NULL;
|
||
|
}
|
||
|
SetParent( (vgui::Panel *)NULL );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Attach the jetpack bar to the main panel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CHudEMP::Init( void )
|
||
|
{
|
||
|
if ( !m_pEMPIcon )
|
||
|
{
|
||
|
m_pEMPIcon = materials->FindMaterial( "Hud/emp/emp_damage", TEXTURE_GROUP_VGUI );
|
||
|
assert( m_pEMPIcon );
|
||
|
m_pEMPIcon->IncrementReferenceCount();
|
||
|
|
||
|
m_pFrameVar = m_pEMPIcon->FindVar( "$frame", NULL, false );
|
||
|
m_nNumFrames = m_pEMPIcon->GetNumAnimationFrames();
|
||
|
}
|
||
|
|
||
|
SetPos( HUDEMP_LEFT, HUDEMP_TOP );
|
||
|
SetSize( HUDEMP_WIDTH, HUDEMP_HEIGHT );
|
||
|
|
||
|
vgui::Panel *pParent = GetClientModeNormal()->GetViewport();
|
||
|
SetParent(pParent);
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CHudEMP::ShouldDraw( void )
|
||
|
{
|
||
|
return ( CHudElement::ShouldDraw() && GetEMPDamage() );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Draw the jetpack level
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CHudEMP::Paint()
|
||
|
{
|
||
|
// Rush label
|
||
|
int iX, iY;
|
||
|
GetPos( iX, iY );
|
||
|
int iWidth = XRES(16);
|
||
|
int iHeight = YRES(16);
|
||
|
|
||
|
if ( m_pFrameVar )
|
||
|
{
|
||
|
float curtime = gpGlobals->curtime;
|
||
|
|
||
|
if ( curtime >= m_flNextFrameChange )
|
||
|
{
|
||
|
m_flNextFrameChange = curtime + ( 1.0f / HUDEMP_FRAMERATE );
|
||
|
|
||
|
int frame = m_pFrameVar->GetIntValue();
|
||
|
frame++;
|
||
|
if ( frame >= m_nNumFrames )
|
||
|
{
|
||
|
frame = 0;
|
||
|
}
|
||
|
m_pFrameVar->SetIntValue(frame);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
IMesh* pMesh = materials->GetDynamicMesh( true, NULL, NULL, m_pEMPIcon );
|
||
|
|
||
|
CMeshBuilder meshBuilder;
|
||
|
meshBuilder.Begin( pMesh, MATERIAL_QUADS, 1 );
|
||
|
|
||
|
meshBuilder.Color3f( 1.0, 1.0, 1.0 );
|
||
|
meshBuilder.TexCoord2f( 0,0,0 );
|
||
|
meshBuilder.Position3f( iX,iY,0 );
|
||
|
meshBuilder.AdvanceVertex();
|
||
|
|
||
|
meshBuilder.Color3f( 1.0, 1.0, 1.0 );
|
||
|
meshBuilder.TexCoord2f( 0,1,0 );
|
||
|
meshBuilder.Position3f( iX+iWidth, iY, 0 );
|
||
|
meshBuilder.AdvanceVertex();
|
||
|
|
||
|
meshBuilder.Color3f( 1.0, 1.0, 1.0 );
|
||
|
meshBuilder.TexCoord2f( 0,1,1 );
|
||
|
meshBuilder.Position3f( iX+iWidth, iY+iHeight, 0 );
|
||
|
meshBuilder.AdvanceVertex();
|
||
|
|
||
|
meshBuilder.Color3f( 1.0, 1.0, 1.0 );
|
||
|
meshBuilder.TexCoord2f( 0,0,1 );
|
||
|
meshBuilder.Position3f( iX, iY+iHeight, 0 );
|
||
|
meshBuilder.AdvanceVertex();
|
||
|
|
||
|
meshBuilder.End();
|
||
|
pMesh->Draw();
|
||
|
}
|
||
|
|