Skip to content

Commit 4ac80bd

Browse files
committed
New Particle Manager renderer functions
1 parent 66fc408 commit 4ac80bd

3 files changed

Lines changed: 98 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
var GameObject = require('../GameObject');
2+
3+
var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpolationPercentage, camera)
4+
{
5+
var emitters = emitterManager.emitters;
6+
7+
if (emitters.length === 0 || GameObject.RENDER_MASK !== emitterManager.renderFlags || (emitterManager.cameraFilter > 0 && (emitterManager.cameraFilter & camera._id)))
8+
{
9+
return;
10+
}
11+
12+
for (var i = 0; i < emitters.length; i++)
13+
{
14+
var emitter = emitters[i];
15+
16+
var particles = emitter.alive;
17+
var length = particles.length;
18+
var ctx = renderer.currentContext;
19+
20+
// TODO: Move into the ctx loop below as it's now Particle specific
21+
var frame = emitter.frame;
22+
var dx = frame.x;
23+
var dy = frame.y;
24+
var width = frame.width;
25+
var height = frame.height;
26+
var ox = width * 0.5;
27+
var oy = height * 0.5;
28+
29+
var lastAlpha = ctx.globalAlpha;
30+
var cd = frame.canvasData;
31+
var cameraScrollX = camera.scrollX * emitter.scrollFactorX;
32+
var cameraScrollY = camera.scrollY * emitter.scrollFactorY;
33+
34+
if (renderer.currentBlendMode !== emitter.blendMode)
35+
{
36+
renderer.currentBlendMode = emitter.blendMode;
37+
ctx.globalCompositeOperation = renderer.blendModes[emitter.blendMode];
38+
}
39+
40+
for (var index = 0; index < length; ++index)
41+
{
42+
var particle = particles[index];
43+
var x = -ox;
44+
var y = -oy;
45+
var alpha = ((particle.color >> 24) & 0xFF) / 255.0;
46+
47+
ctx.globalAlpha = alpha;
48+
49+
ctx.save();
50+
ctx.translate(particle.x - cameraScrollX * particle.scrollFactorX, particle.y - cameraScrollY * particle.scrollFactorY);
51+
ctx.rotate(particle.rotation);
52+
ctx.scale(particle.scaleX, particle.scaleY);
53+
ctx.drawImage(frame.source.image, cd.sx, cd.sy, cd.sWidth, cd.sHeight, x, y, cd.dWidth, cd.dHeight);
54+
ctx.restore();
55+
}
56+
57+
ctx.globalAlpha = lastAlpha;
58+
}
59+
};
60+
61+
module.exports = ParticleManagerCanvasRenderer;
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('./ParticleManagerWebGLRenderer');
7+
}
8+
9+
if (CANVAS_RENDERER)
10+
{
11+
renderCanvas = require('./ParticleManagerCanvasRenderer');
12+
}
13+
14+
module.exports = {
15+
16+
renderWebGL: renderWebGL,
17+
renderCanvas: renderCanvas
18+
19+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var GameObject = require('../GameObject');
2+
3+
var ParticleManagerWebGLRenderer = function (renderer, emitterManager, interpolationPercentage, camera)
4+
{
5+
var emitters = emitterManager.emitters;
6+
7+
if (emitters.length === 0 || GameObject.RENDER_MASK !== emitterManager.renderFlags || (emitterManager.cameraFilter > 0 && (emitterManager.cameraFilter & camera._id)))
8+
{
9+
return;
10+
}
11+
12+
for (var i = 0; i < emitters.length; i++)
13+
{
14+
renderer.particleRenderer.renderEmitter(emitters[i], camera);
15+
}
16+
};
17+
18+
module.exports = ParticleManagerWebGLRenderer;

0 commit comments

Comments
 (0)