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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef TF_WEAPON_BAT_H
#define TF_WEAPON_BAT_H
#ifdef _WIN32
#pragma once
#endif
#include "tf_weaponbase_melee.h"
#include "tf_weaponbase_grenadeproj.h"
#include "tf_weapon_grenade_pipebomb.h"
#include "tf_shareddefs.h"
#include "tf_viewmodel.h"
#ifdef CLIENT_DLL
#define CTFBat C_TFBat
#define CTFBat_Wood C_TFBat_Wood
#define CTFBat_Fish C_TFBat_Fish
#define CTFStunBall C_TFStunBall
#define CTFBat_Giftwrap C_TFBat_Giftwrap
#define CTFBall_Ornament C_TFBall_Ornament
#endif
//=============================================================================
//
// Bat class.
//
class CTFBat : public CTFWeaponBaseMelee
{
public:
DECLARE_CLASS( CTFBat, CTFWeaponBaseMelee );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
CTFBat();
virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT; }
virtual bool BatDeflects() { return false; }
virtual void Smack( void );
virtual void PlayDeflectionSound( bool bPlayer );
private:
CTFBat( const CTFBat & ) {}
};
//=============================================================================
//
// CTFBat_Fish class.
//
class CTFBat_Fish : public CTFBat
{
public:
DECLARE_CLASS( CTFBat_Fish, CTFBat );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT_FISH; }
};
//=============================================================================
//
// CTFBat_Wood class.
//
class CTFBat_Wood : public CTFBat
{
public:
DECLARE_CLASS( CTFBat_Wood, CTFBat );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
CTFBat_Wood();
virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT_WOOD; }
virtual bool BatDeflects() { return false; }
virtual void SecondaryAttack( void );
void SecondaryAttackAnim( CTFPlayer *pPlayer );
virtual bool SendWeaponAnim( int iActivity );
virtual bool CanCreateBall( CTFPlayer* pPlayer );
virtual void LaunchBall( void );
void LaunchBallThink( void );
virtual float InternalGetEffectBarRechargeTime( void ) { return 15.0; }
virtual int GetEffectBarAmmo( void ) { return TF_AMMO_GRENADES1; }
#ifdef GAME_DLL
virtual void GetBallDynamics( Vector& vecLoc, QAngle& vecAngles, Vector& vecVelocity, AngularImpulse& angImpulse, CTFPlayer* pPlayer );
#endif
#ifdef CLIENT_DLL
virtual void SetWeaponVisible( bool visible );
// Child removal:
virtual void Drop( const Vector &vecVelocity );
virtual void WeaponReset( void );
virtual void UpdateOnRemove( void );
virtual void OnDataChanged( DataUpdateType_t updateType );
void AddBallChild( void );
void RemoveBallChild( void );
#endif
virtual void PickedUpBall( void );
float GetProgress( void ) { return GetEffectBarProgress(); }
const char* GetEffectLabelText( void ) { return "#TF_BALL"; }
virtual const char *GetBallViewModelName( void ) const { return "models/weapons/v_models/v_baseball.mdl"; }
#ifdef GAME_DLL
virtual CBaseEntity* CreateBall( void );
#endif
int m_iEnemyBallID;
#ifdef CLIENT_DLL
EHANDLE m_hStunBallVM; // View model ball.
#endif
};
//=============================================================================
//
// StunBall class.
//
class CTFStunBall : public CTFGrenadePipebombProjectile
{
public:
DECLARE_CLASS( CTFStunBall, CTFGrenadePipebombProjectile );
DECLARE_NETWORKCLASS();
#ifdef GAME_DLL
CTFStunBall();
static CTFStunBall* Create( const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner );
virtual void Precache( void );
virtual void Spawn( void );
void SetInitialSpeed( float flSpd ) { m_flInitialSpeed = flSpd; }
virtual int GetWeaponID( void ) const { return TF_WEAPON_GRENADE_STUNBALL; }
virtual const char *GetBallModelName( void ) const;
virtual const char *GetBallViewModelName( void ) const;
virtual bool IsAllowedToExplode( void ) OVERRIDE { return false; }
virtual void Explode( trace_t *pTrace, int bitsDamageType );
virtual void ApplyBallImpactEffectOnVictim( CBaseEntity *pOther );
virtual void PipebombTouch( CBaseEntity *pOther );
virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
virtual float GetDamage( void );
virtual int GetDamageType( void ) { return DMG_CLUB; }
virtual Vector GetDamageForce( void );
virtual float GetShakeAmplitude( void ) { return 0.0; }
virtual float GetShakeRadius( void ) { return 0.0; }
void RemoveBallTrail( void );
virtual bool IsDestroyable( void ) OVERRIDE { return false; }
int m_iOriginalOwnerID;
private:
float m_flInitialSpeed;
float m_flBallTrailLife;
EHANDLE m_pBallTrail;
#else
virtual const char *GetTrailParticleName( void );
virtual void CreateTrailParticles( void );
#endif
};
//=============================================================================
//
// Winter Holiday 2011 wrapping paper tube and glass ornament ball
//
class CTFBat_Giftwrap : public CTFBat_Wood
{
public:
DECLARE_CLASS( CTFBat_Giftwrap, CTFBat_Wood );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
virtual void Spawn( void );
virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT_GIFTWRAP; }
virtual const char *GetEffectLabelText( void ) { return "#TF_BALL"; }
virtual const char *GetBallViewModelName( void ) const { return "models/weapons/c_models/c_xms_festive_ornament.mdl"; }
#ifdef GAME_DLL
virtual CBaseEntity* CreateBall( void );
#endif
};
//=============================================================================
//
// Winter Holiday 2011 wrapping paper tube and glass ornament ball
//
class CTFBall_Ornament : public CTFStunBall
{
public:
DECLARE_CLASS( CTFBall_Ornament, CTFStunBall );
DECLARE_NETWORKCLASS();
#ifdef GAME_DLL
static CTFBall_Ornament* Create( const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner );
virtual void Precache( void );
virtual int GetWeaponID( void ) const { return TF_WEAPON_GRENADE_ORNAMENT_BALL; }
virtual const char *GetBallModelName( void ) const;
virtual const char *GetBallViewModelName( void ) const;
virtual bool IsAllowedToExplode( void ) OVERRIDE { return true; }
virtual void Explode( trace_t *pTrace, int bitsDamageType ) OVERRIDE;
virtual void PipebombTouch( CBaseEntity *pOther ) OVERRIDE;
virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent ) OVERRIDE;
void VPhysicsCollisionThink( void );
virtual void ApplyBallImpactEffectOnVictim( CBaseEntity *pOther );
protected:
Vector m_vCollisionVelocity;
#endif
};
#endif // TF_WEAPON_BAT_H
|