CrystalSpace

Public API Reference

csParticleSystem Class Reference
[Common Plugin Classes]

This class represents a particle system. More...

#include <csplugincommon/particlesys/partgen.h>

Inheritance diagram for csParticleSystem:

Inheritance graph
[legend]

List of all members.

Public Member Functions

virtual void AddColor (const csColor &col)
 Add particle colors, convenience function.
void AppendParticle (iMeshObject *mesh, iParticle *part, iSprite2DState *spr2d)
 Add a new particle, increases num_particles. Do a DecRef yourself.
void AppendRectSprite (float width, float height, iMaterialWrapper *mat, bool lighted)
 Add an rectangle shaped sprite2d particle.
void AppendRegularSprite (int n, float radius, iMaterialWrapper *mat, bool lighted)
 Add a sprite2d n-gon with material, and given radius.
virtual void BuildDecal (const csVector3 *pos, float decalRadius, iDecalBuilder *decalBuilder)
 see imesh/object.h for specification.
virtual csPtr
< iMeshObject
Clone ()
 Creates a copy of this object and returns the clone.
 csParticleSystem (iObjectRegistry *object_reg, iMeshObjectFactory *factory)
 Make a new system.
float GetAlpha () const
 Get the probable alpha of the particles.
const csBox3GetBoundingBox () const
 Get the bounding box for this particle system.
bool GetChangeAlpha (float &factor) const
 see if change alpha is enabled, and get the value if so.
bool GetChangeColor (csColor &col) const
 see if change color is enabled, and get a copy if so.
bool GetChangeRotation (float &angle) const
 see if change rotation is enabled, and get the angle if so.
bool GetChangeSize (float &factor) const
 see if change size is enabled, and get the value if so.
virtual bool GetColor (csColor &col) const
 Get the base color of the mesh.
virtual
iMeshObjectFactory
GetFactory () const
 Get the reference to the factory that created this mesh object.
virtual csFlagsGetFlags ()
 Get flags for this object.
virtual
iMaterialWrapper
GetMaterialWrapper () const
 Get the material of the mesh.
virtual iMeshWrapperGetMeshWrapper () const
 Get the logical parent for this mesh object.
virtual uint GetMixMode () const
 Get mix mode.
size_t GetNumParticles () const
 How many particles the system currently has.
virtual const csBox3GetObjectBoundingBox ()
 Get the bounding box in object space for this mesh object.
virtual void GetObjectBoundingBox (csBox3 &bbox)
 Get the bounding box in object space for this mesh object.
virtual iObjectModelGetObjectModel ()
 Get the generic interface describing the geometry of this mesh.
iParticleGetParticle (size_t idx) const
 Get a particle.
size_t GetParticleCount () const
 Get the number of particles.
virtual void GetRadius (float &rad, csVector3 &cent)
 Get the radius and center of this object in object space.
virtual csRenderMesh ** GetRenderMeshes (int &n, iRenderView *rview, iMovable *movable, uint32 frustum_mask)
 Returns the set of render meshes.
bool GetSelfDestruct () const
 returns whether the system will self destruct
virtual iTerraFormerGetTerraFormerColldet ()
 Get a terra former representing the geometry of the object.
virtual iTerrainSystemGetTerrainColldet ()
 Get a terrain representing the geometry of the object.
csTicks GetTimeToLive () const
 if the system will self destruct, returns the time to live in msec.
virtual
iMeshObjectDrawCallback
GetVisibleCallback () const
 Get the current visible callback.
virtual int HitBeamBBox (const csVector3 &, const csVector3 &, csVector3 &, float *)
virtual bool HitBeamObject (const csVector3 &start, const csVector3 &end, csVector3 &isect, float *pr, int *polygon_idx=0, iMaterialWrapper **material=0)
 Check if this mesh is hit by this object space vector.
virtual bool HitBeamOutline (const csVector3 &, const csVector3 &, csVector3 &, float *)
 Check if this mesh is hit by this object space vector.
virtual void InvalidateMaterialHandles ()
 Material changed.
virtual void NextFrame (csTicks current_time, const csVector3 &, uint)
 Control animation of this object.
