diff options
Diffstat (limited to 'game/server/hl2/cbasespriteprojectile.cpp')
| -rw-r--r-- | game/server/hl2/cbasespriteprojectile.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/game/server/hl2/cbasespriteprojectile.cpp b/game/server/hl2/cbasespriteprojectile.cpp new file mode 100644 index 0000000..391ef42 --- /dev/null +++ b/game/server/hl2/cbasespriteprojectile.cpp @@ -0,0 +1,106 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Base class for simple projectiles +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "cbasespriteprojectile.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +LINK_ENTITY_TO_CLASS( baseprojectile, CBaseSpriteProjectile ); + +//--------------------------------------------------------- +// Save/Restore +//--------------------------------------------------------- +BEGIN_DATADESC( CBaseSpriteProjectile ) + + DEFINE_FIELD( m_iDmg, FIELD_INTEGER ), + DEFINE_FIELD( m_iDmgType, FIELD_INTEGER ), + DEFINE_FIELD( m_hIntendedTarget, FIELD_EHANDLE ), + +END_DATADESC() + +//--------------------------------------------------------- +//--------------------------------------------------------- +void CBaseSpriteProjectile::Spawn( char *pszModel, + const Vector &vecOrigin, + const Vector &vecVelocity, + edict_t *pOwner, + MoveType_t iMovetype, + MoveCollide_t nMoveCollide, + int iDamage, + int iDamageType, + CBaseEntity *pIntendedTarget ) +{ + Precache(); + + SetSolid( SOLID_BBOX ); + SetModel( pszModel ); + + UTIL_SetSize( this, vec3_origin, vec3_origin ); + + m_iDmg = iDamage; + m_iDmgType = iDamageType; + + SetMoveType( iMovetype, nMoveCollide ); + + UTIL_SetOrigin( this, vecOrigin ); + SetAbsVelocity( vecVelocity ); + + SetOwnerEntity( Instance( pOwner ) ); + + m_hIntendedTarget.Set( pIntendedTarget ); + + // Call think for free the first time. It's up to derived classes to rethink. + SetNextThink( gpGlobals->curtime ); +} + +//--------------------------------------------------------- +//--------------------------------------------------------- +void CBaseSpriteProjectile::Touch( CBaseEntity *pOther ) +{ + HandleTouch( pOther ); +} + +//--------------------------------------------------------- +//--------------------------------------------------------- +void CBaseSpriteProjectile::HandleTouch( CBaseEntity *pOther ) +{ + CBaseEntity *pOwner; + + pOwner = GetOwnerEntity(); + + if( !pOwner ) + { + pOwner = this; + } + + trace_t tr; + tr = BaseClass::GetTouchTrace( ); + + CTakeDamageInfo info( this, pOwner, m_iDmg, m_iDmgType ); + GuessDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos ); + pOther->TakeDamage( info ); + + UTIL_Remove( this ); +} + +//--------------------------------------------------------- +//--------------------------------------------------------- +void CBaseSpriteProjectile::Think() +{ + HandleThink(); +} + +//--------------------------------------------------------- +//--------------------------------------------------------- +void CBaseSpriteProjectile::HandleThink() +{ +} + |