Skip to content

Commit

Permalink
Merge pull request #38 from themoonrat/autoUpdate
Browse files Browse the repository at this point in the history
Allow an emitter to automatically update via the PIXI shared ticker
  • Loading branch information
andrewstart authored Jan 13, 2017
2 parents 6a4db8d + 40b4801 commit 8a4d0c6
Showing 1 changed file with 39 additions and 1 deletion.
40 changes: 39 additions & 1 deletion src/Emitter.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

var ParticleUtils = PIXI.particles.ParticleUtils,
Particle = PIXI.particles.Particle,
ParticleContainer = PIXI.particles.ParticleContainer || PIXI.ParticleContainer;
ParticleContainer = PIXI.particles.ParticleContainer || PIXI.ParticleContainer,
ticker = PIXI.ticker.shared;

/**
* A particle emitter.
Expand All @@ -22,6 +23,8 @@
* @param {Object} [config] A configuration object containing settings for the emitter.
* @param {Boolean} [config.emit=true] If config.emit is explicitly passed as false, the Emitter
* will start disabled.
* @param {Boolean} [config.autoUpdate=false] If config.emit is explicitly passed as true, the Emitter
* will automatically call update via the PIXI shared ticker.
*/
var Emitter = function(particleParent, particleImages, config)
{
Expand Down Expand Up @@ -363,6 +366,13 @@
* @private
*/
this._origArt = null;
/**
* If the update function is called automatically from the shared ticker.
* Setting this to false requires calling the update function manually.
* @property {Boolean} _autoUpdate
* @private
*/
this._autoUpdate = false;

//set the initial parent
this.parent = particleParent;
Expand Down Expand Up @@ -638,6 +648,7 @@
//start emitting
this._spawnTimer = 0;
this.emit = config.emit === undefined ? true : !!config.emit;
this.autoUpdate = config.autoUpdate === undefined ? false : !!config.autoUpdate;
};

/**
Expand Down Expand Up @@ -744,13 +755,40 @@
}
});

/**
* If the update function is called automatically from the shared ticker.
* Setting this to false requires calling the update function manually.
* @property {Boolean} autoUpdate
*/
Object.defineProperty(p, "autoUpdate",
{
get: function() { return this._autoUpdate; },
set: function(value)
{
if (this._autoUpdate && !value)
{
ticker.remove(this.update, this);
}
else if (!this._autoUpdate && value)
{
ticker.add(this.update, this);
}
this._autoUpdate = !!value;
}
});

/**
* Updates all particles spawned by this emitter and emits new ones.
* @method update
* @param {Number} delta Time elapsed since the previous frame, in __seconds__.
*/
p.update = function(delta)
{
if (this._autoUpdate)
{
delta = delta / ticker.speed / PIXI.settings.TARGET_FPMS / 1000;
}

//if we don't have a parent to add particles to, then don't do anything.
//this also works as a isDestroyed check
if (!this._parent) return;
Expand Down

0 comments on commit 8a4d0c6

Please sign in to comment.