custom-pixi-particles 2.0.10 → 2.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +45 -45
  3. package/dist/index.d.ts +6 -6
  4. package/dist/index.js +15 -15
  5. package/dist/lib/Particle.d.ts +45 -45
  6. package/dist/lib/Particle.js +68 -68
  7. package/dist/lib/ParticlePool.d.ts +9 -9
  8. package/dist/lib/ParticlePool.js +33 -33
  9. package/dist/lib/behaviour/AngularVelocityBehaviour.d.ts +26 -26
  10. package/dist/lib/behaviour/AngularVelocityBehaviour.js +77 -77
  11. package/dist/lib/behaviour/Behaviour.d.ts +7 -7
  12. package/dist/lib/behaviour/Behaviour.js +26 -26
  13. package/dist/lib/behaviour/BehaviourNames.d.ts +11 -11
  14. package/dist/lib/behaviour/BehaviourNames.js +12 -12
  15. package/dist/lib/behaviour/ColorBehaviour.d.ts +45 -45
  16. package/dist/lib/behaviour/ColorBehaviour.js +103 -103
  17. package/dist/lib/behaviour/EmitDirectionBehaviour.d.ts +22 -22
  18. package/dist/lib/behaviour/EmitDirectionBehaviour.js +83 -83
  19. package/dist/lib/behaviour/EmitterBehaviours.d.ts +12 -12
  20. package/dist/lib/behaviour/EmitterBehaviours.js +59 -59
  21. package/dist/lib/behaviour/LifeBehaviour.d.ts +18 -18
  22. package/dist/lib/behaviour/LifeBehaviour.js +55 -55
  23. package/dist/lib/behaviour/PositionBehaviour.d.ts +62 -62
  24. package/dist/lib/behaviour/PositionBehaviour.js +146 -146
  25. package/dist/lib/behaviour/RotationBehaviour.d.ts +22 -22
  26. package/dist/lib/behaviour/RotationBehaviour.js +77 -77
  27. package/dist/lib/behaviour/SizeBehaviour.d.ts +31 -31
  28. package/dist/lib/behaviour/SizeBehaviour.js +84 -84
  29. package/dist/lib/behaviour/TurbulenceBehaviour.d.ts +69 -69
  30. package/dist/lib/behaviour/TurbulenceBehaviour.js +153 -153
  31. package/dist/lib/behaviour/index.d.ts +12 -12
  32. package/dist/lib/behaviour/index.js +28 -28
  33. package/dist/lib/customPixiParticlesSettingsInterface.d.ts +8 -8
  34. package/dist/lib/customPixiParticlesSettingsInterface.js +2 -2
  35. package/dist/lib/emission/AbstractEmission.d.ts +7 -7
  36. package/dist/lib/emission/AbstractEmission.js +21 -21
  37. package/dist/lib/emission/EmissionTypes.d.ts +6 -6
  38. package/dist/lib/emission/EmissionTypes.js +7 -7
  39. package/dist/lib/emission/RandomEmission.d.ts +11 -11
  40. package/dist/lib/emission/RandomEmission.js +61 -61
  41. package/dist/lib/emission/StandardEmission.d.ts +12 -12
  42. package/dist/lib/emission/StandardEmission.js +65 -65
  43. package/dist/lib/emission/UniformEmission.d.ts +14 -14
  44. package/dist/lib/emission/UniformEmission.js +73 -73
  45. package/dist/lib/emission/index.d.ts +6 -6
  46. package/dist/lib/emission/index.js +16 -16
  47. package/dist/lib/emitter/Duration.d.ts +10 -10
  48. package/dist/lib/emitter/Duration.js +28 -28
  49. package/dist/lib/emitter/Emitter.d.ts +45 -45
  50. package/dist/lib/emitter/Emitter.js +214 -214
  51. package/dist/lib/emitter/index.d.ts +3 -3
  52. package/dist/lib/emitter/index.js +10 -10
  53. package/dist/lib/index.d.ts +20 -20
  54. package/dist/lib/index.js +44 -44
  55. package/dist/lib/parser/BehaviourParser.d.ts +10 -10
  56. package/dist/lib/parser/BehaviourParser.js +48 -48
  57. package/dist/lib/parser/CompatibilityHelper.d.ts +3 -3
  58. package/dist/lib/parser/CompatibilityHelper.js +14 -14
  59. package/dist/lib/parser/EmitControllerParser.d.ts +6 -6
  60. package/dist/lib/parser/EmitControllerParser.js +22 -22
  61. package/dist/lib/parser/EmitterParser.d.ts +12 -12
  62. package/dist/lib/parser/EmitterParser.js +126 -126
  63. package/dist/lib/parser/index.d.ts +5 -5
  64. package/dist/lib/parser/index.js +14 -14
  65. package/dist/lib/pixi/Renderer.d.ts +49 -49
  66. package/dist/lib/pixi/Renderer.js +440 -437
  67. package/dist/lib/pixi/Renderer.js.map +1 -1
  68. package/dist/lib/util/Color.d.ts +32 -32
  69. package/dist/lib/util/Color.js +98 -98
  70. package/dist/lib/util/List.d.ts +9 -9
  71. package/dist/lib/util/List.js +50 -50
  72. package/dist/lib/util/Point.d.ts +13 -13
  73. package/dist/lib/util/Point.js +29 -29
  74. package/dist/lib/util/Random.d.ts +4 -4
  75. package/dist/lib/util/Random.js +14 -14
  76. package/dist/lib/util/index.d.ts +5 -5
  77. package/dist/lib/util/index.js +14 -14
  78. package/dist/lib/util/maths.d.ts +7 -7
  79. package/dist/lib/util/maths.js +16 -16
  80. package/dist/lib/util/turbulencePool.d.ts +5 -5
  81. package/dist/lib/util/turbulencePool.js +9 -9
  82. package/package.json +41 -41
