111 lines
2.1 KiB
C++
111 lines
2.1 KiB
C++
//========= 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 );
|
|
}
|
|
|
|
|
|
|
|
|