Skip to content

Commit 58c9970

Browse files
committed
ParticleEmitter base
1 parent 83d985b commit 58c9970

8 files changed

Lines changed: 192 additions & 0 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var Class = require('../../utils/Class');
2+
3+
var Particle = new Class({
4+
5+
initialize:
6+
7+
function Particle ()
8+
{
9+
this.x = 0.0;
10+
this.y = 0.0;
11+
this.gravityX = 0.0;
12+
this.gravityY = 0.0;
13+
this.velocityX = 0.0;
14+
this.velocityY = 0.0;
15+
}
16+
17+
});
18+
19+
module.exports = Particle;
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
2+
var Class = require('../../utils/Class');
3+
var Components = require('../components');
4+
var GameObject = require('../GameObject');
5+
var Render = require('./ParticleEmitterRender');
6+
var Particle = require('./Particle');
7+
8+
var ParticleEmitter = new Class({
9+
10+
Extends: GameObject,
11+
12+
Mixins: [
13+
Components.Alpha,
14+
Components.BlendMode,
15+
Components.Origin,
16+
Components.RenderTarget,
17+
Components.ScrollFactor,
18+
Components.Texture,
19+
Components.Transform,
20+
Components.Visible,
21+
Render
22+
],
23+
24+
initialize:
25+
26+
function ParticleEmitter (scene, x, y, texture, frame)
27+
{
28+
29+
GameObject.call(this, scene, 'ParticleEmitter');
30+
31+
this.dead = [];
32+
this.alive = [];
33+
this.deadQueue = [];
34+
this.setTexture(texture, frame);
35+
this.setPosition(x, y);
36+
this.setSizeToFrame();
37+
this.setOrigin();
38+
},
39+
40+
reserve: function (particleCount)
41+
{
42+
var dead = this.dead;
43+
for (var count = 0; particleCount; ++count)
44+
{
45+
dead.push(new Particle());
46+
}
47+
},
48+
49+
getAliveParticleCount: function ()
50+
{
51+
return this.alive.length;
52+
},
53+
54+
getDeadParticleCount: function ()
55+
{
56+
return this.dead.length;
57+
},
58+
59+
getParticleCount: function ()
60+
{
61+
return this.getAliveParticleCount() + this.getDeadParticleCount();
62+
},
63+
64+
killAll: function ()
65+
{
66+
var dead = this.dead;
67+
var alive = this.alive;
68+
69+
while (alive.length > 0)
70+
{
71+
dead.push(alive.pop());
72+
}
73+
},
74+
75+
forEachAlive: function (callback, thisArg)
76+
{
77+
var alive = this.alive;
78+
var length = alive.length;
79+
80+
for (var index = 0; index < length; ++index)
81+
{
82+
callback.call(thisArg, alive[index]);
83+
}
84+
},
85+
86+
forEachDead: function (callback, thisArg)
87+
{
88+
var dead = this.dead;
89+
var length = dead.length;
90+
91+
for (var index = 0; index < length; ++index)
92+
{
93+
callback.call(thisArg, dead[index]);
94+
}
95+
},
96+
97+
update: function (delta)
98+
{
99+
/* Simulation */
100+
}
101+
102+
});
103+
104+
module.exports = ParticleEmitter;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var ParticleEmitterCanvasRenderer = function (renderer, src, interpolationPercentage, camera)
2+
{
3+
4+
};
5+
6+
module.exports = ParticleEmitterCanvasRenderer;
7+
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('emitter', 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: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var ParticleEmitter = require('./ParticleEmitter');
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('emitter', function (x, y, key, frame)
13+
{
14+
return this.displayList.add(new ParticleEmitter(this.scene, x, y, key, frame));
15+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var renderWebGL = require('../../utils/NOOP');
2+
var renderCanvas = require('../../utils/NOOP');
3+
4+
if (WEBGL_RENDERER)
5+
{
6+
renderWebGL = require('./ParticleEmitterWebGLRenderer');
7+
}
8+
9+
if (CANVAS_RENDERER)
10+
{
11+
renderCanvas = require('./ParticleEmitterCanvasRenderer');
12+
}
13+
14+
module.exports = {
15+
16+
renderWebGL: renderWebGL,
17+
renderCanvas: renderCanvas
18+
19+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var ParticleEmitterWebGLRenderer = function (renderer, emitter, interpolationPercentage, camera)
2+
{
3+
4+
};
5+
6+
module.exports = ParticleEmitterWebGLRenderer;
7+

v3/src/gameobjects/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var GameObjects = {
1111
Group: require('./group/Group'),
1212
Image: require('./image/Image'),
1313
ObjectPool: require('./pool/ObjectPool.js'),
14+
ParticleEmitter: require('./emitter/ParticleEmitter'),
1415
Sprite: require('./sprite/Sprite'),
1516
StaticTilemap: require('./tilemap/static/StaticTilemap'),
1617
Text: require('./text/static/Text'),
@@ -27,6 +28,7 @@ var GameObjects = {
2728
Graphics: require('./graphics/GraphicsFactory'),
2829
Group: require('./group/GroupFactory'),
2930
Image: require('./image/ImageFactory'),
31+
ParticleEmitter: require('./emitter/ParticleEmitterFactory'),
3032
Sprite: require('./sprite/SpriteFactory'),
3133
StaticBitmapText: require('./bitmaptext/static/BitmapTextFactory'),
3234
StaticTilemap: require('./tilemap/static/StaticTilemapFactory'),
@@ -42,6 +44,7 @@ var GameObjects = {
4244
Graphics: require('./graphics/GraphicsCreator'),
4345
Group: require('./group/GroupCreator'),
4446
Image: require('./image/ImageCreator'),
47+
ParticleEmitter: require('./emitter/ParticleEmitterCreator'),
4548
Sprite: require('./sprite/SpriteCreator'),
4649
StaticBitmapText: require('./bitmaptext/static/BitmapTextCreator'),
4750
StaticTilemap: require('./tilemap/static/StaticTilemapCreator'),

0 commit comments

Comments
 (0)