@@ -1,438 +1,441 @@
1
- "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- // tslint:disable:prefer-for-of
22
- var index_1 = __importDefault(require("../index"));
23
- var emitter_1 = require("../emitter");
24
- var turbulencePool_1 = __importDefault(require("../util/turbulencePool"));
25
- var BehaviourNames_1 = __importDefault(require("../behaviour/BehaviourNames"));
26
- var List_1 = __importDefault(require("../util/List"));
27
- var ParticlePool_1 = __importDefault(require("../ParticlePool"));
28
- var pixi_js_1 = require("pixi.js");
29
- var Renderer = /** @class */ (function (_super) {
30
- __extends(Renderer, _super);
31
- function Renderer(settings) {
32
- var _this = _super.call(this, 100000, {
33
- vertices: true,
34
- position: true,
35
- rotation: true,
36
- uvs: !!(settings.emitterConfig.animatedSprite ||
37
- (settings.finishingTextures && settings.finishingTextures.length)),
38
- tint: true,
39
- }) || this;
40
- _this.onComplete = function () { };
41
- _this._paused = false;
42
- _this.currentTime = 0;
43
- _this.lastTime = 0;
44
- _this.pausedTime = 0;
45
- _this.unusedSprites = [];
46
- _this.getByName = function (name) {
47
- for (var i = 0; i < _this.config.behaviours.length; ++i) {
48
- if (_this.config.behaviours[i].name === name) {
49
- return _this.config.behaviours[i];
50
- }
51
- }
52
- return null;
53
- };
54
- var textures = settings.textures, emitterConfig = settings.emitterConfig, finishingTextures = settings.finishingTextures;
55
- _this.config = emitterConfig;
56
- _this.textures = textures;
57
- _this.finishingTextureNames = finishingTextures;
58
- var turbulenceConfigIndex = _this.getConfigIndexByName(BehaviourNames_1.default.TURBULENCE_BEHAVIOUR, emitterConfig);
59
- if (turbulenceConfigIndex !== -1) {
60
- var turbulenceConfig = emitterConfig.behaviours[turbulenceConfigIndex];
61
- if (turbulenceConfig.enabled === true) {
62
- _this.turbulenceEmitter = new index_1.default.Emitter();
63
- _this.turbulenceParser = _this.turbulenceEmitter.getParser();
64
- _this.turbulenceParser.read(_this.buildTurbulenceConfig(turbulenceConfig));
65
- _this.turbulenceEmitter.on(emitter_1.Emitter.CREATE, _this.onCreateTurbulence, _this);
66
- _this.turbulenceEmitter.on(emitter_1.Emitter.UPDATE, _this.onUpdateTurbulence, _this);
67
- _this.turbulenceEmitter.on(emitter_1.Emitter.REMOVE, _this.onRemoveTurbulence, _this);
68
- }
69
- }
70
- if (typeof emitterConfig.alpha !== 'undefined') {
71
- _this.alpha = emitterConfig.alpha;
72
- }
73
- if (typeof emitterConfig.blendMode !== 'undefined') {
74
- _this.blendMode = emitterConfig.blendMode;
75
- }
76
- _this.emitter = new index_1.default.Emitter();
77
- _this.emitterParser = _this.emitter.getParser();
78
- _this.emitterParser.read(emitterConfig);
79
- _this.emitter.on(emitter_1.Emitter.CREATE, _this.onCreate, _this);
80
- _this.emitter.on(emitter_1.Emitter.UPDATE, _this.onUpdate, _this);
81
- _this.emitter.on(emitter_1.Emitter.FINISHING, _this.onFinishing, _this);
82
- _this.emitter.on(emitter_1.Emitter.REMOVE, _this.onRemove, _this);
83
- _this.emitter.on(emitter_1.Emitter.PLAY, _this.onPlay, _this);
84
- _this.emitter.on(emitter_1.Emitter.COMPLETE, function () {
85
- _this.onComplete();
86
- });
87
- if (_this.turbulenceEmitter && _this.turbulenceEmitter.list) {
88
- turbulencePool_1.default.list = _this.turbulenceEmitter.list;
89
- }
90
- document.addEventListener('visibilitychange', function () { return _this.paused(document.hidden); });
91
- return _this;
92
- }
93
- Renderer.prototype.updateTransform = function () {
94
- if (this._paused)
95
- return;
96
- this.currentTime = performance.now();
97
- if (this.lastTime === 0) {
98
- this.lastTime = this.currentTime;
99
- }
100
- this.emitter.update((this.currentTime - this.lastTime) / 1000);
101
- if (this.turbulenceEmitter) {
102
- this.turbulenceEmitter.update((this.currentTime - this.lastTime) / 1000);
103
- }
104
- pixi_js_1.ParticleContainer.prototype.updateTransform.call(this);
105
- this.lastTime = this.currentTime;
106
- };
107
- Renderer.prototype.updateTexture = function () {
108
- for (var i = 0; i < this.unusedSprites.length; ++i) {
109
- this.unusedSprites[i].texture = pixi_js_1.Texture.from(this.getRandomTexture());
110
- }
111
- for (var i = 0; i < this.children.length; ++i) {
112
- // @ts-ignore
113
- this.children[i].texture = pixi_js_1.Texture.from(this.getRandomTexture());
114
- }
115
- };
116
- Renderer.prototype.start = function () {
117
- this.emitter.resetAndPlay();
118
- if (this.turbulenceEmitter) {
119
- this.turbulenceEmitter.resetAndPlay();
120
- }
121
- };
122
- Renderer.prototype.play = function () {
123
- this.emitter.resetWithoutRemovingAndPlay();
124
- if (this.turbulenceEmitter) {
125
- this.turbulenceEmitter.resetWithoutRemovingAndPlay();
126
- }
127
- };
128
- Renderer.prototype.stopImmediately = function () {
129
- this.emitter.stop();
130
- if (this.turbulenceEmitter) {
131
- this.turbulenceEmitter.stop();
132
- }
133
- this.emitter.emit(emitter_1.Emitter.COMPLETE);
134
- };
135
- Renderer.prototype.stop = function () {
136
- this.emitter.stopWithoutKilling();
137
- if (this.turbulenceEmitter) {
138
- this.turbulenceEmitter.stop();
139
- }
140
- };
141
- Renderer.prototype.resetEmitter = function () {
142
- this.emitter.reset();
143
- if (this.turbulenceEmitter) {
144
- this.turbulenceEmitter.reset();
145
- }
146
- };
147
- Renderer.prototype.setTextures = function (textures) {
148
- this.textures = textures;
149
- this.updateTexture();
150
- };
151
- Renderer.prototype.updateConfig = function (config) {
152
- this.emitterParser.update(config);
153
- if (this.turbulenceEmitter) {
154
- var turbulenceConfigIndex = this.getConfigIndexByName(BehaviourNames_1.default.TURBULENCE_BEHAVIOUR, config);
155
- if (turbulenceConfigIndex !== -1) {
156
- var turbulenceConfig = config.behaviours[turbulenceConfigIndex];
157
- if (turbulenceConfig.enabled === true) {
158
- this.turbulenceParser.update(this.buildTurbulenceConfig(turbulenceConfig));
159
- }
160
- }
161
- }
162
- };
163
- Renderer.prototype.updatePosition = function (position) {
164
- var positionBehaviour = this.getByName(BehaviourNames_1.default.POSITION_BEHAVIOUR);
165
- positionBehaviour.position.x = position.x;
166
- positionBehaviour.position.y = position.y;
167
- this.emitterParser.update(this.config);
168
- };
169
- Renderer.prototype.clearPool = function () {
170
- this.removeChildren();
171
- this.unusedSprites = [];
172
- if (this.turbulenceEmitter && this.turbulenceEmitter.list) {
173
- turbulencePool_1.default.list.reset();
174
- turbulencePool_1.default.list = new List_1.default();
175
- }
176
- this.emitter.list.reset();
177
- this.emitter.list = new List_1.default();
178
- ParticlePool_1.default.global.reset();
179
- };
180
- Renderer.prototype.getOrCreateSprite = function () {
181
- if (this.unusedSprites.length > 0) {
182
- var sprite_1 = this.unusedSprites.pop();
183
- if (this.finishingTextureNames && this.finishingTextureNames.length) {
184
- sprite_1.texture = pixi_js_1.Texture.from(this.getRandomTexture());
185
- }
186
- return sprite_1;
187
- }
188
- if (this.emitter.animatedSprite) {
189
- var textures = this.createFrameAnimationByName(this.getRandomTexture(), 2);
190
- if (textures.length) {
191
- var animation = new pixi_js_1.AnimatedSprite(textures);
192
- animation.anchor.set(0.5);
193
- animation.loop = this.emitter.animatedSprite.loop;
194
- animation.play();
195
- animation.animationSpeed = this.emitter.animatedSprite.frameRate;
196
- return this.addChild(animation);
197
- }
198
- }
199
- var sprite = new pixi_js_1.Sprite(pixi_js_1.Texture.from(this.getRandomTexture()));
200
- sprite.anchor.set(0.5);
201
- return this.addChild(sprite);
202
- };
203
- Renderer.prototype.createFrameAnimationByName = function (prefix, zeroPad, imageFileExtension) {
204
- if (zeroPad === void 0) { zeroPad = 0; }
205
- if (imageFileExtension === void 0) { imageFileExtension = 'png'; }
206
- var textures = [];
207
- var frame = '';
208
- var indexFrame = 0;
209
- var padding = 0;
210
- var texture;
211
- var sheets = [];
212
- var resources = pixi_js_1.Loader.shared.resources;
213
- for (var key in resources) {
214
- if (resources[key].extension === 'json') {
215
- // @ts-ignore
216
- sheets.push(resources[key].spritesheet);
217
- }
218
- }
219
- do {
220
- frame = indexFrame.toString();
221
- padding = zeroPad - frame.length;
222
- if (padding > 0) {
223
- frame = '0'.repeat(padding) + frame;
224
- }
225
- try {
226
- var found = false;
227
- for (var _i = 0, sheets_1 = sheets; _i < sheets_1.length; _i++) {
228
- var sheet = sheets_1[_i];
229
- if (sheet && sheet.textures[prefix + "_" + frame + "." + imageFileExtension]) {
230
- found = true;
231
- }
232
- }
233
- if (found) {
234
- texture = pixi_js_1.Texture.from(prefix + "_" + frame + "." + imageFileExtension);
235
- textures.push(texture);
236
- indexFrame += 1;
237
- }
238
- else {
239
- texture = null;
240
- for (var key in resources) {
241
- if (key === prefix + "_" + frame + "." + imageFileExtension) {
242
- texture = pixi_js_1.Texture.from(prefix + "_" + frame + "." + imageFileExtension);
243
- textures.push(texture);
244
- indexFrame += 1;
245
- }
246
- }
247
- }
248
- }
249
- catch (e) {
250
- texture = null;
251
- }
252
- } while (texture);
253
- return textures;
254
- };
255
- Renderer.prototype.onPlay = function () {
256
- this.currentTime = 0;
257
- this.lastTime = 0;
258
- };
259
- Renderer.prototype.onCreate = function (particle) {
260
- var sprite = this.getOrCreateSprite();
261
- sprite.visible = true;
262
- sprite.alpha = 1;
263
- if (this.blendMode) {
264
- sprite.blendMode = this.blendMode;
265
- }
266
- particle.sprite = sprite;
267
- };
268
- Renderer.prototype.onCreateTurbulence = function (particle) {
269
- var sprite = new pixi_js_1.Sprite(pixi_js_1.Texture.from('vortex.png'));
270
- sprite.anchor.set(0.5);
271
- this.addChild(sprite);
272
- sprite.visible = false;
273
- sprite.alpha = 0;
274
- particle.sprite = sprite;
275
- if (particle.showVortices && sprite) {
276
- sprite.visible = true;
277
- sprite.alpha = 1;
278
- }
279
- };
280
- Renderer.prototype.onUpdate = function (particle) {
281
- var sprite = particle.sprite;
282
- sprite.x = particle.x;
283
- sprite.y = particle.y;
284
- sprite.scale.x = particle.size.x;
285
- sprite.scale.y = particle.size.y;
286
- sprite.tint = particle.color.hex;
287
- sprite.alpha = particle.color.alpha;
288
- sprite.rotation = particle.rotation;
289
- };
290
- Renderer.prototype.onUpdateTurbulence = function (particle) {
291
- var sprite = particle.sprite;
292
- sprite.x = particle.x;
293
- sprite.y = particle.y;
294
- if (particle.showVortices && sprite) {
295
- sprite.scale.x = particle.size.x;
296
- sprite.scale.y = particle.size.y;
297
- sprite.tint = particle.color.hex;
298
- sprite.alpha = particle.color.alpha;
299
- sprite.rotation = particle.rotation;
300
- }
301
- };
302
- Renderer.prototype.onFinishing = function (particle) {
303
- if (!this.finishingTextureNames || !this.finishingTextureNames.length)
304
- return;
305
- var sprite = particle.sprite;
306
- if (particle.finishingTexture <= this.finishingTextureNames.length - 1) {
307
- sprite.texture = pixi_js_1.Texture.from(this.finishingTextureNames[particle.finishingTexture]);
308
- particle.finishingTexture++;
309
- }
310
- };
311
- Renderer.prototype.onRemove = function (particle) {
312
- var sprite = particle.sprite;
313
- if (!particle.showVortices && sprite) {
314
- sprite.visible = false;
315
- sprite.alpha = 0;
316
- }
317
- particle.finishingTexture = 0;
318
- this.unusedSprites.push(sprite);
319
- // this.removeChild(sprite)
320
- // delete particle.sprite
321
- };
322
- Renderer.prototype.onRemoveTurbulence = function (particle) {
323
- var sprite = particle.sprite;
324
- if (!particle.showVortices && sprite) {
325
- sprite.visible = false;
326
- sprite.alpha = 0;
327
- }
328
- this.removeChild(sprite);
329
- delete particle.sprite;
330
- };
331
- Renderer.prototype.getRandomTexture = function () {
332
- return this.textures[Math.floor(Math.random() * this.textures.length)];
333
- };
334
- Renderer.prototype.paused = function (paused) {
335
- if (paused === this._paused)
336
- return;
337
- if (paused) {
338
- this.pausedTime = performance.now();
339
- }
340
- else {
341
- this.pausedTime = 0;
342
- this.lastTime = performance.now() - this.pausedTime;
343
- }
344
- this._paused = paused;
345
- };
346
- Renderer.prototype.getConfigIndexByName = function (name, config) {
347
- var index = -1;
348
- config.behaviours.forEach(function (behaviour, i) {
349
- if (behaviour.name === name) {
350
- index = i;
351
- }
352
- });
353
- return index;
354
- };
355
- Renderer.prototype.buildTurbulenceConfig = function (turbulenceConfig) {
356
- var config = {
357
- behaviours: [
358
- {
359
- enabled: true,
360
- priority: 10000,
361
- maxLifeTime: turbulenceConfig.maxLifeTime || 2,
362
- timeVariance: turbulenceConfig.maxLifeTimeVariance || 0,
363
- name: 'LifeBehaviour',
364
- },
365
- {
366
- enabled: true,
367
- priority: 100,
368
- position: {
369
- x: turbulenceConfig.position.x || 0,
370
- y: turbulenceConfig.position.y || 0,
371
- },
372
- positionVariance: {
373
- x: turbulenceConfig.positionVariance.x || 0,
374
- y: turbulenceConfig.positionVariance.y || 0,
375
- },
376
- velocity: {
377
- x: turbulenceConfig.velocity.x || 0,
378
- y: turbulenceConfig.velocity.y || 0,
379
- },
380
- velocityVariance: {
381
- x: turbulenceConfig.velocityVariance.x || 0,
382
- y: turbulenceConfig.velocityVariance.y || 0,
383
- },
384
- acceleration: {
385
- x: turbulenceConfig.acceleration.x || 0,
386
- y: turbulenceConfig.acceleration.y || 0,
387
- },
388
- accelerationVariance: {
389
- x: turbulenceConfig.accelerationVariance.x || 0,
390
- y: turbulenceConfig.accelerationVariance.y || 0,
391
- },
392
- name: 'PositionBehaviour',
393
- },
394
- {
395
- enabled: true,
396
- priority: 0,
397
- sizeStart: {
398
- x: turbulenceConfig.sizeStart.x || 1,
399
- y: turbulenceConfig.sizeStart.y || 1,
400
- },
401
- sizeEnd: {
402
- x: turbulenceConfig.sizeEnd.x || 1,
403
- y: turbulenceConfig.sizeEnd.y || 1,
404
- },
405
- startVariance: turbulenceConfig.startVariance || 0,
406
- endVariance: turbulenceConfig.endVariance || 0,
407
- name: 'SizeBehaviour',
408
- },
409
- {
410
- enabled: true,
411
- priority: 0,
412
- rotation: 12,
413
- variance: 0,
414
- name: 'RotationBehaviour',
415
- },
416
- {
417
- enabled: true,
418
- priority: 0,
419
- showVortices: turbulenceConfig.showVortices || false,
420
- turbulence: true,
421
- name: 'TurbulenceBehaviour',
422
- },
423
- ],
424
- emitController: {
425
- _maxParticles: 0,
426
- _maxLife: 1,
427
- _emitPerSecond: turbulenceConfig.emitPerSecond || 2,
428
- _frames: 0,
429
- name: 'UniformEmission',
430
- },
431
- duration: turbulenceConfig.duration || -1,
432
- };
433
- return config;
434
- };
435
- return Renderer;
436
- }(pixi_js_1.ParticleContainer));
437
- exports.default = Renderer;
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ // tslint:disable:prefer-for-of
22
+ var index_1 = __importDefault(require("../index"));
23
+ var emitter_1 = require("../emitter");
24
+ var turbulencePool_1 = __importDefault(require("../util/turbulencePool"));
25
+ var BehaviourNames_1 = __importDefault(require("../behaviour/BehaviourNames"));
26
+ var List_1 = __importDefault(require("../util/List"));
27
+ var ParticlePool_1 = __importDefault(require("../ParticlePool"));
28
+ var pixi_js_1 = require("pixi.js");
29
+ var Renderer = /** @class */ (function (_super) {
30
+ __extends(Renderer, _super);
31
+ function Renderer(settings) {
32
+ var _this = _super.call(this, 100000, {
33
+ vertices: true,
34
+ position: true,
35
+ rotation: true,
36
+ uvs: !!(settings.emitterConfig.animatedSprite ||
37
+ (settings.finishingTextures && settings.finishingTextures.length)),
38
+ tint: true,
39
+ }) || this;
40
+ _this.onComplete = function () { };
41
+ _this._paused = false;
42
+ _this.currentTime = 0;
43
+ _this.lastTime = 0;
44
+ _this.pausedTime = 0;
45
+ _this.unusedSprites = [];
46
+ _this.getByName = function (name) {
47
+ for (var i = 0; i < _this.config.behaviours.length; ++i) {
48
+ if (_this.config.behaviours[i].name === name) {
49
+ return _this.config.behaviours[i];
50
+ }
51
+ }
52
+ return null;
53
+ };
54
+ var textures = settings.textures, emitterConfig = settings.emitterConfig, finishingTextures = settings.finishingTextures;
55
+ _this.config = emitterConfig;
56
+ _this.textures = textures;
57
+ _this.finishingTextureNames = finishingTextures;
58
+ var turbulenceConfigIndex = _this.getConfigIndexByName(BehaviourNames_1.default.TURBULENCE_BEHAVIOUR, emitterConfig);
59
+ if (turbulenceConfigIndex !== -1) {
60
+ var turbulenceConfig = emitterConfig.behaviours[turbulenceConfigIndex];
61
+ if (turbulenceConfig.enabled === true) {
62
+ _this.turbulenceEmitter = new index_1.default.Emitter();
63
+ _this.turbulenceParser = _this.turbulenceEmitter.getParser();
64
+ _this.turbulenceParser.read(_this.buildTurbulenceConfig(turbulenceConfig));
65
+ _this.turbulenceEmitter.on(emitter_1.Emitter.CREATE, _this.onCreateTurbulence, _this);
66
+ _this.turbulenceEmitter.on(emitter_1.Emitter.UPDATE, _this.onUpdateTurbulence, _this);
67
+ _this.turbulenceEmitter.on(emitter_1.Emitter.REMOVE, _this.onRemoveTurbulence, _this);
68
+ }
69
+ }
70
+ if (typeof emitterConfig.alpha !== 'undefined') {
71
+ _this.alpha = emitterConfig.alpha;
72
+ }
73
+ if (typeof emitterConfig.blendMode !== 'undefined') {
74
+ _this.blendMode = emitterConfig.blendMode;
75
+ }
76
+ _this.emitter = new index_1.default.Emitter();
77
+ _this.emitterParser = _this.emitter.getParser();
78
+ _this.emitterParser.read(emitterConfig);
79
+ _this.emitter.on(emitter_1.Emitter.CREATE, _this.onCreate, _this);
80
+ _this.emitter.on(emitter_1.Emitter.UPDATE, _this.onUpdate, _this);
81
+ _this.emitter.on(emitter_1.Emitter.FINISHING, _this.onFinishing, _this);
82
+ _this.emitter.on(emitter_1.Emitter.REMOVE, _this.onRemove, _this);
83
+ _this.emitter.on(emitter_1.Emitter.PLAY, _this.onPlay, _this);
84
+ _this.emitter.on(emitter_1.Emitter.COMPLETE, function () {
85
+ _this.onComplete();
86
+ });
87
+ if (_this.turbulenceEmitter && _this.turbulenceEmitter.list) {
88
+ turbulencePool_1.default.list = _this.turbulenceEmitter.list;
89
+ }
90
+ document.addEventListener('visibilitychange', function () { return _this.paused(document.hidden); });
91
+ return _this;
92
+ }
93
+ Renderer.prototype.updateTransform = function () {
94
+ if (this._paused)
95
+ return;
96
+ this.currentTime = performance.now();
97
+ if (this.lastTime === 0) {
98
+ this.lastTime = this.currentTime;
99
+ }
100
+ this.emitter.update((this.currentTime - this.lastTime) / 1000);
101
+ if (this.turbulenceEmitter) {
102
+ this.turbulenceEmitter.update((this.currentTime - this.lastTime) / 1000);
103
+ }
104
+ pixi_js_1.ParticleContainer.prototype.updateTransform.call(this);
105
+ this.lastTime = this.currentTime;
106
+ };
107
+ Renderer.prototype.updateTexture = function () {
108
+ for (var i = 0; i < this.unusedSprites.length; ++i) {
109
+ this.unusedSprites[i].texture = pixi_js_1.Texture.from(this.getRandomTexture());
110
+ }
111
+ for (var i = 0; i < this.children.length; ++i) {
112
+ // @ts-ignore
113
+ this.children[i].texture = pixi_js_1.Texture.from(this.getRandomTexture());
114
+ }
115
+ };
116
+ Renderer.prototype.start = function () {
117
+ this.emitter.resetAndPlay();
118
+ if (this.turbulenceEmitter) {
119
+ this.turbulenceEmitter.resetAndPlay();
120
+ }
121
+ };
122
+ Renderer.prototype.play = function () {
123
+ this.emitter.resetWithoutRemovingAndPlay();
124
+ if (this.turbulenceEmitter) {
125
+ this.turbulenceEmitter.resetWithoutRemovingAndPlay();
126
+ }
127
+ };
128
+ Renderer.prototype.stopImmediately = function () {
129
+ this.emitter.stop();
130
+ if (this.turbulenceEmitter) {
131
+ this.turbulenceEmitter.stop();
132
+ }
133
+ this.emitter.emit(emitter_1.Emitter.COMPLETE);
134
+ };
135
+ Renderer.prototype.stop = function () {
136
+ this.emitter.stopWithoutKilling();
137
+ if (this.turbulenceEmitter) {
138
+ this.turbulenceEmitter.stop();
139
+ }
140
+ };
141
+ Renderer.prototype.resetEmitter = function () {
142
+ this.emitter.reset();
143
+ if (this.turbulenceEmitter) {
144
+ this.turbulenceEmitter.reset();
145
+ }
146
+ };
147
+ Renderer.prototype.setTextures = function (textures) {
148
+ this.textures = textures;
149
+ this.updateTexture();
150
+ };
151
+ Renderer.prototype.updateConfig = function (config) {
152
+ this.emitterParser.update(config);
153
+ if (this.turbulenceEmitter) {
154
+ var turbulenceConfigIndex = this.getConfigIndexByName(BehaviourNames_1.default.TURBULENCE_BEHAVIOUR, config);
155
+ if (turbulenceConfigIndex !== -1) {
156
+ var turbulenceConfig = config.behaviours[turbulenceConfigIndex];
157
+ if (turbulenceConfig.enabled === true) {
158
+ this.turbulenceParser.update(this.buildTurbulenceConfig(turbulenceConfig));
159
+ }
160
+ }
161
+ }
162
+ };
163
+ Renderer.prototype.updatePosition = function (position) {
164
+ var positionBehaviour = this.getByName(BehaviourNames_1.default.POSITION_BEHAVIOUR);
165
+ positionBehaviour.position.x = position.x;
166
+ positionBehaviour.position.y = position.y;
167
+ this.emitterParser.update(this.config);
168
+ };
169
+ Renderer.prototype.clearPool = function () {
170
+ this.removeChildren();
171
+ this.unusedSprites = [];
172
+ if (this.turbulenceEmitter && this.turbulenceEmitter.list) {
173
+ turbulencePool_1.default.list.reset();
174
+ turbulencePool_1.default.list = new List_1.default();
175
+ }
176
+ this.emitter.list.reset();
177
+ this.emitter.list = new List_1.default();
178
+ ParticlePool_1.default.global.reset();
179
+ };
180
+ Renderer.prototype.getOrCreateSprite = function () {
181
+ if (this.unusedSprites.length > 0) {
182
+ var sprite_1 = this.unusedSprites.pop();
183
+ if (this.finishingTextureNames && this.finishingTextureNames.length) {
184
+ sprite_1.texture = pixi_js_1.Texture.from(this.getRandomTexture());
185
+ }
186
+ return sprite_1;
187
+ }
188
+ if (this.emitter.animatedSprite) {
189
+ var textures = this.createFrameAnimationByName(this.getRandomTexture(), 2);
190
+ if (textures.length) {
191
+ var animation = new pixi_js_1.AnimatedSprite(textures);
192
+ animation.anchor.set(0.5);
193
+ animation.loop = this.emitter.animatedSprite.loop;
194
+ animation.play();
195
+ animation.animationSpeed = this.emitter.animatedSprite.frameRate;
196
+ return this.addChild(animation);
197
+ }
198
+ }
199
+ var sprite = new pixi_js_1.Sprite(pixi_js_1.Texture.from(this.getRandomTexture()));
200
+ sprite.anchor.set(0.5);
201
+ return this.addChild(sprite);
202
+ };
203
+ Renderer.prototype.createFrameAnimationByName = function (prefix, zeroPad, imageFileExtension) {
204
+ if (zeroPad === void 0) { zeroPad = 0; }
205
+ if (imageFileExtension === void 0) { imageFileExtension = 'png'; }
206
+ var textures = [];
207
+ var frame = '';
208
+ var indexFrame = 0;
209
+ var padding = 0;
210
+ var texture;
211
+ var sheets = [];
212
+ var resources = pixi_js_1.Loader.shared.resources;
213
+ for (var key in resources) {
214
+ if (resources[key].extension === 'json') {
215
+ // @ts-ignore
216
+ sheets.push(resources[key].spritesheet);
217
+ }
218
+ }
219
+ do {
220
+ frame = indexFrame.toString();
221
+ padding = zeroPad - frame.length;
222
+ if (padding > 0) {
223
+ frame = '0'.repeat(padding) + frame;
224
+ }
225
+ try {
226
+ var found = false;
227
+ for (var _i = 0, sheets_1 = sheets; _i < sheets_1.length; _i++) {
228
+ var sheet = sheets_1[_i];
229
+ if (sheet && sheet.textures[prefix + "_" + frame + "." + imageFileExtension]) {
230
+ found = true;
231
+ }
232
+ }
233
+ if (found) {
234
+ texture = pixi_js_1.Texture.from(prefix + "_" + frame + "." + imageFileExtension);
235
+ textures.push(texture);
236
+ indexFrame += 1;
237
+ }
238
+ else {
239
+ texture = null;
240
+ for (var key in resources) {
241
+ if (key === prefix + "_" + frame + "." + imageFileExtension) {
242
+ texture = pixi_js_1.Texture.from(prefix + "_" + frame + "." + imageFileExtension);
243
+ textures.push(texture);
244
+ indexFrame += 1;
245
+ }
246
+ }
247
+ }
248
+ }
249
+ catch (e) {
250
+ texture = null;
251
+ }
252
+ } while (texture);
253
+ return textures;
254
+ };
255
+ Renderer.prototype.onPlay = function () {
256
+ this.currentTime = 0;
257
+ this.lastTime = 0;
258
+ };
259
+ Renderer.prototype.onCreate = function (particle) {
260
+ var sprite = this.getOrCreateSprite();
261
+ sprite.visible = true;
262
+ sprite.alpha = 1;
263
+ if (this.blendMode) {
264
+ sprite.blendMode = this.blendMode;
265
+ }
266
+ particle.sprite = sprite;
267
+ };
268
+ Renderer.prototype.onCreateTurbulence = function (particle) {
269
+ var vortexTexture = pixi_js_1.Texture.from('vortex.png');
270
+ if (!vortexTexture)
271
+ return;
272
+ var sprite = new pixi_js_1.Sprite(vortexTexture);
273
+ sprite.anchor.set(0.5);
274
+ this.addChild(sprite);
275
+ sprite.visible = false;
276
+ sprite.alpha = 0;
277
+ particle.sprite = sprite;
278
+ if (particle.showVortices && sprite) {
279
+ sprite.visible = true;
280
+ sprite.alpha = 1;
281
+ }
282
+ };
283
+ Renderer.prototype.onUpdate = function (particle) {
284
+ var sprite = particle.sprite;
285
+ sprite.x = particle.x;
286
+ sprite.y = particle.y;
287
+ sprite.scale.x = particle.size.x;
288
+ sprite.scale.y = particle.size.y;
289
+ sprite.tint = particle.color.hex;
290
+ sprite.alpha = particle.color.alpha;
291
+ sprite.rotation = particle.rotation;
292
+ };
293
+ Renderer.prototype.onUpdateTurbulence = function (particle) {
294
+ var sprite = particle.sprite;
295
+ sprite.x = particle.x;
296
+ sprite.y = particle.y;
297
+ if (particle.showVortices && sprite) {
298
+ sprite.scale.x = particle.size.x;
299
+ sprite.scale.y = particle.size.y;
300
+ sprite.tint = particle.color.hex;
301
+ sprite.alpha = particle.color.alpha;
302
+ sprite.rotation = particle.rotation;
303
+ }
304
+ };
305
+ Renderer.prototype.onFinishing = function (particle) {
306
+ if (!this.finishingTextureNames || !this.finishingTextureNames.length)
307
+ return;
308
+ var sprite = particle.sprite;
309
+ if (particle.finishingTexture <= this.finishingTextureNames.length - 1) {
310
+ sprite.texture = pixi_js_1.Texture.from(this.finishingTextureNames[particle.finishingTexture]);
311
+ particle.finishingTexture++;
312
+ }
313
+ };
314
+ Renderer.prototype.onRemove = function (particle) {
315
+ var sprite = particle.sprite;
316
+ if (!particle.showVortices && sprite) {
317
+ sprite.visible = false;
318
+ sprite.alpha = 0;
319
+ }
320
+ particle.finishingTexture = 0;
321
+ this.unusedSprites.push(sprite);
322
+ // this.removeChild(sprite)
323
+ // delete particle.sprite
324
+ };
325
+ Renderer.prototype.onRemoveTurbulence = function (particle) {
326
+ var sprite = particle.sprite;
327
+ if (!particle.showVortices && sprite) {
328
+ sprite.visible = false;
329
+ sprite.alpha = 0;
330
+ }
331
+ this.removeChild(sprite);
332
+ delete particle.sprite;
333
+ };
334
+ Renderer.prototype.getRandomTexture = function () {
335
+ return this.textures[Math.floor(Math.random() * this.textures.length)];
336
+ };
337
+ Renderer.prototype.paused = function (paused) {
338
+ if (paused === this._paused)
339
+ return;
340
+ if (paused) {
341
+ this.pausedTime = performance.now();
342
+ }
343
+ else {
344
+ this.pausedTime = 0;
345
+ this.lastTime = performance.now() - this.pausedTime;
346
+ }
347
+ this._paused = paused;
348
+ };
349
+ Renderer.prototype.getConfigIndexByName = function (name, config) {
350
+ var index = -1;
351
+ config.behaviours.forEach(function (behaviour, i) {
352
+ if (behaviour.name === name) {
353
+ index = i;
354
+ }
355
+ });
356
+ return index;
357
+ };
358
+ Renderer.prototype.buildTurbulenceConfig = function (turbulenceConfig) {
359
+ var config = {
360
+ behaviours: [
361
+ {
362
+ enabled: true,
363
+ priority: 10000,
364
+ maxLifeTime: turbulenceConfig.maxLifeTime || 2,
365
+ timeVariance: turbulenceConfig.maxLifeTimeVariance || 0,
366
+ name: 'LifeBehaviour',
367
+ },
368
+ {
369
+ enabled: true,
370
+ priority: 100,
371
+ position: {
372
+ x: turbulenceConfig.position.x || 0,
373
+ y: turbulenceConfig.position.y || 0,
374
+ },
375
+ positionVariance: {
376
+ x: turbulenceConfig.positionVariance.x || 0,
377
+ y: turbulenceConfig.positionVariance.y || 0,
378
+ },
379
+ velocity: {
380
+ x: turbulenceConfig.velocity.x || 0,
381
+ y: turbulenceConfig.velocity.y || 0,
382
+ },
383
+ velocityVariance: {
384
+ x: turbulenceConfig.velocityVariance.x || 0,
385
+ y: turbulenceConfig.velocityVariance.y || 0,
386
+ },
387
+ acceleration: {
388
+ x: turbulenceConfig.acceleration.x || 0,
389
+ y: turbulenceConfig.acceleration.y || 0,
390
+ },
391
+ accelerationVariance: {
392
+ x: turbulenceConfig.accelerationVariance.x || 0,
393
+ y: turbulenceConfig.accelerationVariance.y || 0,
394
+ },
395
+ name: 'PositionBehaviour',
396
+ },
397
+ {
398
+ enabled: true,
399
+ priority: 0,
400
+ sizeStart: {
401
+ x: turbulenceConfig.sizeStart.x || 1,
402
+ y: turbulenceConfig.sizeStart.y || 1,
403
+ },
404
+ sizeEnd: {
405
+ x: turbulenceConfig.sizeEnd.x || 1,
406
+ y: turbulenceConfig.sizeEnd.y || 1,
407
+ },
408
+ startVariance: turbulenceConfig.startVariance || 0,
409
+ endVariance: turbulenceConfig.endVariance || 0,
410
+ name: 'SizeBehaviour',
411
+ },
412
+ {
413
+ enabled: true,
414
+ priority: 0,
415
+ rotation: 12,
416
+ variance: 0,
417
+ name: 'RotationBehaviour',
418
+ },
419
+ {
420
+ enabled: true,
421
+ priority: 0,
422
+ showVortices: turbulenceConfig.showVortices || false,
423
+ turbulence: true,
424
+ name: 'TurbulenceBehaviour',
425
+ },
426
+ ],
427
+ emitController: {
428
+ _maxParticles: 0,
429
+ _maxLife: 1,
430
+ _emitPerSecond: turbulenceConfig.emitPerSecond || 2,
431
+ _frames: 0,
432
+ name: 'UniformEmission',
433
+ },
434
+ duration: turbulenceConfig.duration || -1,
435
+ };
436
+ return config;
437
+ };
438
+ return Renderer;
439
+ }(pixi_js_1.ParticleContainer));
440
+ exports.default = Renderer;
438
441
  //# sourceMappingURL=Renderer.js.map