melonjs 10.10.0 → 11.0.0

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 (95) hide show
  1. package/README.md +4 -3
  2. package/dist/melonjs.js +1071 -2102
  3. package/dist/melonjs.min.js +4 -4
  4. package/dist/melonjs.module.d.ts +600 -1351
  5. package/dist/melonjs.module.js +996 -2029
  6. package/package.json +16 -19
  7. package/src/audio/audio.js +0 -1
  8. package/src/camera/camera2d.js +1 -16
  9. package/src/entity/entity.js +6 -11
  10. package/src/geometries/ellipse.js +3 -12
  11. package/src/geometries/line.js +1 -4
  12. package/src/geometries/path2d.js +4 -14
  13. package/src/geometries/poly.js +6 -24
  14. package/src/geometries/rectangle.js +3 -15
  15. package/src/geometries/roundrect.js +2 -6
  16. package/src/index.js +0 -1
  17. package/src/input/gamepad.js +3 -14
  18. package/src/input/keyboard.js +1 -9
  19. package/src/input/pointer.js +0 -1
  20. package/src/input/pointerevent.js +14 -23
  21. package/src/lang/deprecated.js +4 -3
  22. package/src/level/level.js +0 -9
  23. package/src/level/tiled/TMXGroup.js +0 -4
  24. package/src/level/tiled/TMXLayer.js +0 -8
  25. package/src/level/tiled/TMXObject.js +0 -3
  26. package/src/level/tiled/TMXTile.js +4 -5
  27. package/src/level/tiled/TMXTileMap.js +1 -7
  28. package/src/level/tiled/TMXTileset.js +0 -5
  29. package/src/level/tiled/TMXTilesetGroup.js +1 -4
  30. package/src/level/tiled/TMXUtils.js +0 -3
  31. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -3
  32. package/src/level/tiled/renderer/TMXIsometricRenderer.js +0 -1
  33. package/src/level/tiled/renderer/TMXRenderer.js +1 -7
  34. package/src/loader/loader.js +0 -11
  35. package/src/loader/loadingscreen.js +1 -1
  36. package/src/math/color.js +5 -26
  37. package/src/math/math.js +0 -10
  38. package/src/math/matrix2.js +12 -27
  39. package/src/math/matrix3.js +1 -22
  40. package/src/math/observable_vector2.js +0 -29
  41. package/src/math/observable_vector3.js +0 -29
  42. package/src/math/vector2.js +3 -40
  43. package/src/math/vector3.js +4 -41
  44. package/src/particles/emitter.js +1 -1
  45. package/src/physics/body.js +4 -5
  46. package/src/physics/bounds.js +5 -19
  47. package/src/physics/collision.js +1 -13
  48. package/src/physics/detector.js +6 -56
  49. package/src/physics/quadtree.js +0 -7
  50. package/src/physics/response.js +48 -0
  51. package/src/physics/sat.js +4 -4
  52. package/src/physics/world.js +0 -4
  53. package/src/plugin/plugin.js +0 -2
  54. package/src/polyfill/roundrect.js +4 -2
  55. package/src/renderable/GUI.js +6 -9
  56. package/src/renderable/collectable.js +1 -0
  57. package/src/renderable/colorlayer.js +9 -7
  58. package/src/renderable/container.js +12 -38
  59. package/src/renderable/dragndrop.js +1 -10
  60. package/src/renderable/imagelayer.js +6 -10
  61. package/src/renderable/light2d.js +48 -16
  62. package/src/renderable/renderable.js +6 -28
  63. package/src/renderable/sprite.js +4 -16
  64. package/src/renderable/trigger.js +10 -3
  65. package/src/state/stage.js +0 -4
  66. package/src/state/state.js +22 -23
  67. package/src/system/device.js +16 -119
  68. package/src/system/dom.js +69 -0
  69. package/src/system/event.js +22 -0
  70. package/src/system/pooling.js +20 -9
  71. package/src/system/save.js +9 -11
  72. package/src/system/timer.js +239 -218
  73. package/src/text/bitmaptextdata.js +1 -4
  74. package/src/text/glyph.js +2 -2
  75. package/src/text/text.js +13 -8
  76. package/src/text/textmetrics.js +0 -2
  77. package/src/tweens/easing.js +1 -1
  78. package/src/tweens/interpolation.js +2 -2
  79. package/src/tweens/tween.js +1 -13
  80. package/src/utils/agent.js +1 -3
  81. package/src/utils/array.js +0 -3
  82. package/src/utils/file.js +0 -2
  83. package/src/utils/function.js +0 -2
  84. package/src/utils/string.js +0 -6
  85. package/src/utils/utils.js +0 -3
  86. package/src/video/canvas/canvas_renderer.js +4 -39
  87. package/src/video/renderer.js +1 -23
  88. package/src/video/texture/atlas.js +2 -0
  89. package/src/video/texture/cache.js +0 -1
  90. package/src/video/texture/canvas_texture.js +16 -4
  91. package/src/video/video.js +3 -3
  92. package/src/video/webgl/glshader.js +0 -5
  93. package/src/video/webgl/utils/uniforms.js +3 -6
  94. package/src/video/webgl/webgl_compositor.js +0 -14
  95. package/src/video/webgl/webgl_renderer.js +0 -42
