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.
109 lines
3.0 KiB
109 lines
3.0 KiB
//========= 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 );
|
|
}
|