# Class cocos.particle.ParticleSystem

    cocosnode.CocosNode --+
                          |
                         ParticleSystem

Known Subclasses:
  particle_systems.Explosion, particle_systems.Fire, particle_systems.Fireworks, particle_systems.Flower, particle_systems.Galaxy, particle_systems.Meteor, particle_systems.Smoke, particle_systems.Spiral, particle_systems.Sun

Base class for many flawors of cocos particle systems

The most easy way to customize is subclass and redefine some class members; see particle_systems by example.

If you want to use a custom texture remember it should hold only one image, so don't use texture = pyglet.resource.image(...) (it would produce an atlas, ie multiple images in a texture); using texture = pyglet.image.load(...) is fine

This implementation uses openGL PointSprites, which some systems dont support.

## Methods

| __init__(self)
| on_enter(self) Called every time just before the node enters the stage.
| draw(self) This is the function you will have to override if you want your subclassed to draw something on screen.
| step(self, delta)
| add_particle(self) be sure there is room for the particle or be prepared to catch the exception ExceptionNoEmptyParticle It is acceptable to try: ...
| stop_system(self)
| reset_system(self)
| update_particles(self, delta)
| init_particle(self)
| __contains__(self, child) (Inherited from cocos.cocosnode.CocosNode)
CocosNode instance | add(self, child, z=0, name=None) Adds a child and if it becomes part of the active scene calls its on_enter method (Inherited from cocos.cocosnode.CocosNode)
| are_actions_running(self) Determine whether any actions are running. (Inherited from cocos.cocosnode.CocosNode)
Action instance | do(self, action, target=None) Executes an action. (Inherited from cocos.cocosnode.CocosNode)
CocosNode | get(self, name) Gets a child given its name (Inherited from cocos.cocosnode.CocosNode)
CocosNode or None | get_ancestor(self, klass) Walks the nodes tree upwards until it finds a node of the class `klass` or returns None (Inherited from cocos.cocosnode.CocosNode)
list of CocosNode | get_children(self) Return a list with the node's childs, order is back to front (Inherited from cocos.cocosnode.CocosNode)
euclid.Matrix3 | get_local_inverse(self) returns an euclid.Matrix3 with the local inverse transformation matrix (Inherited from cocos.cocosnode.CocosNode)
euclid.Matrix3 | get_local_transform(self) returns an euclid.Matrix3 with the local transformation matrix (Inherited from cocos.cocosnode.CocosNode)
euclid.Matrix3 | get_world_inverse(self) returns an euclid.Matrix3 with the world inverse transformation matrix (Inherited from cocos.cocosnode.CocosNode)
euclid.Matrix3 | get_world_transform(self) returns an euclid.Matrix3 with the world transformation matrix (Inherited from cocos.cocosnode.CocosNode)
| kill(self) Remove this object from its parent, and thus most likely from everything. (Inherited from cocos.cocosnode.CocosNode)
| on_exit(self) Called every time just before the node leaves the stage (Inherited from cocos.cocosnode.CocosNode)
| pause(self) Suspends the execution of actions. (Inherited from cocos.cocosnode.CocosNode)
| pause_scheduler(self) Time will stop passing for this node: scheduled callbacks will not be called, worker actions will not be called (Inherited from cocos.cocosnode.CocosNode)
euclid.Vector2 | point_to_local(self, p) returns an euclid.Vector2 converted to local space (Inherited from cocos.cocosnode.CocosNode)
euclid.Vector2 | point_to_world(self, p) returns an euclid.Vector2 converted to world space (Inherited from cocos.cocosnode.CocosNode)
| remove(self, obj) Removes a child given its name or object (Inherited from cocos.cocosnode.CocosNode)
| remove_action(self, action) Removes an action from the node actions container, potentially calling action.stop() (Inherited from cocos.cocosnode.CocosNode)
| resume(self) Resumes the execution of actions. (Inherited from cocos.cocosnode.CocosNode)
| resume_scheduler(self) Time will continue/start passing for this node and callbacks will be called, worker actions will be called (Inherited from cocos.cocosnode.CocosNode)
| schedule(self, callback, *args, **kwargs) Schedule a function to be called every frame. (Inherited from cocos.cocosnode.CocosNode)
| schedule_interval(self, callback, interval, *args, **kwargs) Schedule a function to be called every `interval` seconds. (Inherited from cocos.cocosnode.CocosNode)
| stop(self) Removes all actions from the running action list (Inherited from cocos.cocosnode.CocosNode)
| transform(self) Apply ModelView transformations (Inherited from cocos.cocosnode.CocosNode)
| unschedule(self, callback) Remove a function from the schedule. (Inherited from cocos.cocosnode.CocosNode)
| visit(self) This function visits it's children in a recursive way. (Inherited from cocos.cocosnode.CocosNode)
list | walk(self, callback, collect=None) Executes callback on all the subtree starting at self. (Inherited from cocos.cocosnode.CocosNode)

## Properties

