hl2_src-leak-2017/src/game/shared/tf/tf_weapon_syringegun.cpp

123 lines
3.0 KiB
C++

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