//========= 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(); }