diff options
Diffstat (limited to 'game/client/hl2/c_env_headcrabcanister.cpp')
| -rw-r--r-- | game/client/hl2/c_env_headcrabcanister.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/game/client/hl2/c_env_headcrabcanister.cpp b/game/client/hl2/c_env_headcrabcanister.cpp new file mode 100644 index 0000000..fe92ed2 --- /dev/null +++ b/game/client/hl2/c_env_headcrabcanister.cpp @@ -0,0 +1,97 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "fx_explosion.h" +#include "tempentity.h" +#include "c_tracer.h" +#include "env_headcrabcanister_shared.h" +#include "baseparticleentity.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// Headcrab canister Class (Client-side only!) +//----------------------------------------------------------------------------- +class C_EnvHeadcrabCanister : public C_BaseAnimating +{ + DECLARE_CLASS( C_EnvHeadcrabCanister, C_BaseAnimating ); + DECLARE_CLIENTCLASS(); + +public: + //------------------------------------------------------------------------- + // Initialization/Destruction + //------------------------------------------------------------------------- + C_EnvHeadcrabCanister(); + ~C_EnvHeadcrabCanister(); + + virtual void OnDataChanged( DataUpdateType_t updateType ); + virtual void ClientThink(); + +private: + C_EnvHeadcrabCanister( const C_EnvHeadcrabCanister & ); + + CEnvHeadcrabCanisterShared m_Shared; + CNetworkVar( bool, m_bLanded ); +}; + + +EXTERN_RECV_TABLE(DT_EnvHeadcrabCanisterShared); + +IMPLEMENT_CLIENTCLASS_DT( C_EnvHeadcrabCanister, DT_EnvHeadcrabCanister, CEnvHeadcrabCanister ) + RecvPropDataTable( RECVINFO_DT( m_Shared ), 0, &REFERENCE_RECV_TABLE(DT_EnvHeadcrabCanisterShared) ), + RecvPropBool( RECVINFO( m_bLanded ) ), +END_RECV_TABLE() + + +//----------------------------------------------------------------------------- +// Constructor +//----------------------------------------------------------------------------- +C_EnvHeadcrabCanister::C_EnvHeadcrabCanister() +{ +} + + +//----------------------------------------------------------------------------- +// Destructor +//----------------------------------------------------------------------------- +C_EnvHeadcrabCanister::~C_EnvHeadcrabCanister() +{ +} + + +//----------------------------------------------------------------------------- +// On data update +//----------------------------------------------------------------------------- +void C_EnvHeadcrabCanister::OnDataChanged( DataUpdateType_t updateType ) +{ + BaseClass::OnDataChanged( updateType ); + if ( updateType == DATA_UPDATE_CREATED ) + { + SetNextClientThink( CLIENT_THINK_ALWAYS ); + } + + // Stop client-side simulation on landing + if ( m_bLanded ) + { + SetNextClientThink( CLIENT_THINK_NEVER ); + } +} + + +//----------------------------------------------------------------------------- +// Compute position +//----------------------------------------------------------------------------- +void C_EnvHeadcrabCanister::ClientThink() +{ + Vector vecEndPosition; + QAngle vecEndAngles; + m_Shared.GetPositionAtTime( gpGlobals->curtime, vecEndPosition, vecEndAngles ); + SetAbsOrigin( vecEndPosition ); + SetAbsAngles( vecEndAngles ); +} + |