diff options
Diffstat (limited to 'game/client/c_te_armorricochet.cpp')
| -rw-r--r-- | game/client/c_te_armorricochet.cpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/game/client/c_te_armorricochet.cpp b/game/client/c_te_armorricochet.cpp new file mode 100644 index 0000000..c84afc8 --- /dev/null +++ b/game/client/c_te_armorricochet.cpp @@ -0,0 +1,182 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//===========================================================================// +#include "cbase.h" +#include "c_basetempentity.h" +#include "IEffects.h" +#include "tier1/KeyValues.h" +#include "tier0/vprof.h" +#include "toolframework_client.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// Purpose: Armor Ricochet TE +//----------------------------------------------------------------------------- +class C_TEMetalSparks : public C_BaseTempEntity +{ +public: + DECLARE_CLIENTCLASS(); + + C_TEMetalSparks( void ); + virtual ~C_TEMetalSparks( void ); + + virtual void PostDataUpdate( DataUpdateType_t updateType ); + + virtual void Precache( void ); + +public: + Vector m_vecPos; + Vector m_vecDir; + + const struct model_t *m_pModel; +}; + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_TEMetalSparks::C_TEMetalSparks( void ) +{ + m_vecPos.Init(); + m_vecDir.Init(); + m_pModel = NULL; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_TEMetalSparks::~C_TEMetalSparks( void ) +{ +} + +void C_TEMetalSparks::Precache( void ) +{ + //m_pModel = engine->LoadModel( "sprites/richo1.vmt" ); +} + + +//----------------------------------------------------------------------------- +// Recording +//----------------------------------------------------------------------------- +static inline void RecordMetalSparks( const Vector &start, const Vector &direction ) +{ + if ( !ToolsEnabled() ) + return; + + if ( clienttools->IsInRecordingMode() ) + { + KeyValues *msg = new KeyValues( "TempEntity" ); + + msg->SetInt( "te", TE_METAL_SPARKS ); + msg->SetString( "name", "TE_MetalSparks" ); + msg->SetFloat( "time", gpGlobals->curtime ); + msg->SetFloat( "originx", start.x ); + msg->SetFloat( "originy", start.y ); + msg->SetFloat( "originz", start.z ); + msg->SetFloat( "directionx", direction.x ); + msg->SetFloat( "directiony", direction.y ); + msg->SetFloat( "directionz", direction.z ); + + ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg ); + msg->deleteThis(); + } +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Input : bool - +//----------------------------------------------------------------------------- +void C_TEMetalSparks::PostDataUpdate( DataUpdateType_t updateType ) +{ + VPROF( "C_TEMetalSparks::PostDataUpdate" ); + + g_pEffects->MetalSparks( m_vecPos, m_vecDir ); + RecordMetalSparks( m_vecPos, m_vecDir ); +} + +void TE_MetalSparks( IRecipientFilter& filter, float delay, + const Vector* pos, const Vector* dir ) +{ + g_pEffects->MetalSparks( *pos, *dir ); + RecordMetalSparks( *pos, *dir ); +} + +//----------------------------------------------------------------------------- +// Purpose: Armor Ricochet TE +//----------------------------------------------------------------------------- +class C_TEArmorRicochet : public C_TEMetalSparks +{ + DECLARE_CLASS( C_TEArmorRicochet, C_TEMetalSparks ); +public: + DECLARE_CLIENTCLASS(); + virtual void PostDataUpdate( DataUpdateType_t updateType ); +}; + + +//----------------------------------------------------------------------------- +// Recording +//----------------------------------------------------------------------------- +static inline void RecordArmorRicochet( const Vector &start, const Vector &direction ) +{ + if ( !ToolsEnabled() ) + return; + + if ( clienttools->IsInRecordingMode() ) + { + KeyValues *msg = new KeyValues( "TempEntity" ); + + msg->SetInt( "te", TE_ARMOR_RICOCHET ); + msg->SetString( "name", "TE_ArmorRicochet" ); + msg->SetFloat( "time", gpGlobals->curtime ); + msg->SetFloat( "originx", start.x ); + msg->SetFloat( "originy", start.y ); + msg->SetFloat( "originz", start.z ); + msg->SetFloat( "directionx", direction.x ); + msg->SetFloat( "directiony", direction.y ); + msg->SetFloat( "directionz", direction.z ); + + ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg ); + msg->deleteThis(); + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Client side version of API +//----------------------------------------------------------------------------- +void TE_ArmorRicochet( IRecipientFilter& filter, float delay, + const Vector* pos, const Vector* dir ) +{ + g_pEffects->Ricochet( *pos, *dir ); + RecordArmorRicochet( *pos, *dir ); +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Input : bool - +//----------------------------------------------------------------------------- +void C_TEArmorRicochet::PostDataUpdate( DataUpdateType_t updateType ) +{ + g_pEffects->Ricochet( m_vecPos, m_vecDir ); + RecordArmorRicochet( m_vecPos, m_vecDir ); +} + +// Expose the TE to the engine. +IMPLEMENT_CLIENTCLASS_EVENT( C_TEMetalSparks, DT_TEMetalSparks, CTEMetalSparks ); + +BEGIN_RECV_TABLE_NOBASE(C_TEMetalSparks, DT_TEMetalSparks) + RecvPropVector(RECVINFO(m_vecPos)), + RecvPropVector(RECVINFO(m_vecDir)), +END_RECV_TABLE() + +IMPLEMENT_CLIENTCLASS_EVENT( C_TEArmorRicochet, DT_TEArmorRicochet, CTEArmorRicochet ); +BEGIN_RECV_TABLE(C_TEArmorRicochet, DT_TEArmorRicochet) +END_RECV_TABLE() |