You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.1 KiB
110 lines
2.1 KiB
//========= 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 ); |
|
} |
|
|
|
|
|
|
|
|
|
|