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.
111 lines
2.1 KiB
111 lines
2.1 KiB
5 years ago
|
//========= 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 );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|