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.
 
 
 

97 lines
1.7 KiB

  1. define([
  2. 'js/rendering/effects',
  3. 'js/rendering/renderer'
  4. ], function (
  5. effects,
  6. renderer
  7. ) {
  8. let scale = 40;
  9. return {
  10. type: 'light',
  11. lightCd: 0,
  12. lightO: {},
  13. emitters: {},
  14. range: 3,
  15. init: function (blueprint) {
  16. this.blueprint = this.blueprint || {};
  17. let x = this.obj.x;
  18. let y = this.obj.y;
  19. let range = this.range;
  20. let halfRange = (range - 1) / 2;
  21. for (let i = 0; i < range; i++) {
  22. for (let j = 0; j < range; j++) {
  23. let n = i + '|' + j;
  24. let maxAlpha = (1 + ((halfRange * 2) - (Math.abs(halfRange - i) + Math.abs(halfRange - j)))) * 0.1;
  25. this.emitters[n] = renderer.buildEmitter({
  26. pos: {
  27. x: ((x + i - halfRange) * scale) + (scale / 2),
  28. y: ((y + j - halfRange) * scale) + (scale / 2)
  29. },
  30. scale: {
  31. start: {
  32. min: 24,
  33. max: 32
  34. },
  35. end: {
  36. min: 12,
  37. max: 22
  38. }
  39. },
  40. color: this.blueprint.color || {
  41. start: ['ffeb38'],
  42. end: ['ffeb38', 'ff6942', 'd43346']
  43. },
  44. alpha: {
  45. start: maxAlpha,
  46. end: 0
  47. },
  48. frequency: 0.9 + (~~(Math.random() * 10) / 10),
  49. blendMode: 'screen',
  50. lifetime: this.blueprint.lifetime || {
  51. min: 1,
  52. max: 4
  53. },
  54. speed: {
  55. start: {
  56. min: 0,
  57. max: 4
  58. },
  59. end: {
  60. min: 0,
  61. max: 2
  62. }
  63. },
  64. randomSpeed: true,
  65. randomColor: true,
  66. randomScale: true
  67. });
  68. }
  69. }
  70. },
  71. update: function () {
  72. },
  73. destroy: function () {
  74. let keys = Object.keys(this.emitters);
  75. for (let i = 0; i < keys.length; i++) {
  76. let emitter = this.emitters[keys[i]];
  77. delete this.emitters[keys[i]];
  78. renderer.destroyEmitter(emitter);
  79. }
  80. }
  81. };
  82. });