diff options
Diffstat (limited to 'game/shared/tfc/weapon_tfc_super_shotgun.cpp')
| -rw-r--r-- | game/shared/tfc/weapon_tfc_super_shotgun.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/game/shared/tfc/weapon_tfc_super_shotgun.cpp b/game/shared/tfc/weapon_tfc_super_shotgun.cpp new file mode 100644 index 0000000..1b4a89e --- /dev/null +++ b/game/shared/tfc/weapon_tfc_super_shotgun.cpp @@ -0,0 +1,119 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "util.h" +#include "weapon_tfc_super_shotgun.h" +#include "decals.h" +#include "in_buttons.h" + +#if defined( CLIENT_DLL ) + #include "c_tfc_player.h" +#else + #include "tfc_player.h" +#endif + + +// ----------------------------------------------------------------------------- // +// CTFCSuperShotgun tables. +// ----------------------------------------------------------------------------- // + +IMPLEMENT_NETWORKCLASS_ALIASED( TFCSuperShotgun, DT_WeaponSuperShotgun ) + +BEGIN_NETWORK_TABLE( CTFCSuperShotgun, DT_WeaponSuperShotgun ) +END_NETWORK_TABLE() + +BEGIN_PREDICTION_DATA( CTFCSuperShotgun ) +END_PREDICTION_DATA() + +LINK_ENTITY_TO_CLASS( weapon_super_shotgun, CTFCSuperShotgun ); +PRECACHE_WEAPON_REGISTER( weapon_super_shotgun ); + +#ifndef CLIENT_DLL + + BEGIN_DATADESC( CTFCSuperShotgun ) + END_DATADESC() + +#endif + +// ----------------------------------------------------------------------------- // +// CTFCSuperShotgun implementation. +// ----------------------------------------------------------------------------- // + +CTFCSuperShotgun::CTFCSuperShotgun() +{ + m_iShellsReloaded = 2; +} + + +TFCWeaponID CTFCSuperShotgun::GetWeaponID() const +{ + return WEAPON_SUPER_SHOTGUN; +} + + +void CTFCSuperShotgun::PrimaryAttack() +{ + CTFCPlayer *pOwner = GetPlayerOwner(); + if ( !pOwner ) + return; + + Assert( Clip1() > 0 ); + + // If we've only 1 shell left, fire a single shot + if ( Clip1() == 1 ) + { + BaseClass::PrimaryAttack(); + return; + } + + WeaponSound( SINGLE ); + SendWeaponAnim( ACT_VM_PRIMARYATTACK ); + pOwner->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN ); + + + // Shoot! + FireBulletsInfo_t info; + info.m_vecSrc = pOwner->Weapon_ShootPosition(); + info.m_vecDirShooting = pOwner->GetAutoaimVector( AUTOAIM_5DEGREES ); + info.m_iShots = 14; + info.m_flDistance = 2048; + info.m_iAmmoType = GetPrimaryAmmoType(); + info.m_vecSpread = VECTOR_CONE_TF_SHOTGUN; + info.m_iTracerFreq = 4; + info.m_flDamage = 4; + pOwner->FireBullets( info ); + + m_iClip1 -= 2; + m_flTimeWeaponIdle = gpGlobals->curtime + 5.0; + m_fInSpecialReload = 0; + + // Setup fire delays + if ( Clip1() != 0 ) + m_flPumpTime = gpGlobals->curtime + 0.7; + + m_flNextPrimaryAttack = gpGlobals->curtime + 0.7; +} + + +#ifdef CLIENT_DLL + + // ------------------------------------------------------------------------------------------------ // + // ------------------------------------------------------------------------------------------------ // + // CLIENT DLL SPECIFIC CODE + // ------------------------------------------------------------------------------------------------ // + // ------------------------------------------------------------------------------------------------ // + + +#else + + // ------------------------------------------------------------------------------------------------ // + // ------------------------------------------------------------------------------------------------ // + // GAME DLL SPECIFIC CODE + // ------------------------------------------------------------------------------------------------ // + // ------------------------------------------------------------------------------------------------ // + +#endif |