virtual void PositionChild (iMeshObject *, csTicks)
 see imesh/object.h for specification.
void RemoveParticles ()
 Remove all particles.
virtual void Rotate (float angle)
 Rotate all particles.
virtual void ScaleBy (float factor)
 Scale all particles.
void SetAlpha (float alpha)
 Set the alpha of particles.
void SetChangeAlpha (float factor)
 Change alpha of all particles, by factor per second.
void SetChangeColor (const csColor &col)
 Change color of all particles, by col per second.
void SetChangeRotation (float angle)
 Change rotation of all particles, by angle in radians per second.
void SetChangeSize (float factor)
 Change size of all particles, by factor per second.
virtual bool SetColor (const csColor &col)
 Set the base color of the mesh.
virtual bool SetMaterialWrapper (iMaterialWrapper *mat)
 Set the material of the mesh.
virtual void SetMeshWrapper (iMeshWrapper *lp)
 Set a reference to the mesh wrapper holding the mesh objects.
virtual void SetMixMode (uint mode)
 Set mix mode. Note that not all meshes may support this.
virtual void SetObjectBoundingBox (const csBox3 &bbox)
 Override the bounding box of this mesh object in object space.
virtual void SetParticleCount (size_t num)
 Set the number of particles to use.
void SetSelfDestruct (csTicks t)
 Set selfdestruct mode on, and msec to live.
virtual void SetupColor ()
 Set particle colors, convenience function.
virtual void SetupMixMode ()
 Set particle mixmodes, convenience function.
virtual void SetVisibleCallback (iMeshObjectDrawCallback *cb)
 Register a callback to the mesh object which will be called from within Draw() if the mesh object thinks that the object is really visible.
void UnsetChangeAlpha ()
 Stop change of alpha.
void UnsetChangeColor ()
 Stop change of color.
void UnsetChangeRotation ()
 Stop change of rotation.
void UnsetChangeSize ()
 Stop change of size.
void UnSetSelfDestruct ()
 system will no longer self destruct
virtual void Update (csTicks elapsed_time)
 Update the state of the particles as time has passed.
virtual ~csParticleSystem ()
 Destroy particle system, and all particles.

Protected Member Functions

void ChangeObject ()
csVector3 GetRandomDirection (csVector3 const &magnitude, csVector3 const &offset)
 Return vector with -1..+1 members. Varying length.
csVector3 GetRandomDirection ()
 Return vector with -1..+1 members. Varying length.
csVector3 GetRandomPosition (csBox3 const &box)
 Return vector with random position within box.
void SetupBuffers (size_t part_sides)
 Setup the buffers for the particles.
virtual void SetupObject ()
 Setup this object.

Protected Attributes

float alpha_now
float alphapersecond
float anglepersecond
csBox3 bbox
 bounding box in 3d of all particles in this system.
bool change_alpha
 Alpha change.
bool change_color
 Color change.
bool change_rotation
 Rotate particles, angle in radians.
bool change_size
 Size change.
csColor color
 Color of all particles.
csColor colorpersecond
uint32 current_features
float current_lod
iEngineengine
iMeshObjectFactoryfactory
csFlags flags
csRef< iGraphics3Dg3d
csRef< iRenderBufferindex_buffer
bool initialized
csRef< iLightManagerlight_mgr
iMeshWrapperlogparent
csRef< iMaterialWrappermat
 Material for all particles.
uint MixMode
 MixMode for all particles.
size_t number
iObjectRegistryobject_reg
csVector3part_pos
 particle position
size_t part_sides
csRefArray< iParticleparticles
csRefArray< iMeshObjectpartmeshes
 iParticle ptrs to the particles.
csFrameDataHolder
< PerFrameData
perFrameHolder
csTicks prev_time
 Previous time.
float radius
 Object space radius.
csRenderMeshHolder rmHolder
float scalepersecond
bool self_destruct
 Self destruct and when.
csRef
< iMeshObjectFactory
spr_factory
 Pointer to a mesh object factory for 2D sprites.
csRefArray
< iSprite2DState
sprite2ds
csTicks time_to_live
size_t TriangleCount
size_t VertexCount
csRef
< iMeshObjectDrawCallback
vis_cb

Classes

