hl2_src-leak-2017/src/game/client/tf2/c_obj_barbed_wire.cpp

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 );
}