summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_weapon_bat.h
blob: e2485089b45d8c4d6ec110f7b9f2f005555388a9 (plain) (blame)
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