struct  PerFrameData


Detailed Description

This class represents a particle system.

It is a set of iParticles. Subclasses of this class may be of more interest to users. More specialised particle systems can be found below.

Definition at line 63 of file partgen.h.


Constructor & Destructor Documentation

csParticleSystem::csParticleSystem ( iObjectRegistry object_reg,
iMeshObjectFactory factory 
)

Make a new system.

Also adds the particle system to the list of the current engine.

virtual csParticleSystem::~csParticleSystem (  )  [virtual]

Destroy particle system, and all particles.


Member Function Documentation

virtual void csParticleSystem::AddColor ( const csColor col  )  [virtual]

Add particle colors, convenience function.

void csParticleSystem::AppendParticle ( iMeshObject mesh,
iParticle part,
iSprite2DState spr2d 
) [inline]

Add a new particle, increases num_particles. Do a DecRef yourself.

Definition at line 193 of file partgen.h.

void csParticleSystem::AppendRectSprite ( float  width,
float  height,
iMaterialWrapper mat,
bool  lighted 
)

Add an rectangle shaped sprite2d particle.

Pass along half w and h. adds sprite to engine list.

void csParticleSystem::AppendRegularSprite ( int  n,
float  radius,
iMaterialWrapper mat,
bool  lighted 
)

Add a sprite2d n-gon with material, and given radius.

adds sprite to engine list.

virtual void csParticleSystem::BuildDecal ( const csVector3 pos,
float  decalRadius,
iDecalBuilder decalBuilder 
) [inline, virtual]

see imesh/object.h for specification.

The default implementation does nothing.

Implements iMeshObject.

Definition at line 392 of file partgen.h.

virtual csPtr<iMeshObject> csParticleSystem::Clone (  )  [inline, virtual]

Creates a copy of this object and returns the clone.

Implements iMeshObject.

Definition at line 313 of file partgen.h.

float csParticleSystem::GetAlpha (  )  const [inline, virtual]

Get the probable alpha of the particles.

Implements iParticleState.

Definition at line 247 of file partgen.h.

const csBox3& csParticleSystem::GetBoundingBox (  )  const [inline]

Get the bounding box for this particle system.

Definition at line 267 of file partgen.h.

bool csParticleSystem::GetChangeAlpha ( float &  factor  )  const [inline, virtual]

see if change alpha is enabled, and get the value if so.

Implements iParticleState.

Definition at line 254 of file partgen.h.

bool csParticleSystem::GetChangeColor ( csColor col  )  const [inline, virtual]

see if change color is enabled, and get a copy if so.

Implements iParticleState.

Definition at line 231 of file partgen.h.

bool csParticleSystem::GetChangeRotation ( float &  angle  )  const [inline, virtual]

see if change rotation is enabled, and get the angle if so.

Implements iParticleState.

Definition at line 263 of file partgen.h.

bool csParticleSystem::GetChangeSize ( float &  factor  )  const [inline, virtual]

see if change size is enabled, and get the value if so.

Implements iParticleState.

Definition at line 240 of file partgen.h.

virtual bool csParticleSystem::GetColor ( csColor color  )  const [inline, virtual]

Get the base color of the mesh.

Will return false if not supported.

Implements iMeshObject.

Definition at line 360 of file partgen.h.

virtual iMeshObjectFactory* csParticleSystem::GetFactory (  )  const [inline, virtual]

Get the reference to the factory that created this mesh object.

Implements iMeshObject.

Definition at line 311 of file partgen.h.

virtual csFlags& csParticleSystem::GetFlags (  )  [inline, virtual]

Get flags for this object.

The following flags are at least supported:

Mesh objects may implement additional flags. These mesh object specific flags must be equal to at least 0x00010000.

Implements iMeshObject.

Definition at line 312 of file partgen.h.

virtual iMaterialWrapper* csParticleSystem::GetMaterialWrapper (  )  const [inline, virtual]

Get the material of the mesh.

If not supported this will return 0.

Implements iMeshObject.

Definition at line 371 of file partgen.h.

virtual iMeshWrapper* csParticleSystem::GetMeshWrapper (  )  const [inline, virtual]

Get the logical parent for this mesh object.

