94 lines
2.1 KiB
C++
Raw Normal View History

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//===========================================================================//
#include "cbase.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
class C_FuncClientClip : public C_BaseEntity
{
public:
DECLARE_CLASS( C_FuncClientClip, C_BaseEntity );
DECLARE_CLIENTCLASS();
void OnDataChanged( DataUpdateType_t type );
void ClientThink();
bool TestCollision( const Ray_t &ray, unsigned int mask, trace_t& trace );
bool m_bDisabled;
};
IMPLEMENT_CLIENTCLASS_DT( C_FuncClientClip, DT_FuncClientClip, CFuncClientClip )
RecvPropBool( RECVINFO( m_bDisabled ) ),
END_RECV_TABLE()
void C_FuncClientClip::OnDataChanged( DataUpdateType_t type )
{
BaseClass::OnDataChanged( type );
//if ( type == DATA_UPDATE_CREATED )
//{
SetSolid(GetMoveParent() ? SOLID_VPHYSICS : SOLID_BSP); // SOLID_VPHYSICS
//}
if ( !m_bDisabled )
{
VPhysicsDestroyObject();
VPhysicsInitShadow( true, true );
// Think constantly updates the shadow
if (GetMoveParent())
SetNextClientThink( CLIENT_THINK_ALWAYS );
}
else
{
// Disabling
VPhysicsDestroyObject();
SetNextClientThink( CLIENT_THINK_NEVER );
}
}
void C_FuncClientClip::ClientThink()
{
// We shouldn't be thinking if we're disabled
Assert(!m_bDisabled);
if (VPhysicsGetObject())
{
// Constantly updates the shadow.
// This think function should really only be active when we're parented.
VPhysicsGetObject()->UpdateShadow( GetAbsOrigin(), GetAbsAngles(), false, TICK_INTERVAL );
}
else
{
// This should never happen...
VPhysicsInitShadow( true, true );
}
BaseClass::ClientThink();
}
bool C_FuncClientClip::TestCollision( const Ray_t &ray, unsigned int mask, trace_t& trace )
{
if ( m_bDisabled )
return false;
if ( !VPhysicsGetObject() )
return false;
physcollision->TraceBox( ray, VPhysicsGetObject()->GetCollide(), GetAbsOrigin(), GetAbsAngles(), &trace );
if ( trace.DidHit() )
{
trace.surface.surfaceProps = VPhysicsGetObject()->GetMaterialIndex();
return true;
}
return false;
}