@@ -4,19 +4,41 @@ import Renderable from "./renderable.js";
4
4
  /** @ignore */
5
5
  function createGradient(light) {
6
6
  var context = light.texture.context;
7
- var x1 = light.texture.width / 2;
8
- var y1 = light.texture.height / 2;
9
- var gradient = context.createRadialGradient(x1, y1, 0, x1, y1, light.radius);
7
+
8
+ var x1 = light.texture.width / 2,
9
+ y1 = light.texture.height / 2;
10
+
11
+ var radiusX = light.radiusX,
12
+ radiusY = light.radiusY;
13
+
14
+ var scaleX, scaleY, invScaleX, invScaleY;
15
+ var gradient;
16
+
10
17
 
11
18
  light.texture.clear();
12
19
 
20
+ if (radiusX >= radiusY) {
21
+ scaleX = 1;
22
+ invScaleX = 1;
23
+ scaleY = radiusY/radiusX;
24
+ invScaleY = radiusX/radiusY;
25
+ gradient = context.createRadialGradient(x1, y1 * invScaleY, 0, x1, radiusY * invScaleY, radiusX);
26
+ }
27
+ else {
28
+ scaleY = 1;
29
+ invScaleY = 1;
30
+ scaleX = radiusX/radiusY;
31
+ invScaleX = radiusY/radiusX;
32
+ gradient = context.createRadialGradient(x1 * invScaleX, y1, 0, x1 * invScaleX, y1, radiusY);
33
+ }
34
+
13
35
  gradient.addColorStop( 0, light.color.toRGBA(light.intensity));
14
36
  gradient.addColorStop( 1, light.color.toRGBA(0.0));
15
37
 
16
- context.beginPath();
17
38
  context.fillStyle = gradient;
18
- context.arc(x1, y1, light.radius, 0, Math.PI * 2, false);
19
- context.fill();
39
+
40
+ context.setTransform(scaleX, 0, 0, scaleY, 0, 0);
41
+ context.fillRect(0, 0, light.texture.width * invScaleX, light.texture.height * invScaleY);
20
42
  }
21
43
 
22
44
  /**
@@ -31,13 +53,14 @@ class Light2d extends Renderable {
31
53
  /**
32
54
  * @param {number} x - The horizontal position of the light.
33
55
  * @param {number} y - The vertical position of the light.
34
- * @param {number} radius - The radius of the light.
56
+ * @param {number} radiusX - The horizontal radius of the light.
57
+ * @param {number} [radiusY=radiusX] - The vertical radius of the light.
35
58
  * @param {Color|string} [color="#FFF"] the color of the light
36
59
  * @param {number} [intensity=0.7] - The intensity of the light.
37
60
  */