See SetMeshWrapper() for more information.

Implements iMeshObject.

Definition at line 350 of file partgen.h.

virtual uint csParticleSystem::GetMixMode (  )  const [inline, virtual]

Get mix mode.

Implements iMeshObject.

Definition at line 380 of file partgen.h.

size_t csParticleSystem::GetNumParticles (  )  const [inline]

How many particles the system currently has.

Definition at line 185 of file partgen.h.

virtual const csBox3& csParticleSystem::GetObjectBoundingBox (  )  [inline, virtual]

Get the bounding box in object space for this mesh object.

Implements iObjectModel.

Definition at line 293 of file partgen.h.

virtual void csParticleSystem::GetObjectBoundingBox ( csBox3 bbox  )  [inline, virtual]

Get the bounding box in object space for this mesh object.

Deprecated:
Use GetObjectBoundingBox() (without parameters) instead.

Implements iObjectModel.

Definition at line 288 of file partgen.h.

References bbox.

virtual iObjectModel* csParticleSystem::GetObjectModel (  )  [inline, virtual]

Get the generic interface describing the geometry of this mesh.

If the factory supports this you should preferably use the object model from the factory instead.

Implements iMeshObject.

Definition at line 353 of file partgen.h.

iParticle* csParticleSystem::GetParticle ( size_t  idx  )  const [inline]

Get a particle.

Definition at line 187 of file partgen.h.

size_t csParticleSystem::GetParticleCount (  )  const [inline]

Get the number of particles.

Definition at line 179 of file partgen.h.

virtual void csParticleSystem::GetRadius ( float &  radius,
csVector3 center 
) [inline, virtual]

Get the radius and center of this object in object space.

Implements iObjectModel.

Definition at line 303 of file partgen.h.

csVector3 csParticleSystem::GetRandomDirection ( csVector3 const &  magnitude,
csVector3 const &  offset 
) [protected]

Return vector with -1..+1 members. Varying length.

csVector3 csParticleSystem::GetRandomDirection (  )  [protected]

Return vector with -1..+1 members. Varying length.

csVector3 csParticleSystem::GetRandomPosition ( csBox3 const &  box  )  [protected]

Return vector with random position within box.

virtual csRenderMesh** csParticleSystem::GetRenderMeshes ( int &  num,
iRenderView rview,
iMovable movable,
uint32  frustum_mask 
) [virtual]

Returns the set of render meshes.

The frustum_mask is given by the culler and contains a mask with all relevant planes for the given object. These planes correspond with the clip planes kept by iRenderView.

Implements iMeshObject.

bool csParticleSystem::GetSelfDestruct (  )  const [inline]

returns whether the system will self destruct

Definition at line 221 of file partgen.h.

virtual iTerraFormer* csParticleSystem::GetTerraFormerColldet (  )  [inline, virtual]

Get a terra former representing the geometry of the object.

This class is useful for collision detection. Can return 0 if this object model doesn't support that.

Reimplemented from csObjectModel.

Definition at line 372 of file partgen.h.

virtual iTerrainSystem* csParticleSystem::GetTerrainColldet (  )  [inline, virtual]

Get a terrain representing the geometry of the object.

This class is useful for collision detection. Can return 0 if this object model doesn't support that.

Reimplemented from csObjectModel.

Definition at line 373 of file partgen.h.

csTicks csParticleSystem::GetTimeToLive (  )  const [inline]

if the system will self destruct, returns the time to live in msec.

Definition at line 223 of file partgen.h.

virtual iMeshObjectDrawCallback* csParticleSystem::GetVisibleCallback (  )  const [inline, virtual]

Get the current visible callback.

Implements iMeshObject.

Definition at line 322 of file partgen.h.

virtual bool csParticleSystem::HitBeamObject ( const csVector3 start,
const csVector3 end,
csVector3 isect,
float *  pr,
int *  polygon_idx = 0,
iMaterialWrapper **  material = 0 
) [inline, virtual]

Check if this mesh is hit by this object space vector.

Return the collision point in object space coordinates. This is the most detailed version (and also the slowest). The returned hit will be guaranteed to be the point closest to the 'start' of the beam. If the object supports this then an index of the hit polygon will be returned (or -1 if not supported or no hit).

