custom-pixi-particles 2.0.10 → 2.0.14

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