diff options
Diffstat (limited to 'game/shared/tf/tf_weapon_grenadelauncher.h')
| -rw-r--r-- | game/shared/tf/tf_weapon_grenadelauncher.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_grenadelauncher.h b/game/shared/tf/tf_weapon_grenadelauncher.h new file mode 100644 index 0000000..e5166e6 --- /dev/null +++ b/game/shared/tf/tf_weapon_grenadelauncher.h @@ -0,0 +1,142 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// +//============================================================================= +#ifndef TF_WEAPON_GRENADELAUNCHER_H +#define TF_WEAPON_GRENADELAUNCHER_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tf_weaponbase_gun.h" +#include "tf_weaponbase_grenadeproj.h" + +// Client specific. +#ifdef CLIENT_DLL +#define CTFGrenadeLauncher C_TFGrenadeLauncher +#define CTFCannon C_TFCannon +#endif + +#define TF_GRENADE_LAUNCHER_XBOX_CLIP 4 + +//============================================================================= +// +// TF Weapon Grenade Launcher. +// +class CTFGrenadeLauncher : public CTFWeaponBaseGun, public ITFChargeUpWeapon +{ +public: + + DECLARE_CLASS( CTFGrenadeLauncher, CTFWeaponBaseGun ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + // Server specific. +#ifdef GAME_DLL + DECLARE_DATADESC(); +#endif + + CTFGrenadeLauncher(); + ~CTFGrenadeLauncher(); + + virtual void Spawn( void ); + virtual int GetWeaponID( void ) const { return TF_WEAPON_GRENADELAUNCHER; } + virtual void SecondaryAttack(); + + virtual void FireFullClipAtOnce( void ); + //virtual CBaseEntity* FirePipeBomb( CTFPlayer *pPlayer, int iPipeBombType ); + + virtual bool Holster( CBaseCombatWeapon *pSwitchingTo ); + virtual bool Deploy( void ); + virtual void PrimaryAttack( void ); + virtual void ItemPostFrame( void ); + virtual void Misfire( void ); + virtual void WeaponIdle( void ); + virtual bool SendWeaponAnim( int iActivity ); + virtual void WeaponReset( void ); + virtual float GetProjectileSpeed( void ); + + int GetDetonateMode( void ) const; + + virtual bool Reload( void ); + + virtual int GetMaxClip1( void ) const; + virtual int GetDefaultClip1( void ) const; + + virtual bool IsBlastImpactWeapon( void ) const { return true; } + + // ITFChargeUpWeapon + virtual bool CanCharge( void ); + virtual float GetChargeBeginTime( void ); + virtual float GetChargeMaxTime( void ); + + void LaunchGrenade( void ); + + void AddDonkVictim( const CBaseEntity* pVictim ); + bool IsDoubleDonk( const CBaseEntity* pVictim ) const; + +private: + + CTFGrenadeLauncher( const CTFGrenadeLauncher & ) {} + int m_nLauncherSlot; + + void FireProjectileInternal( CTFPlayer* pTFPlayer ); + void PostFire(); + + void ResetDetonateTime(); + float GetMortarDetonateTimeLength(); + + CNetworkVar( float, m_flDetonateTime ); + + // Barrel rotation needs to be in sync + CNetworkVar( int, m_iCurrentTube ); // Which tube is the one we just fired out of + CNetworkVar( int, m_iGoalTube ); // Which tube is the one we would like to fire out of next? + + int m_iBarrelBone; + float m_flBarrelRotateBeginTime; // What time did we begin the animation to rotate to the next barrel? + float m_flBarrelAngle; // What is the current rotation of the barrel? + bool m_bCurrentAndGoalTubeEqual; + + +#ifdef CLIENT_DLL + void StartChargeEffects(); + void StopChargeEffects(); + + CNewParticleEffect *m_pCannonFuseSparkEffect; + CNewParticleEffect *m_pCannonCharge; + + // Barrel spinning (cribbed from Minigun) + virtual CStudioHdr *OnNewModel( void ); + virtual void StandardBlendingRules( CStudioHdr *hdr, Vector pos[], Quaternion q[], float currentTime, int boneMask ); + + virtual void OnDataChanged( DataUpdateType_t type ); + + void UpdateBarrelMovement( void ); + + virtual void ViewModelAttachmentBlending( CStudioHdr *hdr, Vector pos[], Quaternion q[], float currentTime, int boneMask ); +#endif // CLIENT_DLL + + virtual void ItemPreFrame( void ); + + struct Donks_t + { + CHandle <CBaseEntity> m_hVictim; + float m_flExpireTime; + }; + + CUtlVector< Donks_t > m_vecDonkVictims; + +}; + + +class CTFCannon : public CTFGrenadeLauncher +{ +public: + DECLARE_CLASS( CTFCannon, CTFGrenadeLauncher ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + virtual int GetWeaponID( void ) const { return TF_WEAPON_CANNON; } +}; + +#endif // TF_WEAPON_GRENADELAUNCHER_H
\ No newline at end of file |