From 9a2fd779f56ea880a38ad7de65cfa4e671e48163 Mon Sep 17 00:00:00 2001 From: Shaun Date: Sat, 18 Sep 2021 14:01:20 +0200 Subject: [PATCH] feat #1836 --- src/client/js/rendering/particles.js | 3 ++- src/client/js/rendering/renderer.js | 31 +++++++++++++++++++++------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/client/js/rendering/particles.js b/src/client/js/rendering/particles.js index 3c931217..4cf7b076 100644 --- a/src/client/js/rendering/particles.js +++ b/src/client/js/rendering/particles.js @@ -28,9 +28,10 @@ define([ let options = $.extend(true, {}, particleDefaults, config); - let emitter = new PIXI.particles.Emitter(this.r.layers.particles, ['images/particles.png'], options); + let emitter = new PIXI.particles.Emitter(this.stage, ['images/particles.png'], options); emitter.obj = obj; emitter.emit = true; + emitter.particleEngine = this; this.emitters.push(emitter); diff --git a/src/client/js/rendering/renderer.js b/src/client/js/rendering/renderer.js index 69f2782d..c8ef3486 100644 --- a/src/client/js/rendering/renderer.js +++ b/src/client/js/rendering/renderer.js @@ -21,11 +21,15 @@ define([ globals, renderLoginBackground ) { - let mRandom = Math.random.bind(Math); + const mRandom = Math.random.bind(Math); + + const particleLayers = ['particlesUnder', 'particles']; + const particleEngines = {}; return { stage: null, layers: { + particlesUnder: null, objects: null, mobs: null, characters: null, @@ -115,10 +119,15 @@ define([ this.textures[t].scaleMode = PIXI.SCALE_MODES.NEAREST; }); - particles.init({ - r: this, - renderer: this.renderer, - stage: this.layers.particles + particleLayers.forEach(p => { + const engine = $.extend({}, particles); + engine.init({ + r: this, + renderer: this.renderer, + stage: this.layers[p] + }); + + particleEngines[p] = engine; }); this.buildSpritesTexture(); @@ -769,11 +778,16 @@ define([ }, buildEmitter: function (config) { - return particles.buildEmitter(config); + const { layerName = 'particles' } = config; + const particleEngine = particleEngines[layerName]; + + return particleEngine.buildEmitter(config); }, destroyEmitter: function (emitter) { - particles.destroyEmitter(emitter); + const particleEngine = emitter.particleEngine; + + particleEngine.destroyEmitter(emitter); }, setSprite: function (obj) { @@ -887,7 +901,8 @@ define([ return; effects.render(); - particles.update(); + + particleLayers.forEach(p => particleEngines[p].update()); this.renderer.render(this.stage); }