# ParticleSystem

#### new Cesium.ParticleSystem(options)
Scene/ParticleSystem.js 58

A ParticleSystem manages the updating and display of a collection of particles.

Name | Type | Description
--- | --- | ---

`options`

Object

optional Object with the following properties:

Name | Type | Default | Description
--- | --- | --- | ---
`show` | Boolean | `true` | optional Whether to display the particle system.
`updateCallback` | ParticleSystem.updateCallback |  | optional The callback function to be called each frame to update a particle.
`emitter` | ParticleEmitter | `new CircleEmitter(0.5)` | optional The particle emitter for this system.
`modelMatrix` | Matrix4 | `Matrix4.IDENTITY` | optional The 4x4 transformation matrix that transforms the particle system from model to world coordinates.
`emitterModelMatrix` | Matrix4 | `Matrix4.IDENTITY` | optional The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system.
`emissionRate` | Number | `5` | optional The number of particles to emit per second.
`bursts` | Array.<ParticleBurst> |  | optional An array of `ParticleBurst`, emitting bursts of particles at periodic times.
`loop` | Boolean | `true` | optional Whether the particle system should loop its bursts when it is complete.
`scale` | Number | `1.0` | optional Sets the scale to apply to the image of the particle for the duration of its particleLife.
`startScale` | Number |  | optional The initial scale to apply to the image of the particle at the beginning of its life.
`endScale` | Number |  | optional The final scale to apply to the image of the particle at the end of its life.
`color` | Color | `Color.WHITE` | optional Sets the color of a particle for the duration of its particleLife.
`startColor` | Color |  | optional The color of the particle at the beginning of its life.
`endColor` | Color |  | optional The color of the particle at the end of its life.
`image` | Object |  | optional The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.
`imageSize` | Cartesian2 | `new Cartesian2(1.0, 1.0)` | optional If set, overrides the minimumImageSize and maximumImageSize inputs that scale the particle image's dimensions in pixels.
`minimumImageSize` | Cartesian2 |  | optional Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels.
`maximumImageSize` | Cartesian2 |  | optional Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels.
`sizeInMeters` | Boolean |  | optional Sets if the size of particles is in meters or pixels. `true` to size the particles in meters; otherwise, the size is in pixels.
`speed` | Number | `1.0` | optional If set, overrides the minimumSpeed and maximumSpeed inputs with this value.
`minimumSpeed` | Number |  | optional Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen.
`maximumSpeed` | Number |  | optional Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen.
`lifetime` | Number | `Number.MAX_VALUE` | optional How long the particle system will emit particles, in seconds.
`particleLife` | Number | `5.0` | optional If set, overrides the minimumParticleLife and maximumParticleLife inputs with this value.
`minimumParticleLife` | Number |  | optional Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen.
`maximumParticleLife` | Number |  | optional Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen.
`mass` | Number | `1.0` | optional Sets the minimum and maximum mass of particles in kilograms.
`minimumMass` | Number |  | optional Sets the minimum bound for the mass of a particle in kilograms. A particle's actual mass will be chosen as a random amount above this value.
`maximumMass` | Number |  | optional Sets the maximum mass of particles in kilograms. A particle's actual mass will be chosen as a random amount below this value.

##### Demo:

- Particle Systems Tutorial
- Particle Systems Tutorial Demo
- Particle Systems Fireworks Demo

### Members

#### bursts : Array.<ParticleBurst>
Scene/ParticleSystem.js 209

An array of `ParticleBurst`, emitting bursts of particles at periodic times.

Default Value: `undefined`

#### complete : Event
Scene/ParticleSystem.js 522

Fires an event when the particle system has reached the end of its lifetime.

#### emissionRate : Number
Scene/ParticleSystem.js 330

The number of particles to emit per second.

Default Value: `5`

#### emitter : ParticleEmitter
Scene/ParticleSystem.js 192

The particle emitter for this

Default Value: `CircleEmitter`

#### emitterModelMatrix : Matrix4
Scene/ParticleSystem.js 243

The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system.

Default Value: `Matrix4.IDENTITY`

#### endColor : Color
Scene/ParticleSystem.js 279

The color of the particle at the end of its life.

Default Value: `Color.WHITE`

#### endScale : Number
Scene/ParticleSystem.js 313

The final scale to apply to the image of the particle at the end of its life.

Default Value: `1.0`

