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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef BASEGRENADE_SHARED_H
#define BASEGRENADE_SHARED_H
#ifdef _WIN32
#pragma once
#endif
#include "baseprojectile.h"
#if defined( CLIENT_DLL )
#define CBaseGrenade C_BaseGrenade
#include "c_basecombatcharacter.h"
#else
#include "basecombatcharacter.h"
#include "player_pickup.h"
#endif
#define BASEGRENADE_EXPLOSION_VOLUME 1024
class CTakeDamageInfo;
#if !defined( CLIENT_DLL )
class CBaseGrenade : public CBaseProjectile, public CDefaultPlayerPickupVPhysics
#else
class CBaseGrenade : public CBaseProjectile
#endif
{
DECLARE_CLASS( CBaseGrenade, CBaseProjectile );
public:
CBaseGrenade(void);
~CBaseGrenade(void);
DECLARE_PREDICTABLE();
DECLARE_NETWORKCLASS();
#if !defined( CLIENT_DLL )
DECLARE_DATADESC();
#endif
virtual void Precache( void );
virtual void Explode( trace_t *pTrace, int bitsDamageType );
void Smoke( void );
void BounceTouch( CBaseEntity *pOther );
void SlideTouch( CBaseEntity *pOther );
void ExplodeTouch( CBaseEntity *pOther );
void DangerSoundThink( void );
void PreDetonate( void );
virtual void Detonate( void );
void DetonateUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
void TumbleThink( void );
virtual Vector GetBlastForce() { return vec3_origin; }
virtual void BounceSound( void );
virtual int BloodColor( void ) { return DONT_BLEED; }
virtual void Event_Killed( const CTakeDamageInfo &info );
virtual float GetShakeAmplitude( void ) { return 25.0; }
virtual float GetShakeRadius( void ) { return 750.0; }
// Damage accessors.
virtual float GetDamage()
{
return m_flDamage;
}
virtual float GetDamageRadius()
{
return m_DmgRadius;
}
virtual void SetDamage(float flDamage)
{
m_flDamage = flDamage;
}
virtual void SetDamageRadius(float flDamageRadius)
{
m_DmgRadius = flDamageRadius;
}
// Bounce sound accessors.
void SetBounceSound( const char *pszBounceSound )
{
m_iszBounceSound = MAKE_STRING( pszBounceSound );
}
CBaseCombatCharacter *GetThrower( void );
void SetThrower( CBaseCombatCharacter *pThrower );
CBaseEntity *GetOriginalThrower() { return m_hOriginalThrower; }
#if !defined( CLIENT_DLL )
// Allow +USE pickup
int ObjectCaps()
{
return (BaseClass::ObjectCaps() | FCAP_IMPULSE_USE | FCAP_USE_IN_RADIUS);
}
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
#endif
public:
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_vecVelocity );
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_fFlags );
bool m_bHasWarnedAI; // whether or not this grenade has issued its DANGER sound to the world sound list yet.
CNetworkVar( bool, m_bIsLive ); // Is this grenade live, or can it be picked up?
CNetworkVar( float, m_DmgRadius ); // How far do I do damage?
CNetworkVar( float, m_flNextAttack );
float m_flDetonateTime; // Time at which to detonate.
float m_flWarnAITime; // Time at which to warn the AI
protected:
CNetworkVar( float, m_flDamage ); // Damage to inflict.
string_t m_iszBounceSound; // The sound to make on bouncing. If not NULL, overrides the BounceSound() function.
private:
CNetworkHandle( CBaseEntity, m_hThrower ); // Who threw this grenade
EHANDLE m_hOriginalThrower; // Who was the original thrower of this grenade
CBaseGrenade( const CBaseGrenade & ); // not defined, not accessible
};
#endif // BASEGRENADE_SHARED_H
|