Particles In Code

From Valve Developer Community
Revision as of 04:39, 21 October 2009 by TomEdwards (talk | contribs)
Jump to navigation Jump to search

Precaching

Particle systems must be precached before they can be used. This is done by listing the PCF containing them in particles_manifest.txt, then making this call:

PrecacheParticleSystem( "your_particle_effect_name" );

Dispatching

Particles systems are "dispatched" on the client. They are always associated with an entity.

Tip.pngTip:You can stop all systems tied to a given entity with StopParticleEffects( CBaseEntity* pEntity ). But you cannot otherwise directly control the lifespan of a system: it will choose when it terminates.

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 enables you to spawn it at an attachment point and/or make it follow the entity.

Icon-Bug.pngBug:Valve's code for dispatching a particle attached to a model is broken. Get the fix here.  [todo tested in ?]

Values for ParticleAttachment_t are:

PATTACH_ABSORIGIN
PATTACH_ABSORIGIN_FOLLOW
Spawn at (and optionally follow) the entity's origin.
PATTACH_POINT
PATTACH_POINT_FOLLOW
Spawn at (and optionally follow) an attachment point on the entity's model.
PATTACH_CUSTOMORIGIN
Spawn at a given origin.
PATTACH_WORLDORIGIN
Don't attach to an entity. Use with caution.

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.