mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-10 02:39:35 +00:00
1
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
//========= 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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user