You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
1.7 KiB

  1. define([
  2. 'particles',
  3. 'js/rendering/particleDefaults',
  4. 'js/rendering/shaders/outline'
  5. ], function (
  6. pixiParticles,
  7. particleDefaults,
  8. shaderOutline
  9. ) {
  10. return {
  11. renderer: null,
  12. stage: null,
  13. emitters: [],
  14. lastTick: null,
  15. init: function (options) {
  16. this.r = options.r;
  17. this.renderer = options.renderer;
  18. this.stage = options.stage;
  19. this.lastTick = Date.now();
  20. },
  21. buildEmitter: function (config) {
  22. let obj = config.obj;
  23. delete config.obj;
  24. let options = $.extend(true, {}, particleDefaults, config);
  25. let emitter = new PIXI.particles.Emitter(this.stage, ['images/particles.png'], options);
  26. emitter.obj = obj;
  27. emitter.emit = true;
  28. emitter.particleEngine = this;
  29. this.emitters.push(emitter);
  30. return emitter;
  31. },
  32. destroyEmitter: function (emitter) {
  33. emitter.emit = false;
  34. },
  35. update: function () {
  36. let renderer = this.r;
  37. let now = Date.now();
  38. let emitters = this.emitters;
  39. let eLen = emitters.length;
  40. for (let i = 0; i < eLen; i++) {
  41. let e = emitters[i];
  42. let visible = null;
  43. let destroy = (
  44. (!e.emit) &&
  45. (e.obj.destroyed)
  46. );
  47. if (destroy) {
  48. if (e.particleCount > 0) {
  49. visible = renderer.isVisible(e.spawnPos.x, e.spawnPos.y);
  50. if (visible)
  51. destroy = false;
  52. }
  53. }
  54. if (destroy) {
  55. emitters.splice(i, 1);
  56. e.destroy();
  57. e = null;
  58. i--;
  59. eLen--;
  60. continue;
  61. }
  62. if (visible === null)
  63. visible = renderer.isVisible(e.spawnPos.x, e.spawnPos.y);
  64. if (!visible)
  65. continue;
  66. let r = e.update((now - this.lastTick) * 0.001);
  67. r.forEach(function (rr) {
  68. if (e.blendMode === 'overlay')
  69. rr.pluginName = 'picture';
  70. }, this);
  71. }
  72. this.lastTick = now;
  73. }
  74. };
  75. });