summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_weapon_shovel.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/tf_weapon_shovel.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/tf/tf_weapon_shovel.cpp')
-rw-r--r--game/shared/tf/tf_weapon_shovel.cpp220
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