summaryrefslogtreecommitdiff
path: root/game/client/tf2/c_obj_barbed_wire.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf2/c_obj_barbed_wire.cpp')
-rw-r--r--game/client/tf2/c_obj_barbed_wire.cpp110
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 );
+}
+
+
+
+