Skip to content

Commit d49d7b1

Browse files
committed
Particle Emitter Manager looks after all emitters bound to it
1 parent 4ac80bd commit d49d7b1

3 files changed

Lines changed: 126 additions & 0 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
var Class = require('../../utils/Class');
2+
var Components = require('../components');
3+
var GameObject = require('../GameObject');
4+
var ParticleEmitter = require('./ParticleEmitter');
5+
var Render = require('./ParticleManagerRender');
6+
7+
var ParticleEmitterManager = new Class({
8+
9+
Extends: GameObject,
10+
11+
Mixins: [
12+
Components.Texture,
13+
Components.Visible,
14+
Render
15+
],
16+
17+
initialize:
18+
19+
function ParticleEmitterManager (scene, texture, frame, emitters)
20+
{
21+
GameObject.call(this, scene, 'ParticleEmitterManager');
22+
23+
// private
24+
this.blendMode = -1;
25+
26+
this.setTexture(texture, frame);
27+
28+
this.emitters = [];
29+
30+
if (emitters !== undefined)
31+
{
32+
// An array of emitter configs?
33+
if (!Array.isArray(emitters))
34+
{
35+
emitters = [ emitters ];
36+
}
37+
38+
for (var i = 0; i < emitters.length; i++)
39+
{
40+
this.createEmitter(emitters[i]);
41+
}
42+
}
43+
},
44+
45+
addEmitter: function (emitter)
46+
{
47+
this.emitters.push(emitter);
48+
49+
return emitter;
50+
},
51+
52+
createEmitter: function (config)
53+
{
54+
return this.addEmitter(new ParticleEmitter(this, config));
55+
},
56+
57+
pause: function ()
58+
{
59+
this.active = false;
60+
61+
return this;
62+
},
63+
64+
resume: function ()
65+
{
66+
this.active = true;
67+
68+
return this;
69+
},
70+
71+
preUpdate: function (time, delta)
72+
{
73+
var emitters = this.emitters;
74+
75+
for (var i = 0; i < emitters.length; i++)
76+
{
77+
var emitter = emitters[i];
78+
79+
if (emitter.active)
80+
{
81+
emitter.preUpdate(time, delta);
82+
}
83+
}
84+
}
85+
86+
});
87+
88+
module.exports = ParticleEmitterManager;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var BuildGameObject = require('../BuildGameObject');
2+
var GameObjectCreator = require('../../scene/plugins/GameObjectCreator');
3+
var GetAdvancedValue = require('../../utils/object/GetAdvancedValue');
4+
var ParticleEmitter = require('./ParticleEmitter');
5+
6+
// When registering a factory function 'this' refers to the GameObjectCreator context.
7+
8+
GameObjectCreator.register('particles', function (config)
9+
{
10+
var key = GetAdvancedValue(config, 'key', null);
11+
var frame = GetAdvancedValue(config, 'frame', null);
12+
13+
var emitter = new ParticleEmitter(this.scene, 0, 0, key, frame);
14+
15+
BuildGameObject(this.scene, emitter, config);
16+
17+
return emitter;
18+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var ParticleEmitterManager = require('./ParticleEmitterManager');
2+
var GameObjectFactory = require('../../scene/plugins/GameObjectFactory');
3+
4+
// When registering a factory function 'this' refers to the GameObjectFactory context.
5+
//
6+
// There are several properties available to use:
7+
//
8+
// this.scene - a reference to the Scene that owns the GameObjectFactory
9+
// this.displayList - a reference to the Display List the Scene owns
10+
// this.updateList - a reference to the Update List the Scene owns
11+
12+
GameObjectFactory.register('particles', function (key, frame, emitters)
13+
{
14+
var manager = new ParticleEmitterManager(this.scene, key, frame, emitters);
15+
16+
this.displayList.add(manager);
17+
this.updateList.add(manager);
18+
19+
return manager;
20+
});

0 commit comments

Comments
 (0)