mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 22:56:50 +00:00
141 lines
3.4 KiB
C++
141 lines
3.4 KiB
C++
#include "cbase.h"
|
|
#ifdef CLIENT_DLL
|
|
#define CBaseAnimating C_BaseAnimating
|
|
#define CASW_Target_Dummy C_ASW_Target_Dummy
|
|
#include "asw_hud_3dmarinenames.h"
|
|
#else
|
|
|
|
#endif
|
|
#include "asw_target_dummy_shared.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
IMPLEMENT_NETWORKCLASS_ALIASED( ASW_Target_Dummy, DT_ASW_Target_Dummy )
|
|
|
|
BEGIN_NETWORK_TABLE( CASW_Target_Dummy, DT_ASW_Target_Dummy )
|
|
#ifdef CLIENT_DLL
|
|
RecvPropFloat( RECVINFO( m_flDamageTaken ) ),
|
|
RecvPropFloat( RECVINFO( m_flStartDamageTime ) ),
|
|
RecvPropFloat( RECVINFO( m_flLastDamageTime ) ),
|
|
RecvPropFloat( RECVINFO( m_flLastHit ) ),
|
|
#else
|
|
SendPropFloat( SENDINFO( m_flDamageTaken ) ),
|
|
SendPropFloat( SENDINFO( m_flStartDamageTime ) ),
|
|
SendPropFloat( SENDINFO( m_flLastDamageTime ) ),
|
|
SendPropFloat( SENDINFO( m_flLastHit ) ),
|
|
#endif
|
|
END_NETWORK_TABLE()
|
|
|
|
#ifdef GAME_DLL
|
|
LINK_ENTITY_TO_CLASS( asw_target_dummy, CASW_Target_Dummy );
|
|
PRECACHE_WEAPON_REGISTER( asw_target_dummy );
|
|
#endif
|
|
|
|
#define ASW_TARGET_DUMMY_MODEL "models/props/furniture/misc/Fridge.mdl"
|
|
|
|
#ifndef CLIENT_DLL
|
|
|
|
BEGIN_DATADESC( CASW_Target_Dummy )
|
|
END_DATADESC()
|
|
|
|
#endif
|
|
|
|
|
|
#ifndef CLIENT_DLL
|
|
|
|
CUtlVector<CASW_Target_Dummy*> g_vecTargetDummies;
|
|
|
|
CASW_Target_Dummy::CASW_Target_Dummy()
|
|
{
|
|
g_vecTargetDummies.AddToTail( this );
|
|
}
|
|
|
|
CASW_Target_Dummy::~CASW_Target_Dummy()
|
|
{
|
|
g_vecTargetDummies.FindAndRemove( this );
|
|
}
|
|
|
|
void CASW_Target_Dummy::Spawn()
|
|
{
|
|
BaseClass::Spawn();
|
|
|
|
//SetModelName( AllocPooledString( ASW_TARGET_DUMMY_MODEL ) );
|
|
|
|
Precache();
|
|
SetModel( ASW_TARGET_DUMMY_MODEL );
|
|
SetMoveType( MOVETYPE_NONE );
|
|
SetSolid( SOLID_VPHYSICS );
|
|
SetCollisionGroup( COLLISION_GROUP_NONE ); //COLLISION_GROUP_DEBRIS );
|
|
m_takedamage = DAMAGE_YES;
|
|
m_iHealth = 100;
|
|
m_iMaxHealth = m_iHealth;
|
|
|
|
AddFlag( FL_STATICPROP );
|
|
VPhysicsInitStatic();
|
|
|
|
ResetThink();
|
|
}
|
|
|
|
void CASW_Target_Dummy::ResetThink()
|
|
{
|
|
m_flDamageTaken = 0.0f;
|
|
m_flStartDamageTime = -1.0f;
|
|
m_flLastDamageTime = -1.0f;
|
|
m_flLastHit = 0.0f;
|
|
|
|
SetThink( NULL );
|
|
}
|
|
|
|
|
|
void CASW_Target_Dummy::Precache()
|
|
{
|
|
PrecacheModel( ASW_TARGET_DUMMY_MODEL );
|
|
|
|
BaseClass::Precache();
|
|
}
|
|
|
|
int CASW_Target_Dummy::OnTakeDamage( const CTakeDamageInfo &info )
|
|
{
|
|
m_flDamageTaken += info.GetDamage();
|
|
m_flLastHit = info.GetDamage();
|
|
|
|
if ( m_flStartDamageTime < 0 )
|
|
{
|
|
m_flStartDamageTime = gpGlobals->curtime;
|
|
}
|
|
m_flLastDamageTime = gpGlobals->curtime;
|
|
|
|
SetThink( &CASW_Target_Dummy::ResetThink );
|
|
SetNextThink( gpGlobals->curtime + 5.0f );
|
|
|
|
return 0;
|
|
}
|
|
|
|
#else
|
|
|
|
float CASW_Target_Dummy::GetDPS()
|
|
{
|
|
if ( m_flStartDamageTime < 0 || m_flLastDamageTime < 0 || ( m_flLastDamageTime - m_flStartDamageTime ) <= 0 )
|
|
{
|
|
return 0.0f;
|
|
}
|
|
float flTime = m_flLastDamageTime - m_flStartDamageTime;
|
|
return GetDamageTaken() / flTime;
|
|
}
|
|
|
|
void CASW_Target_Dummy::PaintHealthBar( CASWHud3DMarineNames *pSurface )
|
|
{
|
|
char pText[64];
|
|
Q_snprintf( pText, sizeof( pText ), "DPS: %.2f", GetDPS() );
|
|
|
|
pSurface->PaintGenericText( GetRenderOrigin() + Vector( -20, -10, 0), pText, Color( 140, 240, 240, 255 ), 1.0f, Vector2D( 0, -6 ) );
|
|
|
|
Q_snprintf( pText, sizeof( pText ), "DAMAGE:%.2f", GetDamageTaken() );
|
|
pSurface->PaintGenericText( GetRenderOrigin() + Vector( -20, -10, 0), pText, Color( 140, 240, 240, 255 ), 1.0f, Vector2D( 0, -5 ) );
|
|
|
|
Q_snprintf( pText, sizeof( pText ), "LAST:%.2f", m_flLastHit.Get() );
|
|
pSurface->PaintGenericText( GetRenderOrigin() + Vector( -20, -10, 0), pText, Color( 140, 240, 240, 255 ), 1.0f, Vector2D( 0, -4 ) );
|
|
}
|
|
#endif // not client
|