38
- constructor(x, y, radius, color = "#FFF", intensity = 0.7) {
61
+ constructor(x, y, radiusX, radiusY = radiusX, color = "#FFF", intensity = 0.7) {
39
62
  // call the parent constructor
40
- super(x, y, radius * 2, radius * 2);
63
+ super(x, y, radiusX * 2, radiusY * 2);
41
64
 
42
65
  /**
43
66
  * the color of the light
@@ -47,10 +70,16 @@ class Light2d extends Renderable {
47
70
  this.color = pool.pull("Color").parseCSS(color);
48
71
 
49
72
  /**
50
- * The radius of the light
73
+ * The horizontal radius of the light
51
74
  * @type {number}
52
75
  */
53
- this.radius = radius;
76
+ this.radiusX = radiusX;
77
+
78
+ /**
79
+ * The vertical radius of the light
80
+ * @type {number}
81
+ */
82
+ this.radiusY = radiusY;
54
83
 
55
84
  /**
56
85
  * The intensity of the light
@@ -72,7 +101,7 @@ class Light2d extends Renderable {
72
101
  this.visibleArea = pool.pull("Ellipse", this.centerX, this.centerY, this.width, this.height);
73
102
 
74
103
  /** @ignore */
75
- this.texture = pool.pull("CanvasTexture", this.width, this.height, false);
104
+ this.texture = pool.pull("CanvasTexture", this.width, this.height, { offscreenCanvas: false });
76
105
 
77
106
  this.anchorPoint.set(0, 0);
78
107
 
@@ -83,7 +112,6 @@ class Light2d extends Renderable {
83
112
  * returns a geometry representing the visible area of this light
84
113
  * @name getVisibleArea
85
114
  * @memberof Light2d
86
- * @function
87
115
  * @returns {Ellipse} the light visible mask
88
116
  */
89
117
  getVisibleArea() {
@@ -91,10 +119,14 @@ class Light2d extends Renderable {
91
119
  }
92
120
 
93
121
  /**
94
- * object draw (Called internally by the engine).
95
- * @ignore
122
+ * draw this Light2d (automatically called by melonJS)
123
+ * @name draw
124
+ * @memberof Light2d
125
+ * @protected
126
+ * @param {CanvasRenderer|WebGLRenderer} renderer a renderer instance
127
+ * @param {Camera2d} [viewport] the viewport to (re)draw
96
128
  */
97
- draw(renderer) {
129
+ draw(renderer, viewport) { // eslint-disable-line no-unused-vars
98
130
  renderer.drawImage(this.texture.canvas, this.getBounds().x, this.getBounds().y);
99
131
  }
100
132
 
@@ -381,7 +381,6 @@ class Renderable extends Rect {
381
381
  * returns the bounding box for this renderable
382
382
  * @name getBounds
383
383
  * @memberof Renderable
384
- * @function
385
384
  * @returns {Bounds} bounding box Rectangle object
386
385
  */
387
386
  getBounds() {
@@ -402,7 +401,6 @@ class Renderable extends Rect {
402
401
  * get the renderable alpha channel value<br>
403
402
  * @name getOpacity
404
403
  * @memberof Renderable
405
- * @function
406
404
  * @returns {number} current opacity value between 0 and 1
407
405
  */
408
406
  getOpacity() {
@@ -413,7 +411,6 @@ class Renderable extends Rect {
413
411
  * set the renderable alpha channel value<br>
414
412
  * @name setOpacity
415
413
  * @memberof Renderable
416
- * @function
417
414
  * @param {number} alpha opacity value between 0.0 and 1.0
418
415
  */
419
416
  setOpacity(alpha) {
@@ -432,7 +429,6 @@ class Renderable extends Rect {
432
429
  * @see Matrix2d#scaleX
433
430
  * @name flipX
434
431
  * @memberof Renderable
435
- * @function
436
432
  * @param {boolean} [flip=true] `true` to flip this renderable.
437
433
  * @returns {Renderable} Reference to this object for method chaining
438
434
  */
@@ -447,7 +443,6 @@ class Renderable extends Rect {
447
443
  * @see Matrix2d#scaleY
448
444
  * @name flipY
449
445
  * @memberof Renderable
450
- * @function
451
446
  * @param {boolean} [flip=true] `true` to flip this renderable.
452
447
  * @returns {Renderable} Reference to this object for method chaining
453
448
  */
@@ -462,7 +457,6 @@ class Renderable extends Rect {
462
457
  * @name transform
463
458
  * @memberof Renderable
464
459
  * @see Renderable#currentTransform
465
- * @function
466
460
  * @param {Matrix2d} m the transformation matrix
467
461
  * @returns {Renderable} Reference to this object for method chaining
468
462
  */
@@ -478,7 +472,6 @@ class Renderable extends Rect {
478
472
  * return the angle to the specified target
479
473
  * @name angleTo
480
474
  * @memberof Renderable
481
- * @function
482
475
  * @param {Renderable|Vector2d|Vector3d} target
483
476
  * @returns {number} angle in radians
484
477
  */
@@ -502,7 +495,6 @@ class Renderable extends Rect {
502
495
  * return the distance to the specified target
503
496
  * @name distanceTo
504
497
  * @memberof Renderable
505
- * @function
506
498
  * @param {Renderable|Vector2d|Vector3d} target
507
499
  * @returns {number} distance
508
500
  */
@@ -526,7 +518,6 @@ class Renderable extends Rect {
526
518
  * Rotate this renderable towards the given target.
527
519
  * @name lookAt
528
520
  * @memberof Renderable
529
- * @function
530
521
  * @param {Renderable|Vector2d|Vector3d} target the renderable or position to look at
531
522
  * @returns {Renderable} Reference to this object for method chaining
532
523
  */
@@ -550,7 +541,6 @@ class Renderable extends Rect {
550
541
  * Rotate this renderable by the specified angle (in radians).
551
542
  * @name rotate
552
543
  * @memberof Renderable
553
- * @function
554
544
  * @param {number} angle The angle to rotate (in radians)
555
545
  * @param {Vector2d|ObservableVector2d} [v] an optional point to rotate around
556
546
  * @returns {Renderable} Reference to this object for method chaining
@@ -572,7 +562,6 @@ class Renderable extends Rect {
572
562
  * member will be changed.
573
563
  * @name scale
574
564
  * @memberof Renderable
575
- * @function
576
565
  * @param {number} x a number representing the abscissa of the scaling vector.
577
566
  * @param {number} [y=x] a number representing the ordinate of the scaling vector.
578
567
  * @returns {Renderable} Reference to this object for method chaining
@@ -588,7 +577,6 @@ class Renderable extends Rect {
588
577
  * scale the renderable around his anchor point
589
578
  * @name scaleV
590
579
  * @memberof Renderable
591
- * @function
592
580
  * @param {Vector2d} v scaling vector
593
581
  * @returns {Renderable} Reference to this object for method chaining
594
582
  */
@@ -602,7 +590,6 @@ class Renderable extends Rect {
602
590
  * automatically called by the game manager {@link game}
603
591
  * @name update
604
592
  * @memberof Renderable
605
- * @function
606
593
  * @protected
607
594
  * @param {number} dt time since the last update in milliseconds.
608
595
  * @returns {boolean} true if the renderable is dirty
@@ -616,7 +603,6 @@ class Renderable extends Rect {
616
603
  * @ignore
617
604
  * @name updateBounds
618
605
  * @memberof Renderable
619
- * @function
620
606
  * @returns {Bounds} this shape bounding box Rectangle object
621
607
  */
622
608
  updateBounds() {
@@ -630,7 +616,6 @@ class Renderable extends Rect {
630
616
  * @ignore
631
617
  * @name updateBoundsPos
632
618
  * @memberof Renderable
633
- * @function
634
619
  */
635
620
  updateBoundsPos(newX, newY) {
636
621
  var bounds = this.getBounds();
@@ -663,7 +648,6 @@ class Renderable extends Rect {
663
648
  * return the renderable absolute position in the game world
664
649
  * @name getAbsolutePosition
665
650
  * @memberof Renderable
666
- * @function
667
651
  * @returns {Vector2d}
668
652
  */
669
653
  getAbsolutePosition() {
@@ -683,7 +667,6 @@ class Renderable extends Rect {
683
667
  * @private
684
668
  * @name onAnchorUpdate
685
669
  * @memberof Renderable
686
- * @function
687
670
  * @param {number} x the new X value to be set for the anchor
688
671
  * @param {number} y the new Y value to be set for the anchor
689
672
  */
@@ -701,7 +684,6 @@ class Renderable extends Rect {
701
684
  * automatically called by the game manager {@link game}
702
685
  * @name preDraw
703
686
  * @memberof Renderable
704
- * @function
705
687
  * @protected
706
688
  * @param {CanvasRenderer|WebGLRenderer} renderer a renderer object
707
689
  */
@@ -753,15 +735,14 @@ class Renderable extends Rect {
753
735
  }
754
736
 
755
737
  /**
756
- * object draw. <br>
757
- * automatically called by the game manager {@link game}
738
+ * draw this renderable (automatically called by melonJS)
758
739
  * @name draw
759
740
  * @memberof Renderable
760
- * @function
761
741
  * @protected
762
- * @param {CanvasRenderer|WebGLRenderer} renderer a renderer object
742
+ * @param {CanvasRenderer|WebGLRenderer} renderer a renderer instance
743
+ * @param {Camera2d} [viewport] the viewport to (re)draw
763
744
  */
764
- draw(renderer) { // eslint-disable-line no-unused-vars
745
+ draw(renderer, viewport) { // eslint-disable-line no-unused-vars
765
746
  // empty one !
766
747
  }
767
748
 
@@ -770,7 +751,6 @@ class Renderable extends Rect {
770
751
  * automatically called by the game manager {@link game}
771
752
  * @name postDraw
772
753
  * @memberof Renderable
773
- * @function
774
754
  * @protected
775
755
  * @param {CanvasRenderer|WebGLRenderer} renderer a renderer object
776
756
  */
@@ -795,8 +775,7 @@ class Renderable extends Rect {
795
775
  * when this renderable body is colliding with another one
796
776
  * @name onCollision
797
777
  * @memberof Renderable
798
- * @function
799
- * @param {collision.ResponseObject} response the collision response object
778
+ * @param {ResponseObject} response the collision response object
800
779
  * @param {Renderable} other the other renderable touching this one (a reference to response.a or response.b)
801
780
  * @returns {boolean} true if the object should respond to the collision (its position and velocity will be corrected)
802
781
  * @example
@@ -813,7 +792,7 @@ class Renderable extends Rect {
813
792
  * return true;
814
793
  * },
815
794
  */
816
- onCollision() {
795
+ onCollision(response, other) { // eslint-disable-line no-unused-vars
817
796
  return false;
818
797
  }
819
798
 
@@ -872,7 +851,6 @@ class Renderable extends Rect {
872
851
  * Called by engine before deleting the object
873
852
  * @name onDestroyEvent
874
853
  * @memberof Renderable
875
- * @function
876
854
  */
877
855
  onDestroyEvent() {
878
856
  // to be extended !
@@ -210,7 +210,6 @@ class Sprite extends Renderable {
210
210
  * return the flickering state of the object
211
211
  * @name isFlickering
212
212
  * @memberof Sprite
213
- * @function
214
213
  * @returns {boolean}
215
214
  */
216
215
  isFlickering() {
@@ -221,7 +220,6 @@ class Sprite extends Renderable {
221
220
  * make the object flicker
222
221
  * @name flicker
223
222
  * @memberof Sprite
224
- * @function
225
223
  * @param {number} duration expressed in milliseconds
226
224
  * @param {Function} callback Function to call when flickering ends
227
225
  * @returns {Sprite} Reference to this object for method chaining
@@ -252,7 +250,6 @@ class Sprite extends Renderable {
252
250
  * <img src="images/spritesheet_grid.png"/>
253
251
  * @name addAnimation
254
252
  * @memberof Sprite
255
- * @function
256
253
  * @param {string} name animation id
257
254
  * @param {number[]|string[]|object[]} index list of sprite index or name
258
255
  * defining the animation. Can also use objects to specify delay for each frame, see below
@@ -352,7 +349,6 @@ class Sprite extends Renderable {
352
349
  * this will always change the animation & set the frame to zero
353
350
  * @name setCurrentAnimation
354
351
  * @memberof Sprite
355
- * @function
356
352
  * @param {string} name animation id
357
353
  * @param {string|Function} [resetAnim] animation id to switch to when complete, or callback
358
354
  * @param {boolean} [preserve_dt=false] if false will reset the elapsed time counter since last frame
@@ -413,7 +409,6 @@ class Sprite extends Renderable {
413
409
  * reverse the given or current animation if none is specified
414
410
  * @name reverseAnimation
415
411
  * @memberof Sprite
416
- * @function
417
412
  * @param {string} [name] animation id
418
413
  * @returns {Sprite} Reference to this object for method chaining
419
414
  * @see Sprite#animationspeed
@@ -432,7 +427,6 @@ class Sprite extends Renderable {
432
427
  * return true if the specified animation is the current one.
433
428
  * @name isCurrentAnimation
434
429
  * @memberof Sprite
435
- * @function
436
430
  * @param {string} name animation id
437
431
  * @returns {boolean}
438
432
  * @example
@@ -449,7 +443,6 @@ class Sprite extends Renderable {
449
443
  * @see Texture.getRegion
450
444
  * @name setRegion
451
445
  * @memberof Sprite
452
- * @function
453
446
  * @param {object} region typically returned through me.Texture.getRegion()
454
447
  * @returns {Sprite} Reference to this object for method chaining
455
448
  * @example
@@ -481,7 +474,6 @@ class Sprite extends Renderable {
481
474
  * force the current animation frame index.
482
475
  * @name setAnimationFrame
483
476
  * @memberof Sprite
484
- * @function
485
477
  * @param {number} [idx=0] animation frame index
486
478
  * @returns {Sprite} Reference to this object for method chaining
487
479
  * @example
@@ -497,7 +489,6 @@ class Sprite extends Renderable {
497
489
  * return the current animation frame index.
498
490
  * @name getCurrentAnimationFrame
499
491
  * @memberof Sprite
500
- * @function
501
492
  * @returns {number} current animation frame index
502
493
  */
503
494
  getCurrentAnimationFrame() {
@@ -508,7 +499,6 @@ class Sprite extends Renderable {
508
499
  * Returns the frame object by the index.
509
500
  * @name getAnimationFrameObjectByIndex
510
501
  * @memberof Sprite
511
- * @function
512
502
  * @ignore
513
503
  * @param {number} id the frame id
514
504
  * @returns {number} if using number indices. Returns {object} containing frame data if using texture atlas
@@ -522,7 +512,6 @@ class Sprite extends Renderable {
522
512
  * automatically called by the game manager {@link game}
523
513
  * @name update
524
514
  * @memberof Sprite
525
- * @function
526
515
  * @protected
527
516
  * @param {number} dt time since the last update in milliseconds.
528
517
  * @returns {boolean} true if the Sprite is dirty
@@ -597,15 +586,14 @@ class Sprite extends Renderable {
597
586
  }
598
587
 
599
588
  /**
600
- * sprite draw. <br>
601
- * automatically called by the game manager {@link game}
589
+ * draw this srite (automatically called by melonJS)
602
590
  * @name draw
603
591
  * @memberof Sprite
604
- * @function
605
592
  * @protected
606
- * @param {CanvasRenderer|WebGLRenderer} renderer a renderer object
593
+ * @param {CanvasRenderer|WebGLRenderer} renderer a renderer instance
594
+ * @param {Camera2d} [viewport] the viewport to (re)draw
607
595
  */
608
- draw(renderer) {
596
+ draw(renderer, viewport) { // eslint-disable-line no-unused-vars
609
597
  // do nothing if we are flickering
610
598
  if (this._flicker.isFlickering) {
611
599
  this._flicker.state = !this._flicker.state;
@@ -3,6 +3,7 @@ import collision from "./../physics/collision.js";
3
3
  import Body from "./../physics/body.js";
4
4
  import level from "./../level/level.js";
5
5
  import { world, viewport } from "./../game.js";
6
+ import pool from "./../system/pooling.js";
6
7
 
7
8
  /**
8
9
  * @classdesc
@@ -105,7 +106,6 @@ class Trigger extends Renderable {
105
106
  * trigger this event
106
107
  * @name triggerEvent
107
108
  * @memberof Trigger
108
- * @function
109
109
  * @protected
110
110
  */
111
111
  triggerEvent() {
@@ -129,8 +129,15 @@ class Trigger extends Renderable {
129
129
  }
130
130
  }
131
131
 
132
- /** @ignore */
133
- onCollision() {
132
+ /**
133
+ * onCollision callback, triggered in case of collision with this trigger
134
+ * @name onCollision
135
+ * @memberof Trigger
136
+ * @param {ResponseObject} response the collision response object
137
+ * @param {Renderable} other the other renderable touching this one (a reference to response.a or response.b)
138
+ * @returns {boolean} true if the object should respond to the collision (its position and velocity will be corrected)
139
+ */
140
+ onCollision(response, other) { // eslint-disable-line no-unused-vars
134
141
  if (this.name === "Trigger") {
135
142
  this.triggerEvent.apply(this);
136
143
  }
@@ -116,7 +116,6 @@ class Stage {
116
116
  * @name update
117
117
  * @memberof Stage
118
118
  * @ignore
119
- * @function
120
119
  * @param {number} dt time since the last update in milliseconds.
121
120
  * @returns {boolean}
122
121
  */
@@ -147,7 +146,6 @@ class Stage {
147
146
  * @name draw
148
147
  * @memberof Stage
149
148
  * @ignore
150
- * @function
151
149
  * @param {CanvasRenderer|WebGLRenderer} renderer a renderer object
152
150
  */
153
151
  draw(renderer) {
@@ -203,7 +201,6 @@ class Stage {
203
201
  * this is typically where you will load a level, add renderables, etc...
204
202
  * @name onResetEvent
205
203
  * @memberof Stage
206
- * @function
207
204
  * @param {object} [...arguments] optional arguments passed when switching state
208
205
  * @see state#change
209
206
  */
@@ -220,7 +217,6 @@ class Stage {
220
217
  * called by the state manager before switching to another state
221
218
  * @name onDestroyEvent
222
219
  * @memberof Stage
223
- * @function
224
220
  */
225
221
  onDestroyEvent() {
226
222
  // execute onDestroyEvent function if given through the constructor
@@ -1,7 +1,6 @@
1
1
  import { pauseTrack, resumeTrack } from "./../audio/audio.js";
2
2
  import * as fctUtil from "./../utils/function.js";
3
3
  import * as event from "./../system/event.js";
4
- import timer from "./../system/timer.js";
5
4
  import * as game from "./../game.js";
6
5
  import Stage from "./../state/stage.js";
7
6
  import DefaultLoadingScreen from "./../loader/loadingscreen.js";
@@ -41,9 +40,6 @@ var _pauseTime = 0;
41
40
  function _startRunLoop() {
42
41
  // ensure nothing is running first and in valid state
43
42
  if ((_animFrameId === -1) && (_state !== -1)) {
44
- // reset the timer
45
- timer.reset();
46
-
47
43
  // start the main loop
48
44
  _animFrameId = globalThis.requestAnimationFrame(_renderFrame);
49
45
  }
@@ -56,9 +52,6 @@ function _startRunLoop() {
56
52
  function _resumeRunLoop() {
57
53
  // ensure game is actually paused and in valid state
58
54
  if (_isPaused && (_state !== -1)) {
59
- // reset the timer
60
- timer.reset();
61
-
62
55
  _isPaused = false;
63
56
  }
64
57
  }
@@ -124,6 +117,9 @@ function _switchState(state) {
124
117
  // new requested state
125
118
  _startRunLoop();
126
119
 
120
+ // publish the pause event
121
+ event.emit(event.STATE_CHANGE);
122
+
127
123
  // execute callback if defined
128
124
  if (_onSwitchComplete) {
129
125
  _onSwitchComplete();
@@ -253,7 +249,6 @@ var state = {
253
249
  * @name stop
254
250
  * @memberof state
255
251
  * @public
256
- * @function
257
252
  * @param {boolean} [pauseTrack=false] pause current track on screen stop.
258
253
  */
259
254
  stop(pauseTrack=false) {
@@ -280,7 +275,6 @@ var state = {
280
275
  * @name pause
281
276
  * @memberof state
282
277
  * @public
283
- * @function
284
278
  * @param {boolean} [music=false] pause current music track on screen pause
285
279
  */
286
280
  pause(music=false) {
@@ -306,7 +300,6 @@ var state = {
306
300
  * @name restart
307
301
  * @memberof state
308
302
  * @public
309
- * @function
310
303
  * @param {boolean} [music=false] resume current music track on screen resume
311
304
  */
312
305
  restart(music=false) {
@@ -334,7 +327,6 @@ var state = {
334
327
  * @name resume
335
328
  * @memberof state
336
329
  * @public
337
- * @function
338
330
  * @param {boolean} [music=false] resume current music track on screen resume
339
331
  */
340
332
  resume(music=false) {
@@ -359,7 +351,6 @@ var state = {
359
351
  * @name isRunning
360
352
  * @memberof state
361
353
  * @public
362
- * @function
363
354
  * @returns {boolean} true if a "process is running"
364
355
  */
365
356
  isRunning() {
@@ -371,7 +362,6 @@ var state = {
371
362
  * @name isPaused
372
363
  * @memberof state
373
364
  * @public
374
- * @function
375
365
  * @returns {boolean} true if the game is paused
376
366
  */
377
367
  isPaused() {
@@ -383,7 +373,6 @@ var state = {
383
373
  * @name set
384
374
  * @memberof state
385
375
  * @public
386
- * @function
387
376
  * @param {number} state State ID (see constants)
388
377
  * @param {Stage} stage Instantiated Stage to associate with state ID
389
378
  * @param {boolean} [start = false] if true the state will be changed immediately after adding it.
@@ -437,19 +426,34 @@ var state = {
437
426
  }
438
427
  },
439
428
 
429
+ /**
430
+ * returns the stage associated with the specified state
431
+ * (or the current one if none is specified)
432
+ * @name set
433
+ * @memberof state
434
+ * @public
435
+ * @param {number} [state] State ID (see constants)
436
+ * @returns {Stage}
437
+ */
438
+ get(state = _state) {
439
+ if (typeof _stages[state] !== "undefined") {
440
+ return _stages[state].stage;
441
+ } else {
442
+ return undefined;
443
+ }
444
+
445
+ },
446
+
440
447
  /**
441
448
  * return a reference to the current stage<br>
442
449
  * useful to call a object specific method
443
450
  * @name current
444
451
  * @memberof state
445
452
  * @public
446
- * @function
447
453
  * @returns {Stage}
448
454
  */
449
455
  current() {
450
- if (typeof _stages[_state] !== "undefined") {
451
- return _stages[_state].stage;
452
- }
456
+ return this.get();
453
457
  },
454
458
 
455
459
  /**
@@ -457,7 +461,6 @@ var state = {
457
461
  * @name transition
458
462
  * @memberof state
459
463
  * @public
460
- * @function
461
464
  * @param {string} effect (only "fade" is supported for now)
462
465
  * @param {Color|string} color a CSS color value
463
466
  * @param {number} [duration=1000] expressed in milliseconds
@@ -474,7 +477,6 @@ var state = {
474
477
  * @name setTransition
475
478
  * @memberof state
476
479
  * @public
477
- * @function
478
480
  * @param {number} state State ID (see constants)
479
481
  * @param {boolean} enable
480
482
  */
@@ -487,7 +489,6 @@ var state = {
487
489
  * @name change
488
490
  * @memberof state
489
491
  * @public
490
- * @function
491
492
  * @param {number} state State ID (see constants)
492
493
  * @param {boolean} forceChange if true the state will be changed immediately
493
494
  * @param {object} [...arguments] extra arguments to be passed to the reset functions
@@ -511,7 +512,6 @@ var state = {
511
512
  }
512
513
  // if fading effect
513
514
  if (_fade.duration && _stages[state].transition) {
514
- /** @ignore */
515
515
  _onSwitchComplete = () => {
516
516
  game.viewport.fadeOut(_fade.color, _fade.duration);
517
517
  };
@@ -542,7 +542,6 @@ var state = {
542
542
  * @name isCurrent
543
543
  * @memberof state
544
544
  * @public
545
- * @function
546
545
  * @param {number} state State ID (see constants)
547
546
  * @returns {boolean} true if the specified state is the current one
548
547
  */