diff options
Diffstat (limited to 'game/shared/tf/tf_weapon_shovel.cpp')
| -rw-r--r-- | game/shared/tf/tf_weapon_shovel.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_shovel.cpp b/game/shared/tf/tf_weapon_shovel.cpp new file mode 100644 index 0000000..0345204 --- /dev/null +++ b/game/shared/tf/tf_weapon_shovel.cpp @@ -0,0 +1,220 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#include "cbase.h" +#include "tf_weapon_shovel.h" +#include "decals.h" + +// Client specific. +#ifdef CLIENT_DLL +#include "c_tf_player.h" +// Server specific. +#else +#include "tf_player.h" +#endif + +//============================================================================= +// +// Weapon Shovel tables. +// +IMPLEMENT_NETWORKCLASS_ALIASED( TFShovel, DT_TFWeaponShovel ) + +BEGIN_NETWORK_TABLE( CTFShovel, DT_TFWeaponShovel ) +END_NETWORK_TABLE() + +BEGIN_PREDICTION_DATA( CTFShovel ) +END_PREDICTION_DATA() + +LINK_ENTITY_TO_CLASS( tf_weapon_shovel, CTFShovel ); +PRECACHE_WEAPON_REGISTER( tf_weapon_shovel ); + +//============================================================================= +// +// Weapon Shovel functions. +// + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CTFShovel::CTFShovel() +{ + m_bHolstering = false; + m_flLastHealthRatio = 1.f; +} + +// ----------------------------------------------------------------------------- +void CTFShovel::PrimaryAttack() +{ + CTFPlayer *pPlayer = GetTFPlayerOwner(); + if ( pPlayer && !(pPlayer->GetFlags() & FL_ONGROUND) ) + { + int iFlappy = 0; + CALL_ATTRIB_HOOK_INT( iFlappy, air_jump_on_attack ); + if ( iFlappy ) + { +#ifdef GAME_DLL + EmitSound_t params; + params.m_pSoundName = "General.banana_slip"; + params.m_flSoundTime = 0; + params.m_pflSoundDuration = 0; + //params.m_bWarnOnDirectWaveReference = true; + CPASFilter filter( pPlayer->GetAbsOrigin() ); + params.m_flVolume = 0.1f; + params.m_SoundLevel = SNDLVL_25dB; + params.m_nPitch = 100.0f; + params.m_nFlags |= ( SND_CHANGE_PITCH | SND_CHANGE_VOL ); + pPlayer->StopSound( "General.banana_slip" ); + pPlayer->EmitSound( filter, pPlayer->entindex(), params ); +#endif + Vector vForce = Vector(0,0,0); + if ( pPlayer->GetAbsVelocity().z > 0 ) + { + vForce.z = 275.0f; + } + else if ( pPlayer->m_Shared.InCond( TF_COND_BLASTJUMPING ) ) + { + vForce.z = 500.0f; + } + else + { + vForce.z = 350.0f; + } + pPlayer->ApplyAbsVelocityImpulse( vForce ); + } + } + + + BaseClass::PrimaryAttack(); +} +// ----------------------------------------------------------------------------- +// Purpose: +// ----------------------------------------------------------------------------- +void CTFShovel::ItemPreFrame( void ) +{ + return BaseClass::ItemPreFrame(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +float CTFShovel::GetMeleeDamage( CBaseEntity *pTarget, int* piDamageType, int* piCustomDamage ) +{ + float flDamage = BaseClass::GetMeleeDamage( pTarget, piDamageType, piCustomDamage ); + + if ( !HasDamageBoost() ) + return flDamage; + + CTFPlayer *pOwner = ToTFPlayer( GetOwner() ); + if ( !pOwner ) + return 0; + + float flOwnerHealthRatio = (float) pOwner->GetHealth() / (float) pOwner->GetMaxHealth(); + float flDamageScale = RemapValClamped( flOwnerHealthRatio, 0.f, 1.f, 1.65f, 0.5f ); + + return flDamage * flDamageScale; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +float CTFShovel::GetSpeedMod( void ) +{ + if ( m_bHolstering || !HasSpeedBoost() ) + return 1.f; + + CTFPlayer *pOwner = ToTFPlayer( GetOwner() ); + if ( !pOwner ) + return 0; + + float flOwnerHealthRatio = (float) pOwner->GetHealth() / (float) pOwner->GetMaxHealth(); + if ( flOwnerHealthRatio > 0.8 ) + return 1.f; + else if ( flOwnerHealthRatio > 0.6 ) + return 1.1f; + else if ( flOwnerHealthRatio > 0.4 ) + return 1.2f; + else if ( flOwnerHealthRatio > 0.2 ) + return 1.4f; + else + return 1.6f; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CTFShovel::Deploy( void ) +{ + bool ret = BaseClass::Deploy(); + + CTFPlayer *pOwner = ToTFPlayer( GetOwner() ); + if ( pOwner && HasSpeedBoost() ) + { + SetContextThink( &CTFShovel::MoveSpeedThink, gpGlobals->curtime + 0.25f, "SHOVEL_SPEED_THINK" ); + } + + return ret; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CTFShovel::Holster( CBaseCombatWeapon *pSwitchingTo ) +{ + m_bHolstering = true; + bool ret = BaseClass::Holster( pSwitchingTo ); + m_bHolstering = false; + + return ret; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CTFShovel::MoveSpeedThink( void ) +{ + CTFPlayer *pOwner = ToTFPlayer( GetOwner() ); + if ( !pOwner || !pOwner->IsAlive() ) + return; + + if ( this != pOwner->GetActiveWeapon() ) + return; + + pOwner->TeamFortress_SetSpeed(); + + SetContextThink( &CTFShovel::MoveSpeedThink, gpGlobals->curtime + 0.25f, "SHOVEL_SPEED_THINK" ); +} + +#ifndef CLIENT_DLL +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +float CTFShovel::GetForceScale( void ) +{ + if ( HasDamageBoost() ) + { + return BaseClass::GetForceScale() * 2.f; + } + else + { + return 1.f; + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +int CTFShovel::GetDamageCustom() +{ + if ( GetShovelType() == SHOVEL_SPEED_BOOST || GetShovelType() == SHOVEL_DAMAGE_BOOST ) + { + return TF_DMG_CUSTOM_PICKAXE; + } + else + { + return BaseClass::GetDamageCustom(); + } +} +#endif
\ No newline at end of file |