Team Fortress 2 Source Code as on 22/4/2020
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

//========= 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 );
}