diff options
Diffstat (limited to 'game/client/tf2/c_grenade_objectsapper.cpp')
| -rw-r--r-- | game/client/tf2/c_grenade_objectsapper.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/game/client/tf2/c_grenade_objectsapper.cpp b/game/client/tf2/c_grenade_objectsapper.cpp new file mode 100644 index 0000000..5b40dae --- /dev/null +++ b/game/client/tf2/c_grenade_objectsapper.cpp @@ -0,0 +1,82 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "hud.h" +#include "basegrenade_shared.h" +#include "IEffects.h" +#include "c_baseplayer.h" + +extern ConVar lod_effect_distance; + +//----------------------------------------------------------------------------- +// Purpose: Client side entity for the ferry target items +//----------------------------------------------------------------------------- +class C_GrenadeObjectSapper : public C_BaseGrenade +{ + DECLARE_CLASS( C_GrenadeObjectSapper, C_BaseGrenade ); +public: + DECLARE_CLIENTCLASS(); + + C_GrenadeObjectSapper(); + + virtual void OnDataChanged( DataUpdateType_t updateType ); + virtual void ClientThink( void ); + +public: + C_GrenadeObjectSapper( const C_GrenadeObjectSapper & ); + + bool m_bSapping; + float m_flNextEffectTime; +}; + +IMPLEMENT_CLIENTCLASS_DT(C_GrenadeObjectSapper, DT_GrenadeObjectSapper, CGrenadeObjectSapper) + RecvPropInt(RECVINFO(m_bSapping)), +END_RECV_TABLE() + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_GrenadeObjectSapper::C_GrenadeObjectSapper( void ) +{ +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_GrenadeObjectSapper::OnDataChanged( DataUpdateType_t updateType ) +{ + BaseClass::OnDataChanged( updateType ); + + // Only think when sapping + if ( m_bSapping ) + { + SetNextClientThink( CLIENT_THINK_ALWAYS ); + m_flNextEffectTime = gpGlobals->curtime; + } + else + { + SetNextClientThink( CLIENT_THINK_NEVER ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Spawn effects if I'm sapping +//----------------------------------------------------------------------------- +void C_GrenadeObjectSapper::ClientThink( void ) +{ + if ( m_flNextEffectTime < gpGlobals->curtime ) + { + // Haxory LOD + C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); + if ( (GetAbsOrigin() - pPlayer->GetAbsOrigin()).LengthSqr() < lod_effect_distance.GetFloat() ) + { + g_pEffects->Sparks( GetAbsOrigin() ); + } + + m_flNextEffectTime = gpGlobals->curtime + 0.3; + } +} |