summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_weapon_shotgun.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/tf/tf_weapon_shotgun.h')
-rw-r--r--game/shared/tf/tf_weapon_shotgun.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_shotgun.h b/game/shared/tf/tf_weapon_shotgun.h
new file mode 100644
index 0000000..56c5fb0
--- /dev/null
+++ b/game/shared/tf/tf_weapon_shotgun.h
@@ -0,0 +1,197 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef TF_WEAPON_SHOTGUN_H
+#define TF_WEAPON_SHOTGUN_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tf_weaponbase_gun.h"
+
+#if defined( CLIENT_DLL )
+#define CTFShotgun C_TFShotgun
+#define CTFShotgun_Soldier C_TFShotgun_Soldier
+#define CTFShotgun_HWG C_TFShotgun_HWG
+#define CTFShotgun_Pyro C_TFShotgun_Pyro
+#define CTFScatterGun C_TFScatterGun
+#define CTFShotgun_Revenge C_TFShotgun_Revenge
+#define CTFSodaPopper C_TFSodaPopper
+#define CTFPEPBrawlerBlaster C_TFPEPBrawlerBlaster
+#define CTFShotgunBuildingRescue C_TFShotgunBuildingRescue
+#define CTFLeech C_TFLeech
+#endif
+
+// Reload Modes
+enum
+{
+ TF_WEAPON_SHOTGUN_RELOAD_START = 0,
+ TF_WEAPON_SHOTGUN_RELOAD_SHELL,
+ TF_WEAPON_SHOTGUN_RELOAD_CONTINUE,
+ TF_WEAPON_SHOTGUN_RELOAD_FINISH
+};
+
+//=============================================================================
+//
+// Shotgun class.
+//
+class CTFShotgun : public CTFWeaponBaseGun
+{
+public:
+
+ DECLARE_CLASS( CTFShotgun, CTFWeaponBaseGun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ CTFShotgun();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SHOTGUN_PRIMARY; }
+ virtual void PrimaryAttack();
+ virtual void PlayWeaponShootSound( void );
+
+#ifdef GAME_DLL
+ virtual CDmgAccumulator *GetDmgAccumulator( void ) { return &m_Accumulator; }
+#endif // GAME_DLL
+
+protected:
+
+ void Fire( CTFPlayer *pPlayer );
+ void UpdatePunchAngles( CTFPlayer *pPlayer );
+
+private:
+
+ CTFShotgun( const CTFShotgun & ) {}
+
+#ifdef GAME_DLL
+ CDmgAccumulator m_Accumulator;
+#endif // GAME_DLL
+};
+
+// Engineer's revenge shotgun.
+class CTFShotgun_Revenge : public CTFShotgun
+{
+public:
+ DECLARE_CLASS( CTFShotgun_Revenge, CTFShotgun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ CTFShotgun_Revenge();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SENTRY_REVENGE; }
+
+ void Precache();
+ virtual void PrimaryAttack();
+ virtual void SentryKilled( int iKills );
+ virtual bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
+ virtual bool Deploy( void );
+ virtual int GetCustomDamageType() const;
+ int GetCount( void );
+ float GetProgress( void ) { return 0.f; }
+ const char* GetEffectLabelText( void ) { return "#TF_REVENGE"; }
+
+#ifdef CLIENT_DLL
+ virtual void SetWeaponVisible( bool visible );
+ virtual int GetWorldModelIndex( void );
+#else
+ virtual void Detach();
+#endif
+};
+
+// Scout version. Different models, possibly different behaviour later on
+class CTFScatterGun : public CTFShotgun
+{
+public:
+ DECLARE_CLASS( CTFScatterGun, CTFShotgun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SCATTERGUN; }
+ virtual bool Reload( void );
+ virtual void FireBullet( CTFPlayer *pPlayer );
+ virtual void ApplyPostHitEffects( const CTakeDamageInfo &inputInfo, CTFPlayer *pPlayer );
+ virtual void FinishReload( void );
+ virtual bool HasKnockback( void );
+ virtual bool SendWeaponAnim( int iActivity );
+
+#ifdef GAME_DLL
+ virtual void Equip( CBaseCombatCharacter *pOwner );
+#endif // GAME_DLL
+};
+
+class CTFShotgun_Soldier : public CTFShotgun
+{
+public:
+ DECLARE_CLASS( CTFShotgun_Soldier, CTFShotgun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SHOTGUN_SOLDIER; }
+};
+
+// Secondary version. Different weapon slot, different ammo
+class CTFShotgun_HWG : public CTFShotgun
+{
+public:
+ DECLARE_CLASS( CTFShotgun_HWG, CTFShotgun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SHOTGUN_HWG; }
+};
+
+class CTFShotgun_Pyro : public CTFShotgun
+{
+public:
+ DECLARE_CLASS( CTFShotgun_Pyro, CTFShotgun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SHOTGUN_PYRO; }
+};
+
+class CTFSodaPopper : public CTFScatterGun
+{
+public:
+ DECLARE_CLASS( CTFSodaPopper, CTFScatterGun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SODA_POPPER; }
+
+ virtual void ItemBusyFrame( void );
+ virtual void SecondaryAttack( void );
+
+ const char* GetEffectLabelText( void ) { return "#TF_HYPE"; }
+ float GetProgress( void );
+};
+
+class CTFPEPBrawlerBlaster : public CTFScatterGun
+{
+public:
+ DECLARE_CLASS( CTFPEPBrawlerBlaster, CTFScatterGun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_PEP_BRAWLER_BLASTER; }
+
+ const char* GetEffectLabelText( void ) { return "#TF_Boost"; }
+ float GetProgress( void );
+};
+
+class CTFShotgunBuildingRescue : public CTFShotgun
+{
+public:
+ DECLARE_CLASS( CTFShotgunBuildingRescue, CTFShotgun );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_SHOTGUN_BUILDING_RESCUE; }
+ virtual float GetProjectileSpeed( void );
+ virtual float GetProjectileGravity( void );
+ virtual bool IsViewModelFlipped( void );
+};
+
+#endif // TF_WEAPON_SHOTGUN_H