diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/tf_weapon_syringegun.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/tf/tf_weapon_syringegun.cpp')
| -rw-r--r-- | game/shared/tf/tf_weapon_syringegun.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_syringegun.cpp b/game/shared/tf/tf_weapon_syringegun.cpp new file mode 100644 index 0000000..be57e3d --- /dev/null +++ b/game/shared/tf/tf_weapon_syringegun.cpp @@ -0,0 +1,122 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// +//============================================================================= +#include "cbase.h" +#include "tf_weapon_syringegun.h" +#include "tf_fx_shared.h" +#include "tf_weapon_medigun.h" + +// Client specific. +#ifdef CLIENT_DLL +#include "c_tf_player.h" +// Server specific. +#else +#include "tf_player.h" +#endif + +//============================================================================= +// +// Weapon Syringe Gun tables. +// +IMPLEMENT_NETWORKCLASS_ALIASED( TFSyringeGun, DT_WeaponSyringeGun ) + +BEGIN_NETWORK_TABLE( CTFSyringeGun, DT_WeaponSyringeGun ) +END_NETWORK_TABLE() + +BEGIN_PREDICTION_DATA( CTFSyringeGun ) +END_PREDICTION_DATA() + +LINK_ENTITY_TO_CLASS( tf_weapon_syringegun_medic, CTFSyringeGun ); +PRECACHE_WEAPON_REGISTER( tf_weapon_syringegun_medic ); + +// Server specific. +#ifndef CLIENT_DLL +BEGIN_DATADESC( CTFSyringeGun ) +END_DATADESC() +#endif + +//============================================================================= +// +// Weapon SyringeGun functions. +// +void CTFSyringeGun::Precache() +{ + BaseClass::Precache(); + +#ifndef CLIENT_DLL + PrecacheParticleSystem( "nailtrails_medic_blue_crit" ); + PrecacheParticleSystem( "nailtrails_medic_blue" ); + PrecacheParticleSystem( "nailtrails_medic_red_crit" ); + PrecacheParticleSystem( "nailtrails_medic_red" ); +#endif +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CTFSyringeGun::Deploy() +{ + CBaseEntity *pOwner = GetOwnerEntity(); + if ( pOwner ) + { + ToTFPlayer( pOwner )->TeamFortress_SetSpeed(); + } + + return BaseClass::Deploy(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CTFSyringeGun::Holster( CBaseCombatWeapon *pSwitchingTo ) +{ + CBaseEntity *pOwner = GetOwnerEntity(); + if ( pOwner ) + { + ToTFPlayer( pOwner )->TeamFortress_SetSpeed(); + } + + return BaseClass::Holster( pSwitchingTo ); +} + +void CTFSyringeGun::RemoveProjectileAmmo( CTFPlayer *pPlayer ) +{ + float flUberChargeAmmoPerShot = UberChargeAmmoPerShot(); + if ( flUberChargeAmmoPerShot > 0.0f ) + { +#ifndef CLIENT_DLL + if ( !pPlayer ) + return; + + CWeaponMedigun *pMedigun = static_cast< CWeaponMedigun * >( pPlayer->Weapon_OwnsThisID( TF_WEAPON_MEDIGUN ) ); + if ( !pMedigun ) + return; + + pMedigun->SubtractCharge( flUberChargeAmmoPerShot ); +#endif + return; + } + + return BaseClass::RemoveProjectileAmmo( pPlayer ); +} + +bool CTFSyringeGun::HasPrimaryAmmo( void ) +{ + float flUberChargeAmmoPerShot = UberChargeAmmoPerShot(); + if ( flUberChargeAmmoPerShot > 0.0f ) + { + CTFPlayer *pPlayer = ToTFPlayer( GetOwnerEntity() ); + if ( !pPlayer ) + return false; + + CWeaponMedigun *pMedigun = static_cast< CWeaponMedigun * >( pPlayer->Weapon_OwnsThisID( TF_WEAPON_MEDIGUN ) ); + if ( !pMedigun ) + return false; + + float flCharge = pMedigun->GetChargeLevel(); + return flUberChargeAmmoPerShot <= flCharge; + } + + return BaseClass::HasPrimaryAmmo(); +} |