diff options
Diffstat (limited to 'game/client/tf2/c_grenade_limpetmine.cpp')
| -rw-r--r-- | game/client/tf2/c_grenade_limpetmine.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/game/client/tf2/c_grenade_limpetmine.cpp b/game/client/tf2/c_grenade_limpetmine.cpp new file mode 100644 index 0000000..2f9754e --- /dev/null +++ b/game/client/tf2/c_grenade_limpetmine.cpp @@ -0,0 +1,109 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "basegrenade_shared.h" +#include "minimap_trace.h" +#include "particles_simple.h" + +//----------------------------------------------------------------------------- +// Purpose: Client side entity for the ferry target items +//----------------------------------------------------------------------------- +class C_LimpetMine : public C_BaseGrenade +{ + DECLARE_CLASS( C_LimpetMine, C_BaseGrenade ); +public: + DECLARE_CLIENTCLASS(); + DECLARE_MINIMAP_PANEL(); + + C_LimpetMine(); + + virtual void OnDataChanged( DataUpdateType_t updateType ); + virtual void ClientThink( void ); + +public: + C_LimpetMine( const C_LimpetMine & ); + +private: + bool m_bLive; +}; + +IMPLEMENT_CLIENTCLASS_DT(C_LimpetMine, DT_LimpetMine, CLimpetMine) + RecvPropInt(RECVINFO(m_bLive)), +END_RECV_TABLE() + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_LimpetMine::C_LimpetMine( void ) +{ + CONSTRUCT_MINIMAP_PANEL( "minimap_limpet", MINIMAP_OBJECTS ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_LimpetMine::OnDataChanged( DataUpdateType_t updateType ) +{ + BaseClass::OnDataChanged( updateType ); + + // Only think when live + if ( m_bLive ) + { + SetNextClientThink( CLIENT_THINK_ALWAYS ); + } + else + { + SetNextClientThink( CLIENT_THINK_NEVER ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Spawn effects if I'm live +//----------------------------------------------------------------------------- +void C_LimpetMine::ClientThink( void ) +{ + if ( !InLocalTeam() ) + return; + + Vector up; + GetVectors( NULL, NULL, &up ); + up *= 8.0f; + Vector vecOrg = GetAbsOrigin() + up; + + // Make a single sprite + CSmartPtr<CSimpleEmitter> pSmokeEmitter = CSimpleEmitter::Create( "C_LimpetMine::Effect" ); + pSmokeEmitter->SetSortOrigin( vecOrg ); + PMaterialHandle hSphereMaterial = g_Mat_DustPuff[0]; + SimpleParticle *pParticle = (SimpleParticle *) pSmokeEmitter->AddParticle( sizeof(SimpleParticle), hSphereMaterial, vecOrg ); + if ( pParticle == NULL ) + return; + + pParticle->m_flLifetime = 0.0f; + pParticle->m_flDieTime = 0.1f; + pParticle->m_uchStartSize = RandomInt(4,6); + pParticle->m_uchEndSize = pParticle->m_uchStartSize; + pParticle->m_vecVelocity = vec3_origin; + pParticle->m_uchStartAlpha = 255; + pParticle->m_uchEndAlpha = 255; + pParticle->m_flRoll = random->RandomFloat( 180, 360 ); + pParticle->m_flRollDelta = random->RandomFloat( -1, 1 ); + + if ( InLocalTeam() ) + { + pParticle->m_uchColor[0] = 0; + pParticle->m_uchColor[1] = 255; + pParticle->m_uchColor[2] = 0; + } + else + { + pParticle->m_uchColor[0] = 255; + pParticle->m_uchColor[1] = 50; + pParticle->m_uchColor[2] = 50; + } +} + + |