Particles In Code: Difference between revisions
Jump to navigation
Jump to search
Tip:You can stop all systems tied to a given entity with
Bug:Valve's code for dispatching a particle attached to a model is broken. Get the fix here. [todo tested in ?]
TomEdwards (talk | contribs) (→SDK Bug: to bug template, made link internal) |
TomEdwards (talk | contribs) (direct dispatching) |
||
Line 1: | Line 1: | ||
{{toc-right}} | |||
== Precaching == | |||
Particle effects must be [[precache]]d before they can be used. This is done by listing them in <code>[[particles_manifest.txt]]</code>, then making this call: | |||
<source lang=cpp>PrecacheParticleSystem( "your_particle_effect_name" );</source> | <source lang=cpp>PrecacheParticleSystem( "your_particle_effect_name" );</source> | ||
== Dispatching | == Dispatching == | ||
Particles systems are "dispatched" on the client. | |||
< | {{tip|You can stop all systems tied to a given entity with <code>StopParticleEffects( CBaseEntity* pEntity )</code>. But you cannot otherwise control the lifespan of a system from code. It will self-terminate on its own internal schedule.}} | ||
=== Simple === | |||
<source lang=cpp> | <source lang=cpp> | ||
#include "particle_parse.h" | |||
void DispatchParticleEffect( const char *pszParticleName, Vector vecOrigin, QAngle vecAngles, CBaseEntity *pEntity ) | |||
void DispatchParticleEffect( const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity, | |||
int iAttachmentPoint, bool bResetAllParticlesOnEntity )</source> | |||
The first function creates the system at some arbitrary world co-ordinates. The second spawns it at an [[attachment]]. | |||
{{bug|Valve's code for dispatching a particle attached to a model is broken. [[SDK Known Issues List Fixed#Server Dispatching an Attached Particle Effect|Get the fix here.]]}} | {{bug|Valve's code for dispatching a particle attached to a model is broken. [[SDK Known Issues List Fixed#Server Dispatching an Attached Particle Effect|Get the fix here.]]}} | ||
=== Complex === | |||
If you need to control the system after it spawns, the helper functions above won't do. Instead: | |||
<source lang=cpp> | |||
#include "particles_new.h" | |||
CNewParticleEffect* pEffect = ParticleProp()->Create( "rail_shot", PATTACH_ABSORIGIN ); | |||
pEffect->SetControlPoint( 1, vecSomeVector ); | |||
</source> | |||
See also <code>[[CNewParticleEffect]]</code>. | |||
[[Category: Particle System]] | [[Category: Particle System]] |
Revision as of 15:48, 20 October 2009
Precaching
Particle effects must be precached before they can be used. This is done by listing them in particles_manifest.txt
, then making this call:
PrecacheParticleSystem( "your_particle_effect_name" );
Dispatching
Particles systems are "dispatched" on the client.

StopParticleEffects( CBaseEntity* pEntity )
. But you cannot otherwise control the lifespan of a system from code. It will self-terminate on its own internal schedule.Simple
#include "particle_parse.h"
void DispatchParticleEffect( const char *pszParticleName, Vector vecOrigin, QAngle vecAngles, CBaseEntity *pEntity )
void DispatchParticleEffect( const char *pszParticleName, ParticleAttachment_t iAttachType, CBaseEntity *pEntity,
int iAttachmentPoint, bool bResetAllParticlesOnEntity )
The first function creates the system at some arbitrary world co-ordinates. The second spawns it at an attachment.

Complex
If you need to control the system after it spawns, the helper functions above won't do. Instead:
#include "particles_new.h"
CNewParticleEffect* pEffect = ParticleProp()->Create( "rail_shot", PATTACH_ABSORIGIN );
pEffect->SetControlPoint( 1, vecSomeVector );
See also CNewParticleEffect
.