Emitter follower now has offset and visibility tracking.

This commit is contained in:
Richard Davey 2017-10-20 14:13:48 +01:00
parent 892319bdb5
commit 6180feea8e

View file

@ -1,7 +1,6 @@
var BlendModes = require('../../renderer/BlendModes'); var BlendModes = require('../../renderer/BlendModes');
var Class = require('../../utils/Class'); var Class = require('../../utils/Class');
var Components = require('../components'); var Components = require('../components');
var Easing = require('../../math/easing');
var GetEaseFunction = require('../../tweens/builder/GetEaseFunction'); var GetEaseFunction = require('../../tweens/builder/GetEaseFunction');
var GetRandomElement = require('../../utils/array/GetRandomElement'); var GetRandomElement = require('../../utils/array/GetRandomElement');
var GetValue = require('../../utils/object/GetValue'); var GetValue = require('../../utils/object/GetValue');
@ -9,6 +8,7 @@ var MinMax2 = require('../../math/MinMax2');
var MinMax4 = require('../../math/MinMax4'); var MinMax4 = require('../../math/MinMax4');
var Particle = require('./Particle'); var Particle = require('./Particle');
var StableSort = require('../../utils/array/StableSort'); var StableSort = require('../../utils/array/StableSort');
var Vector2 = require('../../math/Vector2');
var ParticleEmitter = new Class({ var ParticleEmitter = new Class({
@ -26,7 +26,7 @@ var ParticleEmitter = new Class({
this.manager = manager; this.manager = manager;
this.key = GetValue(config, 'key', ''); this.name = GetValue(config, 'name', '');
this.particleClass = GetValue(config, 'particleClass', Particle); this.particleClass = GetValue(config, 'particleClass', Particle);
@ -97,7 +97,9 @@ var ParticleEmitter = new Class({
this.easingFunctionScale = GetValue(config, 'scaleEase', GetEaseFunction('Linear')); this.easingFunctionScale = GetValue(config, 'scaleEase', GetEaseFunction('Linear'));
this.easingFunctionRotation = GetValue(config, 'rotationEase', GetEaseFunction('Linear')); this.easingFunctionRotation = GetValue(config, 'rotationEase', GetEaseFunction('Linear'));
this._follow = GetValue(config, 'follow', null);; this.follow = GetValue(config, 'follow', null);
this.followOffset = new Vector2(GetValue(config, 'followOffset', 0));
this.trackVisible = GetValue(config, 'trackVisible', false);
var frame = GetValue(config, 'frame', null); var frame = GetValue(config, 'frame', null);
@ -107,16 +109,24 @@ var ParticleEmitter = new Class({
} }
}, },
startFollow: function (gameObjectOrPoint) startFollow: function (target, offsetX, offsetY, trackVisible)
{ {
this._follow = gameObjectOrPoint; if (offsetX === undefined) { offsetX = 0; }
if (offsetY === undefined) { offsetY = 0; }
if (trackVisible === undefined) { trackVisible = false; }
this.follow = target;
this.followOffset.set(offsetX, offsetY);
this.trackVisible = trackVisible;
return this; return this;
}, },
stopFollow: function () stopFollow: function ()
{ {
this._follow = null; this.follow = null;
this.followOffset.set(0, 0);
this.trackVisible = false;
return this; return this;
}, },
@ -422,7 +432,7 @@ var ParticleEmitter = new Class({
emit: function (count, x, y) emit: function (count, x, y)
{ {
if (count === undefined) { count = 1; } if (count === undefined) { count = this.quantity; }
var output = []; var output = [];
@ -493,10 +503,15 @@ var ParticleEmitter = new Class({
var step = (delta / 1000); var step = (delta / 1000);
if (this._follow) if (this.follow)
{ {
this.x = this._follow.x; this.x = this.follow.x + this.followOffset.x;
this.y = this._follow.y; this.y = this.follow.y + this.followOffset.y;
if (this.trackVisible)
{
this.visible = this.follow.visible;
}
} }
var particles = this.alive; var particles = this.alive;
@ -550,7 +565,7 @@ var ParticleEmitter = new Class({
if (this.frequency === 0) if (this.frequency === 0)
{ {
this.emit(this.quantity); this.emit();
} }
else if (this.frequency > 0) else if (this.frequency > 0)
{ {
@ -558,7 +573,7 @@ var ParticleEmitter = new Class({
if (this._counter <= 0) if (this._counter <= 0)
{ {
this.emit(this.quantity); this.emit();
// counter = frequency - remained from previous delta // counter = frequency - remained from previous delta
this._counter = (this.frequency - Math.abs(this._counter)); this._counter = (this.frequency - Math.abs(this._counter));