#### image : Object
Scene/ParticleSystem.js 87

The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.

Default Value: `undefined`

#### isComplete : Boolean
Scene/ParticleSystem.js 532

When `true`, the particle system has reached the end of its lifetime; `false` otherwise.

#### lifetime : Number
Scene/ParticleSystem.js 506

How long the particle system will emit particles, in seconds.

Default Value: `Number.MAX_VALUE`

#### loop : Boolean
Scene/ParticleSystem.js 80

Whether the particle system should loop it's bursts when it is complete.

Default Value: `true`

#### maximumImageSize : Cartesian2
Scene/ParticleSystem.js 470

Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels.

Default Value: `new Cartesian2(1.0, 1.0)`

#### maximumMass : Number
Scene/ParticleSystem.js 434

Sets the maximum mass of particles in kilograms.

Default Value: `1.0`

#### maximumParticleLife : Number
Scene/ParticleSystem.js 399

Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen.

Default Value: `5.0`

#### maximumSpeed : Number
Scene/ParticleSystem.js 365

Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen.

Default Value: `1.0`

#### minimumImageSize : Cartesian2
Scene/ParticleSystem.js 451

Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels.

Default Value: `new Cartesian2(1.0, 1.0)`

#### minimumMass : Number
Scene/ParticleSystem.js 417

Sets the minimum mass of particles in kilograms.

Default Value: `1.0`

#### minimumParticleLife : Number
Scene/ParticleSystem.js 382

Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen.

Default Value: `5.0`

#### minimumSpeed : Number
Scene/ParticleSystem.js 348

Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen.

Default Value: `1.0`

#### modelMatrix : Matrix4
Scene/ParticleSystem.js 224

The 4x4 transformation matrix that transforms the particle system from model to world coordinates.

Default Value: `Matrix4.IDENTITY`

#### show : Boolean
Scene/ParticleSystem.js 66

Whether to display the particle system.

Default Value: `true`

#### sizeInMeters : Boolean
Scene/ParticleSystem.js 489

Gets or sets if the particle size is in meters or pixels. `true` to size particles in meters; otherwise, the size is in pixels.

Default Value: `false`

#### startColor : Color
Scene/ParticleSystem.js 262

The color of the particle at the beginning of its life.

Default Value: `Color.WHITE`

#### startScale : Number
Scene/ParticleSystem.js 296

The initial scale to apply to the image of the particle at the beginning of its life.

Default Value: `1.0`

#### updateCallback : ParticleSystem.updateCallback
Scene/ParticleSystem.js 73

An array of force callbacks. The callback is passed a `Particle` and the difference from the last time

Default Value: `undefined`

### Methods

#### destroy()
Scene/ParticleSystem.js 887

Destroys the WebGL resources held by this object. Destroying an object allows for deterministic release of WebGL resources, instead of relying on the garbage collector to destroy this object.
Once an object is destroyed, it should not be used; calling any function other than `isDestroyed` will result in a `DeveloperError` exception. Therefore, assign the return value (`undefined`) to the object as done in the example.

##### Throws:

- DeveloperError : This object was destroyed, i.e., destroy() was called.

##### See:

- ParticleSystem#isDestroyed

#### isDestroyed() → Boolean
Scene/ParticleSystem.js 871

Returns true if this object was destroyed; otherwise, false.
If this object was destroyed, it should not be used; calling any function other than `isDestroyed` will result in a `DeveloperError` exception.

##### Returns:

`true` if this object was destroyed; otherwise, `false`.

##### See:

- ParticleSystem#destroy

### Type Definitions

#### Cesium.ParticleSystem.updateCallback(particle, dt)
Scene/ParticleSystem.js 893

A function used to modify attributes of the particle at each time step. This can include force modifications, color, sizing, etc.

Name | Type | Description
--- | --- | ---
`particle` | Particle | The particle being updated.
`dt` | Number | The time in seconds since the last update.

##### Example:

    function applyGravity(particle, dt) {
       var position = particle.position;
       var gravityVector = Cesium.Cartesian3.normalize(position, new Cesium.Cartesian3());
       Cesium.Cartesian3.multiplyByScalar(gravityVector, GRAVITATIONAL_CONSTANT * dt, gravityVector);
       particle.velocity = Cesium.Cartesian3.add(particle.velocity, gravityVector, particle.velocity);
    }