Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= 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
|