source-engine/game/server/hl2/rotorwash.cpp

103 lines
2.5 KiB
C++
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#include "cbase.h"
#include "rotorwash.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
// ==============================================
// Rotorwash entity
// ==============================================
class CRotorWashEmitter : public CBaseEntity
{
public:
DECLARE_CLASS( CRotorWashEmitter, CBaseEntity );
DECLARE_SERVERCLASS();
DECLARE_DATADESC();
void SetAltitude( float flAltitude ) { m_flAltitude = flAltitude; }
void SetEmit( bool state ) { m_bEmit = state; }
void Spawn ( void );
void Precache( void );
int ShouldTransmit( const CCheckTransmitInfo *pInfo );
int UpdateTransmitState( void );
protected:
CNetworkVar( bool, m_bEmit );
CNetworkVar( float, m_flAltitude );
};
IMPLEMENT_SERVERCLASS_ST( CRotorWashEmitter, DT_RotorWashEmitter )
SendPropFloat(SENDINFO(m_flAltitude), -1, SPROP_NOSCALE ),
END_SEND_TABLE()
LINK_ENTITY_TO_CLASS( env_rotorwash_emitter, CRotorWashEmitter );
BEGIN_DATADESC( CRotorWashEmitter )
DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ),
DEFINE_KEYFIELD( m_flAltitude, FIELD_FLOAT, "altitude" ),
END_DATADESC()
void CRotorWashEmitter::Spawn( void )
{
Precache();
BaseClass::Spawn();
SetEmit( false );
}
void CRotorWashEmitter::Precache( void )
{
PrecacheMaterial( "effects/splashwake3" );
}
int CRotorWashEmitter::ShouldTransmit( const CCheckTransmitInfo *pInfo )
{
if ( GetParent() )
{
return GetParent()->ShouldTransmit( pInfo );
}
return FL_EDICT_PVSCHECK;
}
int CRotorWashEmitter::UpdateTransmitState( void )
{
if ( GetParent() )
{
return SetTransmitState( FL_EDICT_FULLCHECK );
}
return SetTransmitState( FL_EDICT_PVSCHECK );
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : &localOrigin -
// &localAngles -
// *pOwner -
// flAltitude -
// Output : CBaseEntity
//-----------------------------------------------------------------------------
CBaseEntity *CreateRotorWashEmitter( const Vector &localOrigin, const QAngle &localAngles, CBaseEntity *pOwner, float flAltitude )
{
CRotorWashEmitter *pEmitter = (CRotorWashEmitter *) CreateEntityByName( "env_rotorwash_emitter" );
if ( pEmitter == NULL )
return NULL;
pEmitter->SetAbsOrigin( localOrigin );
pEmitter->SetAbsAngles( localAngles );
pEmitter->FollowEntity( pOwner );
pEmitter->SetAltitude( flAltitude );
pEmitter->SetEmit( false );
return pEmitter;
}