Parameters:
start Start of the beam to trace.
end End of the beam to trace.
isect Returns the point of the hit.
pr Returns the position of the hit as a value between 0 and 1, where 0 means start and 1 means end.
polygon_idx Index of the polygon hit on the mesh (or -1 if not supported).
material If not 0 then the hit material will be put here. Or 0 in case this mesh object doesn't support material selection.

Implements iMeshObject.

Definition at line 341 of file partgen.h.

virtual bool csParticleSystem::HitBeamOutline ( const csVector3 start,
const csVector3 end,
csVector3 isect,
float *  pr 
) [inline, virtual]

Check if this mesh is hit by this object space vector.

This will do a test based on the outline of the object. This means that it is more accurate than HitBeamBBox(). Note that this routine will typically be faster than HitBeamObject(). The hit may be on the front or the back of the object, but will indicate that it iterrupts the beam.

Implements iMeshObject.

Definition at line 338 of file partgen.h.

virtual void csParticleSystem::InvalidateMaterialHandles (  )  [inline, virtual]

Material changed.

This is an 'event' that the engine (or another party managing materials) will send out as soon as the material handles are changed in some way which requires the mesh object to fetch it again (i.e. to call materialwrapper->GetMaterialHandle()) again.

Implements iMeshObject.

Definition at line 381 of file partgen.h.

virtual void csParticleSystem::NextFrame ( csTicks  current_time,
const csVector3 pos,
uint  currentFrame 
) [inline, virtual]

Control animation of this object.

Implements iMeshObject.

Definition at line 326 of file partgen.h.

virtual void csParticleSystem::PositionChild ( iMeshObject ,
csTicks   
) [inline, virtual]

see imesh/object.h for specification.

The default implementation does nothing.

Implements iMeshObject.

Definition at line 386 of file partgen.h.

void csParticleSystem::RemoveParticles (  ) 

Remove all particles.

virtual void csParticleSystem::Rotate ( float  angle  )  [virtual]

Rotate all particles.

virtual void csParticleSystem::ScaleBy ( float  factor  )  [virtual]

Scale all particles.

void csParticleSystem::SetAlpha ( float  alpha  )  [inline, virtual]

Set the alpha of particles.

Implements iParticleState.

Definition at line 244 of file partgen.h.

References CS_FX_SETALPHA.

void csParticleSystem::SetChangeAlpha ( float  factor  )  [inline, virtual]

Change alpha of all particles, by factor per second.

Implements iParticleState.

Definition at line 249 of file partgen.h.

void csParticleSystem::SetChangeColor ( const csColor col  )  [inline, virtual]

Change color of all particles, by col per second.

Implements iParticleState.

Definition at line 226 of file partgen.h.

void csParticleSystem::SetChangeRotation ( float  angle  )  [inline, virtual]

Change rotation of all particles, by angle in radians per second.

Implements iParticleState.

Definition at line 258 of file partgen.h.

void csParticleSystem::SetChangeSize ( float  factor  )  [inline, virtual]

Change size of all particles, by factor per second.

Implements iParticleState.

Definition at line 235 of file partgen.h.

virtual bool csParticleSystem::SetColor ( const csColor color  )  [inline, virtual]

Set the base color of the mesh.

This color will be added to whatever color is set for lighting. Not all meshes need to support this. This function will return true if it worked.

Implements iMeshObject.

Definition at line 354 of file partgen.h.

virtual bool csParticleSystem::SetMaterialWrapper ( iMaterialWrapper material  )  [inline, virtual]

Set the material of the mesh.

This only works for single-material meshes. If not supported this function will return false.

Implements iMeshObject.

Definition at line 365 of file partgen.h.

References mat.

virtual void csParticleSystem::SetMeshWrapper ( iMeshWrapper logparent  )  [inline, virtual]

Set a reference to the mesh wrapper holding the mesh objects.

Note that this function should NOT increase the ref-count of the given logical parent because this would cause a circular reference (since the logical parent already holds a reference to this mesh object).

Implements iMeshObject.

Definition at line 349 of file partgen.h.

virtual void csParticleSystem::SetMixMode ( uint  mode  )  [inline, virtual]