(int,int) | anchor Anchor point of the object. (Inherited from cocos.cocosnode.CocosNode)
(int,int) | anchor_x Anchor x value for transformations and adding children (Inherited from cocos.cocosnode.CocosNode)
(int,int) | anchor_y Anchor y value for transformations and adding children (Inherited from cocos.cocosnode.CocosNode)
object | parent The parent of this object. (Inherited from cocos.cocosnode.CocosNode)
(int, int) | position The (x, y) coordinates of the object. (Inherited from cocos.cocosnode.CocosNode)
| rotation (Inherited from cocos.cocosnode.CocosNode)
| scale (Inherited from cocos.cocosnode.CocosNode)
(int,int) | transform_anchor Transformation anchor point. (Inherited from cocos.cocosnode.CocosNode)
| x The x coordinate of the object (Inherited from cocos.cocosnode.CocosNode)
| y The y coordinate of the object (Inherited from cocos.cocosnode.CocosNode)

## Instance Variables

| emit_counter How many particles can be emitted per second
| particle_count Count of particles
| auto_remove_on_finish auto remove when particle finishes
| actions list of Action objects that are running (Inherited from cocos.cocosnode.CocosNode)
| camera eye, center and up vector for the Camera. (Inherited from cocos.cocosnode.CocosNode)
| children list of (int, child-reference) where int is the z-order, sorted by ascending z (back to front order) (Inherited from cocos.cocosnode.CocosNode)
| children_names dictionary that maps children names with children references (Inherited from cocos.cocosnode.CocosNode)
| grid the grid object for the grid actions. (Inherited from cocos.cocosnode.CocosNode)
| is_running whether of not the object is running (Inherited from cocos.cocosnode.CocosNode)
| scheduled_calls list of scheduled callbacks (Inherited from cocos.cocosnode.CocosNode)
| scheduled_interval_calls list of scheduled interval callbacks (Inherited from cocos.cocosnode.CocosNode)
| skip_frame whether or not the next frame will be skipped (Inherited from cocos.cocosnode.CocosNode)
| to_remove list of Action objects to be removed (Inherited from cocos.cocosnode.CocosNode)
| transform_anchor_x offset from (x,0) from where rotation and scale will be applied. (Inherited from cocos.cocosnode.CocosNode)
| transform_anchor_y offset from (0,y) from where rotation and scale will be applied. (Inherited from cocos.cocosnode.CocosNode)
| visible whether of not the object is visible. (Inherited from cocos.cocosnode.CocosNode)

## Class Variables

| active = `True` is the particle system active ?
| duration = `0` duration in seconds of the system.
| elapsed = `0` time elapsed since the start of the system (in seconds)
| gravity = `Point2(0.00, 0.00)` Gravity of the particles
| pos_var = `Point2(0.00, 0.00)` position is from "superclass" CocosNode Position variance
| angle = `0.0` The angle (direction) of the particles measured in degrees
| angle_var = `0.0` Angle variance measured in degrees;
| speed = `0.0` The speed the particles will have.
| speed_var = `0.0` The speed variance
| tangential_accel = `0.0` Tangential acceleration
| tangential_accel_var = `0.0` Tangential acceleration variance
| radial_accel = `0.0` Radial acceleration
| radial_accel_var = `0.0` Radial acceleration variance
| size = `0.0` Size of the particles
| size_var = `0.0` Size variance
| life = `0` How many seconds will the particle live
| life_var = `0` Life variance
| start_color = `Color(0.0, 0.0, 0.0, 0.0)` Start color of the particles
| start_color_var = `Color(0.0, 0.0, 0.0, 0.0)` Start color variance
| end_color = `Color(0.0, 0.0, 0.0, 0.0)` End color of the particles
| end_color_var = `Color(0.0, 0.0, 0.0, 0.0)` End color variance
| total_particles = `0` Maximum particles
| ppath = `ppath [:-1]+ ['resources', 'fire.png']`
| fname = `os.path.join(* ppath)`
| pic = `image.load(fname)`
| texture = `<TextureRegion 128x128>` texture for the particles
| blend_additive = `False` blend additive
| color_modulate = `True` color modulate
| position_type = `1`

## Constants

| POSITION_FREE = `0`
| POSITION_GROUPED = `1`

## Method Details

### __init__

(Constructor) __init__(self)

Overrides:
  cocosnode.CocosNode.__init__

### on_enter

on_enter(self)

Called every time just before the node enters the stage.

scheduled calls and worker actions begins or continues to perform

Good point to do .push_handlers if you have custom ones Rule: a handler pushed there is near certain to require a .pop_handlers in the .on_exit method (else it will be called even after removed from the active scene, or, if going on stage again will be called multiple times for each event ocurrence)

Overrides:
  cocosnode.CocosNode.on_enter

### draw

draw(self)

This is the function you will have to override if you want your subclassed to draw something on screen.

You must respect the position, scale, rotation and anchor attributes. If you want OpenGL to do the scaling for you, you can:

    def draw(self):
        glPushMatrix()
        self.transform()
        # ... draw ..
        glPopMatrix()

Overrides:
  cocosnode.CocosNode.draw

### add_particle

add_particle(self)

Code calling add_particle must be either:
  be sure there is room for the particle or be prepared to catch the exception ExceptionNoEmptyParticle It is acceptable to try: ... except...: pass

## Class Variable Details

### duration

duration in seconds of the system. -1 is infinity

Value:

      0