|
- define([
- 'particles',
- 'js/rendering/particleDefaults',
- 'js/rendering/shaders/outline'
- ], function (
- pixiParticles,
- particleDefaults,
- shaderOutline
- ) {
- return {
- renderer: null,
- stage: null,
-
- emitters: [],
-
- lastTick: null,
-
- init: function (options) {
- this.r = options.r;
- this.renderer = options.renderer;
- this.stage = options.stage;
- this.lastTick = Date.now();
- },
-
- buildEmitter: function (config) {
- let obj = config.obj;
- delete config.obj;
-
- let options = $.extend(true, {}, particleDefaults, config);
-
- 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);
-
- return emitter;
- },
-
- destroyEmitter: function (emitter) {
- emitter.emit = false;
- },
-
- update: function () {
- let renderer = this.r;
- let now = Date.now();
-
- let emitters = this.emitters;
- let eLen = emitters.length;
- for (let i = 0; i < eLen; i++) {
- let e = emitters[i];
-
- let visible = null;
- let destroy = (
- (!e.emit) &&
- (e.obj.destroyed)
- );
-
- if (destroy) {
- if (e.particleCount > 0) {
- visible = renderer.isVisible(e.spawnPos.x, e.spawnPos.y);
- if (visible)
- destroy = false;
- }
- }
-
- if (destroy) {
- emitters.splice(i, 1);
- e.destroy();
- e = null;
-
- i--;
- eLen--;
- continue;
- }
-
- if (visible === null)
- visible = renderer.isVisible(e.spawnPos.x, e.spawnPos.y);
- if (!visible)
- continue;
-
- let r = e.update((now - this.lastTick) * 0.001);
- r.forEach(function (rr) {
- if (e.blendMode === 'overlay')
- rr.pluginName = 'picture';
- }, this);
- }
-
- this.lastTick = now;
- }
- };
- });
|