diff options
Diffstat (limited to 'game/client/tf2/c_obj_barbed_wire.cpp')
| -rw-r--r-- | game/client/tf2/c_obj_barbed_wire.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/game/client/tf2/c_obj_barbed_wire.cpp b/game/client/tf2/c_obj_barbed_wire.cpp new file mode 100644 index 0000000..fdf74bd --- /dev/null +++ b/game/client/tf2/c_obj_barbed_wire.cpp @@ -0,0 +1,110 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "c_obj_barbed_wire.h" + + +IMPLEMENT_CLIENTCLASS_DT( C_ObjectBarbedWire, DT_ObjectBarbedWire, CObjectBarbedWire ) + RecvPropEHandle( RECVINFO( m_hConnectedTo ) ) +END_RECV_TABLE() + + +ConVar obj_barbed_wire_hang_dist( "obj_barbed_wire_hang_dist", "20" ); + + +C_ObjectBarbedWire::C_ObjectBarbedWire() +{ + m_vLastConnectedOrigin.Init( -999999999, -999999999, -999999999 ); + m_vLastOrigin = m_vLastConnectedOrigin; +} + + +C_ObjectBarbedWire::~C_ObjectBarbedWire() +{ + // Get rid of our rope if necessary. + if ( m_hRope ) + { + m_hRope->Release(); + } +} + + +void C_ObjectBarbedWire::OnDataChanged( DataUpdateType_t type ) +{ + if ( m_hConnectedTo != m_hLastConnectedTo ) + { + m_hLastConnectedTo = m_hConnectedTo; + + // Get rid of any old rope we had. + int iAttachment = LookupAttachment( "wire_attachment" ); + + // Create or delete our rope? + if ( m_hConnectedTo ) + { + if ( !m_hRope ) + { + + m_hRope = C_RopeKeyframe::Create( + this, + m_hConnectedTo, + iAttachment, + iAttachment, + 3, + "sprites/physbeam" + ); + } + } + else + { + if ( m_hRope ) + { + m_hRope->Release(); + m_hRope = NULL; + } + } + + // Update rope parameters. + if ( m_hRope ) + { + int r, g, b, a; + CMapTeamColors *team = &MapData().m_TeamColors[ GetTeamNumber() ]; + team->m_clrTeam.GetColor( r, g, b, a ); + m_hRope->SetColorMod( Vector( r / 255.0f, g / 255.0f, b / 255.0f ) ); + + m_hRope->SetEndEntity( m_hConnectedTo ); + m_hRope->SetRopeFlags( ROPE_SIMULATE | ROPE_BARBED ); + } + } + + BaseClass::OnDataChanged( type ); +} + + +void C_ObjectBarbedWire::Spawn() +{ +} + + +void C_ObjectBarbedWire::ClientThink() +{ + if ( m_hConnectedTo && m_hRope ) + { + if ( m_vLastOrigin != GetAbsOrigin() || m_vLastConnectedOrigin != m_hConnectedTo->GetAbsOrigin() ) + { + m_hRope->SetupHangDistance( obj_barbed_wire_hang_dist.GetFloat() ); + + m_vLastOrigin = GetAbsOrigin(); + m_vLastConnectedOrigin = m_hConnectedTo->GetAbsOrigin(); + } + } + + SetNextClientThink( gpGlobals->curtime + 0.1f ); +} + + + + |