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.
116 lines
2.4 KiB
116 lines
2.4 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
|
||
|
#include "cbase.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
class CFunc_LOD : public CBaseEntity
|
||
|
{
|
||
|
DECLARE_DATADESC();
|
||
|
DECLARE_CLASS( CFunc_LOD, CBaseEntity );
|
||
|
public:
|
||
|
DECLARE_SERVERCLASS();
|
||
|
|
||
|
CFunc_LOD();
|
||
|
virtual ~CFunc_LOD();
|
||
|
|
||
|
|
||
|
// When the viewer is between:
|
||
|
// (0 and m_fNonintrusiveDist): the bmodel is forced to be visible
|
||
|
// (m_fNonintrusiveDist and m_fDisappearDist): the bmodel is trying to appear or disappear nonintrusively
|
||
|
// (waits until it's out of the view frustrum or until there's a lot of motion)
|
||
|
// (m_fDisappearDist+): the bmodel is forced to be invisible
|
||
|
CNetworkVar( float, m_fDisappearDist );
|
||
|
|
||
|
// CBaseEntity overrides.
|
||
|
public:
|
||
|
|
||
|
virtual void Spawn();
|
||
|
bool CreateVPhysics();
|
||
|
virtual void Activate();
|
||
|
virtual bool KeyValue( const char *szKeyName, const char *szValue );
|
||
|
};
|
||
|
|
||
|
|
||
|
IMPLEMENT_SERVERCLASS_ST(CFunc_LOD, DT_Func_LOD)
|
||
|
SendPropFloat(SENDINFO(m_fDisappearDist), 0, SPROP_NOSCALE),
|
||
|
END_SEND_TABLE()
|
||
|
|
||
|
|
||
|
LINK_ENTITY_TO_CLASS(func_lod, CFunc_LOD);
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------
|
||
|
// Save/Restore
|
||
|
//---------------------------------------------------------
|
||
|
BEGIN_DATADESC( CFunc_LOD )
|
||
|
|
||
|
DEFINE_FIELD( m_fDisappearDist, FIELD_FLOAT ),
|
||
|
|
||
|
END_DATADESC()
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------------------------- //
|
||
|
// CFunc_LOD implementation.
|
||
|
// ------------------------------------------------------------------------------------- //
|
||
|
CFunc_LOD::CFunc_LOD()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
CFunc_LOD::~CFunc_LOD()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
void CFunc_LOD::Spawn()
|
||
|
{
|
||
|
// Bind to our bmodel.
|
||
|
SetModel( STRING( GetModelName() ) );
|
||
|
SetSolid( SOLID_BSP );
|
||
|
BaseClass::Spawn();
|
||
|
|
||
|
CreateVPhysics();
|
||
|
}
|
||
|
|
||
|
bool CFunc_LOD::CreateVPhysics()
|
||
|
{
|
||
|
VPhysicsInitStatic();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void CFunc_LOD::Activate()
|
||
|
{
|
||
|
BaseClass::Activate();
|
||
|
}
|
||
|
|
||
|
|
||
|
bool CFunc_LOD::KeyValue( const char *szKeyName, const char *szValue )
|
||
|
{
|
||
|
if (FStrEq(szKeyName, "DisappearDist"))
|
||
|
{
|
||
|
m_fDisappearDist = (float)atof(szValue);
|
||
|
}
|
||
|
else if (FStrEq(szKeyName, "Solid"))
|
||
|
{
|
||
|
if (atoi(szValue) != 0)
|
||
|
{
|
||
|
AddSolidFlags( FSOLID_NOT_SOLID );
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return BaseClass::KeyValue(szKeyName, szValue);
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|