diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/server/smoke_trail.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/server/smoke_trail.cpp')
| -rw-r--r-- | mp/src/game/server/smoke_trail.cpp | 1290 |
1 files changed, 645 insertions, 645 deletions
diff --git a/mp/src/game/server/smoke_trail.cpp b/mp/src/game/server/smoke_trail.cpp index 88806fd5..f467e60b 100644 --- a/mp/src/game/server/smoke_trail.cpp +++ b/mp/src/game/server/smoke_trail.cpp @@ -1,645 +1,645 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//
-//=============================================================================//
-#include "cbase.h"
-#include "smoke_trail.h"
-#include "dt_send.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-#define SMOKETRAIL_ENTITYNAME "env_smoketrail"
-#define SPORETRAIL_ENTITYNAME "env_sporetrail"
-#define SPOREEXPLOSION_ENTITYNAME "env_sporeexplosion"
-#define DUSTTRAIL_ENTITYNAME "env_dusttrail"
-
-//-----------------------------------------------------------------------------
-//Data table
-//-----------------------------------------------------------------------------
-IMPLEMENT_SERVERCLASS_ST(SmokeTrail, DT_SmokeTrail)
- SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024),
- SendPropVector(SENDINFO(m_StartColor), 8, 0, 0, 1),
- SendPropVector(SENDINFO(m_EndColor), 8, 0, 0, 1),
- SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100),
- SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MinSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MaxSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MinDirectedSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MaxDirectedSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_StartSize), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_EndSize), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_SpawnRadius), -1, SPROP_NOSCALE),
- SendPropBool(SENDINFO(m_bEmit) ),
- SendPropInt(SENDINFO(m_nAttachment), 32 ),
- SendPropFloat(SENDINFO(m_Opacity), -1, SPROP_NOSCALE),
-END_SEND_TABLE()
-
-LINK_ENTITY_TO_CLASS(env_smoketrail, SmokeTrail);
-
-BEGIN_DATADESC( SmokeTrail )
-
- DEFINE_FIELD( m_StartColor, FIELD_VECTOR ),
- DEFINE_FIELD( m_EndColor, FIELD_VECTOR ),
- DEFINE_KEYFIELD( m_Opacity, FIELD_FLOAT, "opacity" ),
- DEFINE_KEYFIELD( m_SpawnRate, FIELD_FLOAT, "spawnrate" ),
- DEFINE_KEYFIELD( m_ParticleLifetime, FIELD_FLOAT, "lifetime" ),
- DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ),
- DEFINE_KEYFIELD( m_MinSpeed, FIELD_FLOAT, "minspeed" ),
- DEFINE_KEYFIELD( m_MaxSpeed, FIELD_FLOAT, "maxspeed" ),
- DEFINE_KEYFIELD( m_MinDirectedSpeed, FIELD_FLOAT, "mindirectedspeed" ),
- DEFINE_KEYFIELD( m_MaxDirectedSpeed, FIELD_FLOAT, "maxdirectedspeed" ),
- DEFINE_KEYFIELD( m_StartSize, FIELD_FLOAT, "startsize" ),
- DEFINE_KEYFIELD( m_EndSize, FIELD_FLOAT, "endsize" ),
- DEFINE_KEYFIELD( m_SpawnRadius, FIELD_FLOAT, "spawnradius" ),
- DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ),
- DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ),
-
-END_DATADESC()
-
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output :
-//-----------------------------------------------------------------------------
-SmokeTrail::SmokeTrail()
-{
- m_SpawnRate = 10;
- m_StartColor.GetForModify().Init(0.5, 0.5, 0.5);
- m_EndColor.GetForModify().Init(0,0,0);
- m_ParticleLifetime = 5;
- m_StopEmitTime = 0; // Don't stop emitting particles
- m_MinSpeed = 2;
- m_MaxSpeed = 4;
- m_MinDirectedSpeed = m_MaxDirectedSpeed = 0;
- m_StartSize = 35;
- m_EndSize = 55;
- m_SpawnRadius = 2;
- m_bEmit = true;
- m_nAttachment = 0;
- m_Opacity = 0.5f;
-}
-
-
-//-----------------------------------------------------------------------------
-// Parse data from a map file
-//-----------------------------------------------------------------------------
-bool SmokeTrail::KeyValue( const char *szKeyName, const char *szValue )
-{
- if ( FStrEq( szKeyName, "startcolor" ) )
- {
- color32 tmp;
- UTIL_StringToColor32( &tmp, szValue );
- m_StartColor.GetForModify().Init( tmp.r / 255.0f, tmp.g / 255.0f, tmp.b / 255.0f );
- return true;
- }
-
- if ( FStrEq( szKeyName, "endcolor" ) )
- {
- color32 tmp;
- UTIL_StringToColor32( &tmp, szValue );
- m_EndColor.GetForModify().Init( tmp.r / 255.0f, tmp.g / 255.0f, tmp.b / 255.0f );
- return true;
- }
-
- if ( FStrEq( szKeyName, "emittime" ) )
- {
- m_StopEmitTime = gpGlobals->curtime + atof( szValue );
- return true;
- }
-
- return BaseClass::KeyValue( szKeyName, szValue );
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose :
-// Input :
-// Output :
-//-----------------------------------------------------------------------------
-void SmokeTrail::SetEmit(bool bVal)
-{
- m_bEmit = bVal;
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output : SmokeTrail*
-//-----------------------------------------------------------------------------
-SmokeTrail* SmokeTrail::CreateSmokeTrail()
-{
- CBaseEntity *pEnt = CreateEntityByName(SMOKETRAIL_ENTITYNAME);
- if(pEnt)
- {
- SmokeTrail *pSmoke = dynamic_cast<SmokeTrail*>(pEnt);
- if(pSmoke)
- {
- pSmoke->Activate();
- return pSmoke;
- }
- 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 SmokeTrail::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 );
-}
-
-
-//==================================================
-// RocketTrail
-//==================================================
-
-//Data table
-IMPLEMENT_SERVERCLASS_ST(RocketTrail, DT_RocketTrail)
- SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024),
- SendPropVector(SENDINFO(m_StartColor), 8, 0, 0, 1),
- SendPropVector(SENDINFO(m_EndColor), 8, 0, 0, 1),
- SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100),
- SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MinSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MaxSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_StartSize), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_EndSize), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_SpawnRadius), -1, SPROP_NOSCALE),
- SendPropBool(SENDINFO(m_bEmit)),
- SendPropInt(SENDINFO(m_nAttachment), 32 ),
- SendPropFloat(SENDINFO(m_Opacity), -1, SPROP_NOSCALE),
- SendPropInt (SENDINFO(m_bDamaged), 1, SPROP_UNSIGNED),
- SendPropFloat(SENDINFO(m_flFlareScale), -1, SPROP_NOSCALE),
-END_SEND_TABLE()
-
-LINK_ENTITY_TO_CLASS( env_rockettrail, RocketTrail );
-
-BEGIN_DATADESC( RocketTrail )
-
- DEFINE_FIELD( m_StartColor, FIELD_VECTOR ),
- DEFINE_FIELD( m_EndColor, FIELD_VECTOR ),
- DEFINE_FIELD( m_Opacity, FIELD_FLOAT ),
- DEFINE_FIELD( m_SpawnRate, FIELD_FLOAT ),
- DEFINE_FIELD( m_ParticleLifetime, FIELD_FLOAT ),
- DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ),
- DEFINE_FIELD( m_MinSpeed, FIELD_FLOAT ),
- DEFINE_FIELD( m_MaxSpeed, FIELD_FLOAT ),
- DEFINE_FIELD( m_StartSize, FIELD_FLOAT ),
- DEFINE_FIELD( m_EndSize, FIELD_FLOAT ),
- DEFINE_FIELD( m_SpawnRadius, FIELD_FLOAT ),
- DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ),
- DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ),
- DEFINE_FIELD( m_bDamaged, FIELD_BOOLEAN ),
- DEFINE_FIELD( m_flFlareScale, FIELD_FLOAT ),
-
-END_DATADESC()
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output :
-//-----------------------------------------------------------------------------
-RocketTrail::RocketTrail()
-{
- m_SpawnRate = 10;
- m_StartColor.GetForModify().Init(0.5, 0.5, 0.5);
- m_EndColor.GetForModify().Init(0,0,0);
- m_ParticleLifetime = 5;
- m_StopEmitTime = 0; // Don't stop emitting particles
- m_MinSpeed = 2;
- m_MaxSpeed = 4;
- m_StartSize = 35;
- m_EndSize = 55;
- m_SpawnRadius = 2;
- m_bEmit = true;
- m_nAttachment = 0;
- m_Opacity = 0.5f;
- m_flFlareScale = 1.5;
-}
-
-//------------------------------------------------------------------------------
-// Purpose :
-// Input :
-// Output :
-//------------------------------------------------------------------------------
-void RocketTrail::SetEmit(bool bVal)
-{
- m_bEmit = bVal;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output : SmokeTrail*
-//-----------------------------------------------------------------------------
-RocketTrail* RocketTrail::CreateRocketTrail()
-{
- CBaseEntity *pEnt = CreateEntityByName( "env_rockettrail" );
-
- if( pEnt != NULL )
- {
- RocketTrail *pTrail = dynamic_cast<RocketTrail*>(pEnt);
-
- if( pTrail != NULL )
- {
- 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 RocketTrail::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 );
-}
-
-//==================================================
-// SporeTrail
-//==================================================
-
-IMPLEMENT_SERVERCLASS_ST( SporeTrail, DT_SporeTrail )
- SendPropFloat (SENDINFO(m_flSpawnRate), 8, 0, 1, 1024),
- SendPropVector (SENDINFO(m_vecEndColor), 8, 0, 0, 1),
- SendPropFloat (SENDINFO(m_flParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100),
- SendPropFloat (SENDINFO(m_flStartSize), -1, SPROP_NOSCALE),
- SendPropFloat (SENDINFO(m_flEndSize), -1, SPROP_NOSCALE),
- SendPropFloat (SENDINFO(m_flSpawnRadius), -1, SPROP_NOSCALE),
- SendPropBool (SENDINFO(m_bEmit)),
-END_SEND_TABLE()
-
-LINK_ENTITY_TO_CLASS(env_sporetrail, SporeTrail);
-
-BEGIN_DATADESC( SporeTrail )
-
- DEFINE_FIELD( m_vecEndColor, FIELD_VECTOR ),
- DEFINE_FIELD( m_flSpawnRate, FIELD_FLOAT ),
- DEFINE_FIELD( m_flParticleLifetime, FIELD_FLOAT ),
- DEFINE_FIELD( m_flStartSize, FIELD_FLOAT ),
- DEFINE_FIELD( m_flEndSize, FIELD_FLOAT ),
- DEFINE_FIELD( m_flSpawnRadius, FIELD_FLOAT ),
- DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ),
-
-END_DATADESC()
-
-SporeTrail::SporeTrail( void )
-{
- m_vecEndColor.GetForModify().Init();
-
- m_flSpawnRate = 100.0f;
- m_flParticleLifetime = 1.0f;
- m_flStartSize = 1.0f;
- m_flEndSize = 0.0f;
- m_flSpawnRadius = 16.0f;
- SetRenderColor( 255, 255, 255, 255 );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output : SporeTrail*
-//-----------------------------------------------------------------------------
-SporeTrail* SporeTrail::CreateSporeTrail()
-{
- CBaseEntity *pEnt = CreateEntityByName( SPORETRAIL_ENTITYNAME );
-
- if(pEnt)
- {
- SporeTrail *pSpore = dynamic_cast<SporeTrail*>(pEnt);
-
- if ( pSpore )
- {
- pSpore->Activate();
- return pSpore;
- }
- else
- {
- UTIL_Remove( pEnt );
- }
- }
-
- return NULL;
-}
-
-//==================================================
-// SporeExplosion
-//==================================================
-
-IMPLEMENT_SERVERCLASS_ST( SporeExplosion, DT_SporeExplosion )
- SendPropFloat (SENDINFO(m_flSpawnRate), 8, 0, 1, 1024),
- SendPropFloat (SENDINFO(m_flParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100),
- SendPropFloat (SENDINFO(m_flStartSize), -1, SPROP_NOSCALE),
- SendPropFloat (SENDINFO(m_flEndSize), -1, SPROP_NOSCALE),
- SendPropFloat (SENDINFO(m_flSpawnRadius), -1, SPROP_NOSCALE),
- SendPropBool (SENDINFO(m_bEmit) ),
- SendPropBool (SENDINFO(m_bDontRemove) ),
-END_SEND_TABLE()
-
-LINK_ENTITY_TO_CLASS( env_sporeexplosion, SporeExplosion );
-
-BEGIN_DATADESC( SporeExplosion )
-
- DEFINE_KEYFIELD( m_flSpawnRate, FIELD_FLOAT, "spawnrate" ),
- DEFINE_FIELD( m_flParticleLifetime, FIELD_FLOAT ),
- DEFINE_FIELD( m_flStartSize, FIELD_FLOAT ),
- DEFINE_FIELD( m_flEndSize, FIELD_FLOAT ),
- DEFINE_FIELD( m_flSpawnRadius, FIELD_FLOAT ),
- DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ),
- DEFINE_KEYFIELD( m_bDisabled, FIELD_BOOLEAN, "startdisabled" ),
- DEFINE_FIELD( m_bDontRemove, FIELD_BOOLEAN ),
-
- DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ),
- DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
-
-END_DATADESC()
-
-SporeExplosion::SporeExplosion( void )
-{
- m_flSpawnRate = 100.0f;
- m_flParticleLifetime = 1.0f;
- m_flStartSize = 1.0f;
- m_flEndSize = 0.0f;
- m_flSpawnRadius = 16.0f;
- SetRenderColor( 255, 255, 255, 255 );
- m_bEmit = true;
- m_bDisabled = false;
-}
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-void SporeExplosion::Spawn( void )
-{
- BaseClass::Spawn();
-
- m_bEmit = false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output : SporeExplosion*
-//-----------------------------------------------------------------------------
-SporeExplosion *SporeExplosion::CreateSporeExplosion()
-{
- CBaseEntity *pEnt = CreateEntityByName( SPOREEXPLOSION_ENTITYNAME );
-
- if ( pEnt )
- {
- SporeExplosion *pSpore = dynamic_cast<SporeExplosion*>(pEnt);
-
- if ( pSpore )
- {
- pSpore->Activate();
- return pSpore;
- }
- else
- {
- UTIL_Remove( pEnt );
- }
- }
-
- return NULL;
-}
-
-void SporeExplosion::InputEnable( inputdata_t &inputdata )
-{
- m_bDontRemove = true;
- m_bDisabled = false;
- m_bEmit = true;
-}
-
-void SporeExplosion::InputDisable( inputdata_t &inputdata )
-{
- m_bDontRemove = true;
- m_bDisabled = true;
- m_bEmit = false;
-}
-
-BEGIN_DATADESC( CFireTrail )
-
- DEFINE_FIELD( m_flLifetime, FIELD_FLOAT ),
- DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ),
-
-END_DATADESC()
-
-IMPLEMENT_SERVERCLASS_ST( CFireTrail, DT_FireTrail )
- SendPropInt( SENDINFO( m_nAttachment ), 32 ),
- SendPropFloat( SENDINFO( m_flLifetime ), 0, SPROP_NOSCALE ),
-END_SEND_TABLE()
-
-LINK_ENTITY_TO_CLASS( env_fire_trail, CFireTrail );
-
-void CFireTrail::Precache( void )
-{
- PrecacheMaterial( "sprites/flamelet1" );
- PrecacheMaterial( "sprites/flamelet2" );
- PrecacheMaterial( "sprites/flamelet3" );
- PrecacheMaterial( "sprites/flamelet4" );
- PrecacheMaterial( "sprites/flamelet5" );
- PrecacheMaterial( "particle/particle_smokegrenade" );
- PrecacheMaterial( "particle/particle_noisesphere" );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Attach the smoke trail to an entity or point
-// Input : index - entity that has the attachment
-// attachment - point to attach to
-//-----------------------------------------------------------------------------
-void CFireTrail::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 );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Create and return a new fire trail entity
-//-----------------------------------------------------------------------------
-CFireTrail *CFireTrail::CreateFireTrail( void )
-{
- CBaseEntity *pEnt = CreateEntityByName( "env_fire_trail" );
-
- if ( pEnt )
- {
- CFireTrail *pTrail = dynamic_cast<CFireTrail*>(pEnt);
-
- if ( pTrail )
- {
- pTrail->Activate();
- return pTrail;
- }
- else
- {
- UTIL_Remove( pEnt );
- }
- }
-
- return NULL;
-}
-
-
-//-----------------------------------------------------------------------------
-//Data table
-//-----------------------------------------------------------------------------
-IMPLEMENT_SERVERCLASS_ST(DustTrail, DT_DustTrail)
- SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024),
- SendPropVector(SENDINFO(m_Color), 8, 0, 0, 1),
- SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100),
- SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MinSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MaxSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MinDirectedSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_MaxDirectedSpeed), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_StartSize), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_EndSize), -1, SPROP_NOSCALE),
- SendPropFloat(SENDINFO(m_SpawnRadius), -1, SPROP_NOSCALE),
- SendPropBool(SENDINFO(m_bEmit) ),
- SendPropFloat(SENDINFO(m_Opacity), -1, SPROP_NOSCALE),
-END_SEND_TABLE()
-
-LINK_ENTITY_TO_CLASS( env_dusttrail, DustTrail);
-
-BEGIN_DATADESC( DustTrail )
-
- DEFINE_FIELD( m_Color, FIELD_VECTOR ),
- DEFINE_KEYFIELD( m_Opacity, FIELD_FLOAT, "opacity" ),
- DEFINE_KEYFIELD( m_SpawnRate, FIELD_FLOAT, "spawnrate" ),
- DEFINE_KEYFIELD( m_ParticleLifetime, FIELD_FLOAT, "lifetime" ),
- DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ),
- DEFINE_KEYFIELD( m_MinSpeed, FIELD_FLOAT, "minspeed" ),
- DEFINE_KEYFIELD( m_MaxSpeed, FIELD_FLOAT, "maxspeed" ),
- DEFINE_KEYFIELD( m_MinDirectedSpeed, FIELD_FLOAT, "mindirectedspeed" ),
- DEFINE_KEYFIELD( m_MaxDirectedSpeed, FIELD_FLOAT, "maxdirectedspeed" ),
- DEFINE_KEYFIELD( m_StartSize, FIELD_FLOAT, "startsize" ),
- DEFINE_KEYFIELD( m_EndSize, FIELD_FLOAT, "endsize" ),
- DEFINE_KEYFIELD( m_SpawnRadius, FIELD_FLOAT, "spawnradius" ),
- DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ),
- DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ),
-
-END_DATADESC()
-
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output :
-//-----------------------------------------------------------------------------
-DustTrail::DustTrail()
-{
- m_SpawnRate = 10;
- m_Color.GetForModify().Init(0.5, 0.5, 0.5);
- m_ParticleLifetime = 5;
- m_StopEmitTime = 0; // Don't stop emitting particles
- m_MinSpeed = 2;
- m_MaxSpeed = 4;
- m_MinDirectedSpeed = m_MaxDirectedSpeed = 0;
- m_StartSize = 35;
- m_EndSize = 55;
- m_SpawnRadius = 2;
- m_bEmit = true;
- m_Opacity = 0.5f;
-}
-
-
-//-----------------------------------------------------------------------------
-// Parse data from a map file
-//-----------------------------------------------------------------------------
-bool DustTrail::KeyValue( const char *szKeyName, const char *szValue )
-{
- if ( FStrEq( szKeyName, "color" ) )
- {
- color32 tmp;
- UTIL_StringToColor32( &tmp, szValue );
- m_Color.GetForModify().Init( tmp.r / 255.0f, tmp.g / 255.0f, tmp.b / 255.0f );
- return true;
- }
-
- if ( FStrEq( szKeyName, "emittime" ) )
- {
- m_StopEmitTime = gpGlobals->curtime + atof( szValue );
- return true;
- }
-
- return BaseClass::KeyValue( szKeyName, szValue );
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose :
-// Input :
-// Output :
-//-----------------------------------------------------------------------------
-void DustTrail::SetEmit(bool bVal)
-{
- m_bEmit = bVal;
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output : DustTrail*
-//-----------------------------------------------------------------------------
-DustTrail* DustTrail::CreateDustTrail()
-{
- CBaseEntity *pEnt = CreateEntityByName(DUSTTRAIL_ENTITYNAME);
- if(pEnt)
- {
- DustTrail *pDust = dynamic_cast<DustTrail*>(pEnt);
- if(pDust)
- {
- pDust->Activate();
- return pDust;
- }
- else
- {
- UTIL_Remove(pEnt);
- }
- }
-
- return NULL;
-}
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#include "cbase.h" +#include "smoke_trail.h" +#include "dt_send.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define SMOKETRAIL_ENTITYNAME "env_smoketrail" +#define SPORETRAIL_ENTITYNAME "env_sporetrail" +#define SPOREEXPLOSION_ENTITYNAME "env_sporeexplosion" +#define DUSTTRAIL_ENTITYNAME "env_dusttrail" + +//----------------------------------------------------------------------------- +//Data table +//----------------------------------------------------------------------------- +IMPLEMENT_SERVERCLASS_ST(SmokeTrail, DT_SmokeTrail) + SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024), + SendPropVector(SENDINFO(m_StartColor), 8, 0, 0, 1), + SendPropVector(SENDINFO(m_EndColor), 8, 0, 0, 1), + SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100), + SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MinSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MaxSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MinDirectedSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MaxDirectedSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_StartSize), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_EndSize), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_SpawnRadius), -1, SPROP_NOSCALE), + SendPropBool(SENDINFO(m_bEmit) ), + SendPropInt(SENDINFO(m_nAttachment), 32 ), + SendPropFloat(SENDINFO(m_Opacity), -1, SPROP_NOSCALE), +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS(env_smoketrail, SmokeTrail); + +BEGIN_DATADESC( SmokeTrail ) + + DEFINE_FIELD( m_StartColor, FIELD_VECTOR ), + DEFINE_FIELD( m_EndColor, FIELD_VECTOR ), + DEFINE_KEYFIELD( m_Opacity, FIELD_FLOAT, "opacity" ), + DEFINE_KEYFIELD( m_SpawnRate, FIELD_FLOAT, "spawnrate" ), + DEFINE_KEYFIELD( m_ParticleLifetime, FIELD_FLOAT, "lifetime" ), + DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ), + DEFINE_KEYFIELD( m_MinSpeed, FIELD_FLOAT, "minspeed" ), + DEFINE_KEYFIELD( m_MaxSpeed, FIELD_FLOAT, "maxspeed" ), + DEFINE_KEYFIELD( m_MinDirectedSpeed, FIELD_FLOAT, "mindirectedspeed" ), + DEFINE_KEYFIELD( m_MaxDirectedSpeed, FIELD_FLOAT, "maxdirectedspeed" ), + DEFINE_KEYFIELD( m_StartSize, FIELD_FLOAT, "startsize" ), + DEFINE_KEYFIELD( m_EndSize, FIELD_FLOAT, "endsize" ), + DEFINE_KEYFIELD( m_SpawnRadius, FIELD_FLOAT, "spawnradius" ), + DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), + DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ), + +END_DATADESC() + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : +//----------------------------------------------------------------------------- +SmokeTrail::SmokeTrail() +{ + m_SpawnRate = 10; + m_StartColor.GetForModify().Init(0.5, 0.5, 0.5); + m_EndColor.GetForModify().Init(0,0,0); + m_ParticleLifetime = 5; + m_StopEmitTime = 0; // Don't stop emitting particles + m_MinSpeed = 2; + m_MaxSpeed = 4; + m_MinDirectedSpeed = m_MaxDirectedSpeed = 0; + m_StartSize = 35; + m_EndSize = 55; + m_SpawnRadius = 2; + m_bEmit = true; + m_nAttachment = 0; + m_Opacity = 0.5f; +} + + +//----------------------------------------------------------------------------- +// Parse data from a map file +//----------------------------------------------------------------------------- +bool SmokeTrail::KeyValue( const char *szKeyName, const char *szValue ) +{ + if ( FStrEq( szKeyName, "startcolor" ) ) + { + color32 tmp; + UTIL_StringToColor32( &tmp, szValue ); + m_StartColor.GetForModify().Init( tmp.r / 255.0f, tmp.g / 255.0f, tmp.b / 255.0f ); + return true; + } + + if ( FStrEq( szKeyName, "endcolor" ) ) + { + color32 tmp; + UTIL_StringToColor32( &tmp, szValue ); + m_EndColor.GetForModify().Init( tmp.r / 255.0f, tmp.g / 255.0f, tmp.b / 255.0f ); + return true; + } + + if ( FStrEq( szKeyName, "emittime" ) ) + { + m_StopEmitTime = gpGlobals->curtime + atof( szValue ); + return true; + } + + return BaseClass::KeyValue( szKeyName, szValue ); +} + + +//----------------------------------------------------------------------------- +// Purpose : +// Input : +// Output : +//----------------------------------------------------------------------------- +void SmokeTrail::SetEmit(bool bVal) +{ + m_bEmit = bVal; +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : SmokeTrail* +//----------------------------------------------------------------------------- +SmokeTrail* SmokeTrail::CreateSmokeTrail() +{ + CBaseEntity *pEnt = CreateEntityByName(SMOKETRAIL_ENTITYNAME); + if(pEnt) + { + SmokeTrail *pSmoke = dynamic_cast<SmokeTrail*>(pEnt); + if(pSmoke) + { + pSmoke->Activate(); + return pSmoke; + } + 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 SmokeTrail::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 ); +} + + +//================================================== +// RocketTrail +//================================================== + +//Data table +IMPLEMENT_SERVERCLASS_ST(RocketTrail, DT_RocketTrail) + SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024), + SendPropVector(SENDINFO(m_StartColor), 8, 0, 0, 1), + SendPropVector(SENDINFO(m_EndColor), 8, 0, 0, 1), + SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100), + SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MinSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MaxSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_StartSize), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_EndSize), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_SpawnRadius), -1, SPROP_NOSCALE), + SendPropBool(SENDINFO(m_bEmit)), + SendPropInt(SENDINFO(m_nAttachment), 32 ), + SendPropFloat(SENDINFO(m_Opacity), -1, SPROP_NOSCALE), + SendPropInt (SENDINFO(m_bDamaged), 1, SPROP_UNSIGNED), + SendPropFloat(SENDINFO(m_flFlareScale), -1, SPROP_NOSCALE), +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS( env_rockettrail, RocketTrail ); + +BEGIN_DATADESC( RocketTrail ) + + DEFINE_FIELD( m_StartColor, FIELD_VECTOR ), + DEFINE_FIELD( m_EndColor, FIELD_VECTOR ), + DEFINE_FIELD( m_Opacity, FIELD_FLOAT ), + DEFINE_FIELD( m_SpawnRate, FIELD_FLOAT ), + DEFINE_FIELD( m_ParticleLifetime, FIELD_FLOAT ), + DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ), + DEFINE_FIELD( m_MinSpeed, FIELD_FLOAT ), + DEFINE_FIELD( m_MaxSpeed, FIELD_FLOAT ), + DEFINE_FIELD( m_StartSize, FIELD_FLOAT ), + DEFINE_FIELD( m_EndSize, FIELD_FLOAT ), + DEFINE_FIELD( m_SpawnRadius, FIELD_FLOAT ), + DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), + DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ), + DEFINE_FIELD( m_bDamaged, FIELD_BOOLEAN ), + DEFINE_FIELD( m_flFlareScale, FIELD_FLOAT ), + +END_DATADESC() + +//----------------------------------------------------------------------------- +// Purpose: +// Output : +//----------------------------------------------------------------------------- +RocketTrail::RocketTrail() +{ + m_SpawnRate = 10; + m_StartColor.GetForModify().Init(0.5, 0.5, 0.5); + m_EndColor.GetForModify().Init(0,0,0); + m_ParticleLifetime = 5; + m_StopEmitTime = 0; // Don't stop emitting particles + m_MinSpeed = 2; + m_MaxSpeed = 4; + m_StartSize = 35; + m_EndSize = 55; + m_SpawnRadius = 2; + m_bEmit = true; + m_nAttachment = 0; + m_Opacity = 0.5f; + m_flFlareScale = 1.5; +} + +//------------------------------------------------------------------------------ +// Purpose : +// Input : +// Output : +//------------------------------------------------------------------------------ +void RocketTrail::SetEmit(bool bVal) +{ + m_bEmit = bVal; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : SmokeTrail* +//----------------------------------------------------------------------------- +RocketTrail* RocketTrail::CreateRocketTrail() +{ + CBaseEntity *pEnt = CreateEntityByName( "env_rockettrail" ); + + if( pEnt != NULL ) + { + RocketTrail *pTrail = dynamic_cast<RocketTrail*>(pEnt); + + if( pTrail != NULL ) + { + 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 RocketTrail::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 ); +} + +//================================================== +// SporeTrail +//================================================== + +IMPLEMENT_SERVERCLASS_ST( SporeTrail, DT_SporeTrail ) + SendPropFloat (SENDINFO(m_flSpawnRate), 8, 0, 1, 1024), + SendPropVector (SENDINFO(m_vecEndColor), 8, 0, 0, 1), + SendPropFloat (SENDINFO(m_flParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100), + SendPropFloat (SENDINFO(m_flStartSize), -1, SPROP_NOSCALE), + SendPropFloat (SENDINFO(m_flEndSize), -1, SPROP_NOSCALE), + SendPropFloat (SENDINFO(m_flSpawnRadius), -1, SPROP_NOSCALE), + SendPropBool (SENDINFO(m_bEmit)), +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS(env_sporetrail, SporeTrail); + +BEGIN_DATADESC( SporeTrail ) + + DEFINE_FIELD( m_vecEndColor, FIELD_VECTOR ), + DEFINE_FIELD( m_flSpawnRate, FIELD_FLOAT ), + DEFINE_FIELD( m_flParticleLifetime, FIELD_FLOAT ), + DEFINE_FIELD( m_flStartSize, FIELD_FLOAT ), + DEFINE_FIELD( m_flEndSize, FIELD_FLOAT ), + DEFINE_FIELD( m_flSpawnRadius, FIELD_FLOAT ), + DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), + +END_DATADESC() + +SporeTrail::SporeTrail( void ) +{ + m_vecEndColor.GetForModify().Init(); + + m_flSpawnRate = 100.0f; + m_flParticleLifetime = 1.0f; + m_flStartSize = 1.0f; + m_flEndSize = 0.0f; + m_flSpawnRadius = 16.0f; + SetRenderColor( 255, 255, 255, 255 ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : SporeTrail* +//----------------------------------------------------------------------------- +SporeTrail* SporeTrail::CreateSporeTrail() +{ + CBaseEntity *pEnt = CreateEntityByName( SPORETRAIL_ENTITYNAME ); + + if(pEnt) + { + SporeTrail *pSpore = dynamic_cast<SporeTrail*>(pEnt); + + if ( pSpore ) + { + pSpore->Activate(); + return pSpore; + } + else + { + UTIL_Remove( pEnt ); + } + } + + return NULL; +} + +//================================================== +// SporeExplosion +//================================================== + +IMPLEMENT_SERVERCLASS_ST( SporeExplosion, DT_SporeExplosion ) + SendPropFloat (SENDINFO(m_flSpawnRate), 8, 0, 1, 1024), + SendPropFloat (SENDINFO(m_flParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100), + SendPropFloat (SENDINFO(m_flStartSize), -1, SPROP_NOSCALE), + SendPropFloat (SENDINFO(m_flEndSize), -1, SPROP_NOSCALE), + SendPropFloat (SENDINFO(m_flSpawnRadius), -1, SPROP_NOSCALE), + SendPropBool (SENDINFO(m_bEmit) ), + SendPropBool (SENDINFO(m_bDontRemove) ), +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS( env_sporeexplosion, SporeExplosion ); + +BEGIN_DATADESC( SporeExplosion ) + + DEFINE_KEYFIELD( m_flSpawnRate, FIELD_FLOAT, "spawnrate" ), + DEFINE_FIELD( m_flParticleLifetime, FIELD_FLOAT ), + DEFINE_FIELD( m_flStartSize, FIELD_FLOAT ), + DEFINE_FIELD( m_flEndSize, FIELD_FLOAT ), + DEFINE_FIELD( m_flSpawnRadius, FIELD_FLOAT ), + DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), + DEFINE_KEYFIELD( m_bDisabled, FIELD_BOOLEAN, "startdisabled" ), + DEFINE_FIELD( m_bDontRemove, FIELD_BOOLEAN ), + + DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ), + DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ), + +END_DATADESC() + +SporeExplosion::SporeExplosion( void ) +{ + m_flSpawnRate = 100.0f; + m_flParticleLifetime = 1.0f; + m_flStartSize = 1.0f; + m_flEndSize = 0.0f; + m_flSpawnRadius = 16.0f; + SetRenderColor( 255, 255, 255, 255 ); + m_bEmit = true; + m_bDisabled = false; +} + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +void SporeExplosion::Spawn( void ) +{ + BaseClass::Spawn(); + + m_bEmit = false; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : SporeExplosion* +//----------------------------------------------------------------------------- +SporeExplosion *SporeExplosion::CreateSporeExplosion() +{ + CBaseEntity *pEnt = CreateEntityByName( SPOREEXPLOSION_ENTITYNAME ); + + if ( pEnt ) + { + SporeExplosion *pSpore = dynamic_cast<SporeExplosion*>(pEnt); + + if ( pSpore ) + { + pSpore->Activate(); + return pSpore; + } + else + { + UTIL_Remove( pEnt ); + } + } + + return NULL; +} + +void SporeExplosion::InputEnable( inputdata_t &inputdata ) +{ + m_bDontRemove = true; + m_bDisabled = false; + m_bEmit = true; +} + +void SporeExplosion::InputDisable( inputdata_t &inputdata ) +{ + m_bDontRemove = true; + m_bDisabled = true; + m_bEmit = false; +} + +BEGIN_DATADESC( CFireTrail ) + + DEFINE_FIELD( m_flLifetime, FIELD_FLOAT ), + DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ), + +END_DATADESC() + +IMPLEMENT_SERVERCLASS_ST( CFireTrail, DT_FireTrail ) + SendPropInt( SENDINFO( m_nAttachment ), 32 ), + SendPropFloat( SENDINFO( m_flLifetime ), 0, SPROP_NOSCALE ), +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS( env_fire_trail, CFireTrail ); + +void CFireTrail::Precache( void ) +{ + PrecacheMaterial( "sprites/flamelet1" ); + PrecacheMaterial( "sprites/flamelet2" ); + PrecacheMaterial( "sprites/flamelet3" ); + PrecacheMaterial( "sprites/flamelet4" ); + PrecacheMaterial( "sprites/flamelet5" ); + PrecacheMaterial( "particle/particle_smokegrenade" ); + PrecacheMaterial( "particle/particle_noisesphere" ); +} + +//----------------------------------------------------------------------------- +// Purpose: Attach the smoke trail to an entity or point +// Input : index - entity that has the attachment +// attachment - point to attach to +//----------------------------------------------------------------------------- +void CFireTrail::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 ); +} + +//----------------------------------------------------------------------------- +// Purpose: Create and return a new fire trail entity +//----------------------------------------------------------------------------- +CFireTrail *CFireTrail::CreateFireTrail( void ) +{ + CBaseEntity *pEnt = CreateEntityByName( "env_fire_trail" ); + + if ( pEnt ) + { + CFireTrail *pTrail = dynamic_cast<CFireTrail*>(pEnt); + + if ( pTrail ) + { + pTrail->Activate(); + return pTrail; + } + else + { + UTIL_Remove( pEnt ); + } + } + + return NULL; +} + + +//----------------------------------------------------------------------------- +//Data table +//----------------------------------------------------------------------------- +IMPLEMENT_SERVERCLASS_ST(DustTrail, DT_DustTrail) + SendPropFloat(SENDINFO(m_SpawnRate), 8, 0, 1, 1024), + SendPropVector(SENDINFO(m_Color), 8, 0, 0, 1), + SendPropFloat(SENDINFO(m_ParticleLifetime), 16, SPROP_ROUNDUP, 0.1, 100), + SendPropFloat(SENDINFO(m_StopEmitTime), 0, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MinSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MaxSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MinDirectedSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_MaxDirectedSpeed), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_StartSize), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_EndSize), -1, SPROP_NOSCALE), + SendPropFloat(SENDINFO(m_SpawnRadius), -1, SPROP_NOSCALE), + SendPropBool(SENDINFO(m_bEmit) ), + SendPropFloat(SENDINFO(m_Opacity), -1, SPROP_NOSCALE), +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS( env_dusttrail, DustTrail); + +BEGIN_DATADESC( DustTrail ) + + DEFINE_FIELD( m_Color, FIELD_VECTOR ), + DEFINE_KEYFIELD( m_Opacity, FIELD_FLOAT, "opacity" ), + DEFINE_KEYFIELD( m_SpawnRate, FIELD_FLOAT, "spawnrate" ), + DEFINE_KEYFIELD( m_ParticleLifetime, FIELD_FLOAT, "lifetime" ), + DEFINE_FIELD( m_StopEmitTime, FIELD_TIME ), + DEFINE_KEYFIELD( m_MinSpeed, FIELD_FLOAT, "minspeed" ), + DEFINE_KEYFIELD( m_MaxSpeed, FIELD_FLOAT, "maxspeed" ), + DEFINE_KEYFIELD( m_MinDirectedSpeed, FIELD_FLOAT, "mindirectedspeed" ), + DEFINE_KEYFIELD( m_MaxDirectedSpeed, FIELD_FLOAT, "maxdirectedspeed" ), + DEFINE_KEYFIELD( m_StartSize, FIELD_FLOAT, "startsize" ), + DEFINE_KEYFIELD( m_EndSize, FIELD_FLOAT, "endsize" ), + DEFINE_KEYFIELD( m_SpawnRadius, FIELD_FLOAT, "spawnradius" ), + DEFINE_FIELD( m_bEmit, FIELD_BOOLEAN ), + DEFINE_FIELD( m_nAttachment, FIELD_INTEGER ), + +END_DATADESC() + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : +//----------------------------------------------------------------------------- +DustTrail::DustTrail() +{ + m_SpawnRate = 10; + m_Color.GetForModify().Init(0.5, 0.5, 0.5); + m_ParticleLifetime = 5; + m_StopEmitTime = 0; // Don't stop emitting particles + m_MinSpeed = 2; + m_MaxSpeed = 4; + m_MinDirectedSpeed = m_MaxDirectedSpeed = 0; + m_StartSize = 35; + m_EndSize = 55; + m_SpawnRadius = 2; + m_bEmit = true; + m_Opacity = 0.5f; +} + + +//----------------------------------------------------------------------------- +// Parse data from a map file +//----------------------------------------------------------------------------- +bool DustTrail::KeyValue( const char *szKeyName, const char *szValue ) +{ + if ( FStrEq( szKeyName, "color" ) ) + { + color32 tmp; + UTIL_StringToColor32( &tmp, szValue ); + m_Color.GetForModify().Init( tmp.r / 255.0f, tmp.g / 255.0f, tmp.b / 255.0f ); + return true; + } + + if ( FStrEq( szKeyName, "emittime" ) ) + { + m_StopEmitTime = gpGlobals->curtime + atof( szValue ); + return true; + } + + return BaseClass::KeyValue( szKeyName, szValue ); +} + + +//----------------------------------------------------------------------------- +// Purpose : +// Input : +// Output : +//----------------------------------------------------------------------------- +void DustTrail::SetEmit(bool bVal) +{ + m_bEmit = bVal; +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : DustTrail* +//----------------------------------------------------------------------------- +DustTrail* DustTrail::CreateDustTrail() +{ + CBaseEntity *pEnt = CreateEntityByName(DUSTTRAIL_ENTITYNAME); + if(pEnt) + { + DustTrail *pDust = dynamic_cast<DustTrail*>(pEnt); + if(pDust) + { + pDust->Activate(); + return pDust; + } + else + { + UTIL_Remove(pEnt); + } + } + + return NULL; +} |