Set mix mode. Note that not all meshes may support this.

Implements iMeshObject.

Definition at line 375 of file partgen.h.

virtual void csParticleSystem::SetObjectBoundingBox ( const csBox3 bbox  )  [inline, virtual]

Override the bounding box of this mesh object in object space.

Note that some mesh objects don't have a bounding box on their own and may delegate this call to their factory (like genmesh).

Implements iObjectModel.

Definition at line 298 of file partgen.h.

References bbox.

virtual void csParticleSystem::SetParticleCount ( size_t  num  )  [inline, virtual]

Set the number of particles to use.

Definition at line 173 of file partgen.h.

void csParticleSystem::SetSelfDestruct ( csTicks  t  )  [inline, virtual]

Set selfdestruct mode on, and msec to live.

Implements iParticleState.

Definition at line 216 of file partgen.h.

void csParticleSystem::SetupBuffers ( size_t  part_sides  )  [protected]

Setup the buffers for the particles.

virtual void csParticleSystem::SetupColor (  )  [virtual]

Set particle colors, convenience function.

virtual void csParticleSystem::SetupMixMode (  )  [virtual]

Set particle mixmodes, convenience function.

virtual void csParticleSystem::SetupObject (  )  [protected, virtual]

Setup this object.

virtual void csParticleSystem::SetVisibleCallback ( iMeshObjectDrawCallback cb  )  [inline, virtual]

Register a callback to the mesh object which will be called from within Draw() if the mesh object thinks that the object is really visible.

Depending on the type of mesh object this can be very accurate or not accurate at all. But in all cases it will certainly be called if the object is visible.

Implements iMeshObject.

Definition at line 318 of file partgen.h.

void csParticleSystem::UnsetChangeAlpha (  )  [inline, virtual]

Stop change of alpha.

Implements iParticleState.

Definition at line 252 of file partgen.h.

void csParticleSystem::UnsetChangeColor (  )  [inline, virtual]

Stop change of color.

Implements iParticleState.

Definition at line 229 of file partgen.h.

void csParticleSystem::UnsetChangeRotation (  )  [inline, virtual]

Stop change of rotation.

Implements iParticleState.

Definition at line 261 of file partgen.h.

void csParticleSystem::UnsetChangeSize (  )  [inline, virtual]

Stop change of size.

Implements iParticleState.

Definition at line 238 of file partgen.h.

void csParticleSystem::UnSetSelfDestruct (  )  [inline, virtual]

system will no longer self destruct

Implements iParticleState.

Definition at line 219 of file partgen.h.

virtual void csParticleSystem::Update ( csTicks  elapsed_time  )  [virtual]

Update the state of the particles as time has passed.

i.e. move the particles, retexture, recolor ... this member function will set to_delete if self_destruct is enabled and time is up.

Reimplemented in csNewtonianParticleSystem.


Member Data Documentation

bounding box in 3d of all particles in this system.

the particle system subclass has to give this a reasonable value. no particle may exceed the bbox.

Definition at line 101 of file partgen.h.

Referenced by GetObjectBoundingBox(), and SetObjectBoundingBox().

Alpha change.

Definition at line 93 of file partgen.h.

Color change.

Definition at line 89 of file partgen.h.

Rotate particles, angle in radians.

Definition at line 95 of file partgen.h.

Size change.

Definition at line 91 of file partgen.h.

Color of all particles.

Definition at line 83 of file partgen.h.

Material for all particles.

Definition at line 85 of file partgen.h.

Referenced by SetMaterialWrapper().

MixMode for all particles.

Definition at line 87 of file partgen.h.

particle position

Definition at line 116 of file partgen.h.

iParticle ptrs to the particles.

Definition at line 76 of file partgen.h.

Previous time.

Definition at line 107 of file partgen.h.

float csParticleSystem::radius [protected]

Object space radius.

Definition at line 74 of file partgen.h.

Self destruct and when.

Definition at line 80 of file partgen.h.

Pointer to a mesh object factory for 2D sprites.

Definition at line 105 of file partgen.h.


The documentation for this class was generated from the following file:
Generated for Crystal Space 1.2.1 by doxygen 1.5.3