1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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()
{
}
|