diff options
Diffstat (limited to 'game/server/dod/grenadetrail.cpp')
| -rw-r--r-- | game/server/dod/grenadetrail.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/game/server/dod/grenadetrail.cpp b/game/server/dod/grenadetrail.cpp new file mode 100644 index 0000000..a0dcc2d --- /dev/null +++ b/game/server/dod/grenadetrail.cpp @@ -0,0 +1,109 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#include "cbase.h" +#include "grenadetrail.h" +#include "dt_send.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define GRENADETRAIL_ENTITYNAME "env_grenadetrail" + +//----------------------------------------------------------------------------- +//Data table +//----------------------------------------------------------------------------- +IMPLEMENT_SERVERCLASS_ST(CGrenadeTrail, DT_GrenadeTrail) + SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024), + SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100), + SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE), + SendPropBool(SENDINFO(m_bEmit) ), + SendPropInt(SENDINFO(m_nAttachment), 32 ), +END_SEND_TABLE() + + +BEGIN_DATADESC( CGrenadeTrail ) + + DEFINE_KEYFIELD( m_SpawnRate, FIELD_FLOAT, "spawnrate" ), + DEFINE_KEYFIELD( m_ParticleLifetime, FIELD_FLOAT, "lifetime" ), + DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ), + DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), + DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ), + +END_DATADESC() + + +LINK_ENTITY_TO_CLASS(env_grenadetrail, CGrenadeTrail); + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : +//----------------------------------------------------------------------------- +CGrenadeTrail::CGrenadeTrail() +{ + m_SpawnRate = 10; + m_ParticleLifetime = 5; + m_StopEmitTime = 0; // Don't stop emitting particles + m_bEmit = true; + m_nAttachment = 0; +} + +//----------------------------------------------------------------------------- +// Purpose : +// Input : +// Output : +//----------------------------------------------------------------------------- +void CGrenadeTrail::SetEmit(bool bVal) +{ + m_bEmit = bVal; +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : CGrenadeTrail* +//----------------------------------------------------------------------------- +CGrenadeTrail* CGrenadeTrail::CreateGrenadeTrail() +{ + CBaseEntity *pEnt = CreateEntityByName(GRENADETRAIL_ENTITYNAME); + if(pEnt) + { + CGrenadeTrail *pTrail = dynamic_cast<CGrenadeTrail*>(pEnt); + if(pTrail) + { + pTrail->Activate(); + return pTrail; + } + else + { + UTIL_Remove(pEnt); + } + } + + return NULL; +} + +//----------------------------------------------------------------------------- +// Purpose: Attach the smoke trail to an entity or point +// Input : index - entity that has the attachment +// attachment - point to attach to +//----------------------------------------------------------------------------- +void CGrenadeTrail::FollowEntity( CBaseEntity *pEntity, const char *pAttachmentName ) +{ + // For attachments + if ( pAttachmentName && pEntity && pEntity->GetBaseAnimating() ) + { + m_nAttachment = pEntity->GetBaseAnimating()->LookupAttachment( pAttachmentName ); + } + else + { + m_nAttachment = 0; + } + + BaseClass::FollowEntity( pEntity ); +} |