diff options
Diffstat (limited to 'game/shared/tf/tf_weapon_rocketlauncher.h')
| -rw-r--r-- | game/shared/tf/tf_weapon_rocketlauncher.h | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_rocketlauncher.h b/game/shared/tf/tf_weapon_rocketlauncher.h new file mode 100644 index 0000000..c3b0ef2 --- /dev/null +++ b/game/shared/tf/tf_weapon_rocketlauncher.h @@ -0,0 +1,196 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// TF Rocket Launcher +// +//============================================================================= +#ifndef TF_WEAPON_ROCKETLAUNCHER_H +#define TF_WEAPON_ROCKETLAUNCHER_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tf_weaponbase_gun.h" +#include "tf_weaponbase_rocket.h" +#include "tf_weapon_sniperrifle.h" + +#ifdef CLIENT_DLL +#include "particle_property.h" +#endif + +// Client specific. +#ifdef CLIENT_DLL +#define CTFRocketLauncher C_TFRocketLauncher +#define CTFRocketLauncher_DirectHit C_TFRocketLauncher_DirectHit +#define CTFRocketLauncher_AirStrike C_TFRocketLauncher_AirStrike +#define CTFRocketLauncher_Mortar C_TFRocketLauncher_Mortar +#define CTFCrossbow C_TFCrossbow + +#endif // CLIENT_DLL + +//============================================================================= +// +// TF Weapon Rocket Launcher. +// +class CTFRocketLauncher : public CTFWeaponBaseGun +{ +public: + + DECLARE_CLASS( CTFRocketLauncher, CTFWeaponBaseGun ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + // Server specific. +#ifdef GAME_DLL + DECLARE_DATADESC(); +#endif + + CTFRocketLauncher(); + ~CTFRocketLauncher(); + +#ifndef CLIENT_DLL + virtual void Precache(); +#endif + virtual void ModifyEmitSoundParams( EmitSound_t ¶ms ); + + virtual int GetWeaponID( void ) const { return TF_WEAPON_ROCKETLAUNCHER; } + + virtual void Misfire( void ); + virtual CBaseEntity *FireProjectile( CTFPlayer *pPlayer ); + virtual void ItemPostFrame( void ); + virtual bool DefaultReload( int iClipSize1, int iClipSize2, int iActivity ); + + virtual int GetWeaponProjectileType( void ) const OVERRIDE; + + virtual bool IsBlastImpactWeapon( void ) const { return !IsEnergyWeapon(); } + + virtual bool CheckReloadMisfire( void ) OVERRIDE; + + virtual bool ShouldBlockPrimaryFire() OVERRIDE; + +#ifdef CLIENT_DLL + virtual void CreateMuzzleFlashEffects( C_BaseEntity *pAttachEnt, int nIndex ); +#endif + +private: + float m_flShowReloadHintAt; + + // Since the ammo in the clip can be predicted/networked out of order from when the reload sound happens + // We need to keep track of this invividually on client and server to modify the pitch + int m_nReloadPitchStep; + +#ifdef GAME_DLL + int m_iConsecutiveCrits; + bool m_bIsOverloading; +#endif + + CTFRocketLauncher( const CTFRocketLauncher & ) {} +}; + +// ------------------------------------------------------------------------------------------------------------------------ +class CTFRocketLauncher_DirectHit : public CTFRocketLauncher +{ +public: + DECLARE_CLASS( CTFRocketLauncher_DirectHit, CTFRocketLauncher ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + // Server specific. +#ifdef GAME_DLL + DECLARE_DATADESC(); +#endif + + virtual int GetWeaponID( void ) const { return TF_WEAPON_ROCKETLAUNCHER_DIRECTHIT; } +}; + +// ------------------------------------------------------------------------------------------------------------------------ +class CTFRocketLauncher_AirStrike : public CTFRocketLauncher +{ +public: + DECLARE_CLASS( CTFRocketLauncher_AirStrike, CTFRocketLauncher ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + // Server specific. +#ifdef GAME_DLL + DECLARE_DATADESC(); +#endif + + CTFRocketLauncher_AirStrike(); + + virtual int GetWeaponID( void ) const { return TF_WEAPON_ROCKETLAUNCHER; } + const char* GetEffectLabelText( void ) { return "#TF_KILLS"; } + virtual int GetCount( void ); + +#ifdef GAME_DLL + virtual void OnPlayerKill( CTFPlayer *pVictim, const CTakeDamageInfo &info ); +#endif +}; + +// ------------------------------------------------------------------------------------------------------------------------ +class CTFRocketLauncher_Mortar : public CTFRocketLauncher +{ +public: + DECLARE_CLASS( CTFRocketLauncher_Mortar, CTFRocketLauncher ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + // Server specific. +#ifdef GAME_DLL + DECLARE_DATADESC(); +#endif + + //CTFRocketLauncher_Mortar(); + + virtual int GetWeaponID( void ) const { return TF_WEAPON_ROCKETLAUNCHER; } + + virtual CBaseEntity *FireProjectile( CTFPlayer *pPlayer ); + + virtual void SecondaryAttack( void ); + virtual void ItemPostFrame( void ); + virtual void ItemBusyFrame( void ); + +private: + + void RedirectRockets(); + +#ifdef GAME_DLL + CUtlVector< EHANDLE > m_vecRockets; +#endif // GAME_DLL + +}; + +// ------------------------------------------------------------------------------------------------------------------------ +class CTFCrossbow : public CTFRocketLauncher +{ +public: + DECLARE_CLASS( CTFCrossbow, CTFRocketLauncher ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + // Server specific. +#ifdef GAME_DLL + DECLARE_DATADESC(); +#endif + + virtual bool Holster( CBaseCombatWeapon *pSwitchingTo ) OVERRIDE; + virtual int GetWeaponID( void ) const { return TF_WEAPON_CROSSBOW; } + virtual void SecondaryAttack( void ); + virtual float GetProjectileSpeed( void ); + virtual float GetProjectileGravity( void ); + virtual bool IsViewModelFlipped( void ); + + virtual void ItemPostFrame( void ); + virtual void ModifyProjectile( CBaseEntity* pProj ); + virtual void WeaponRegenerate( void ); + + float GetProgress( void ); + const char* GetEffectLabelText( void ) { return "#TF_BOLT"; } + + CNetworkVar( float, m_flRegenerateDuration ); + CNetworkVar( float, m_flLastUsedTimestamp ); + +private: + bool m_bMilkNextAttack; +}; + +#endif // TF_WEAPON_ROCKETLAUNCHER_H
\ No newline at end of file |