melonjs 15.13.0 → 15.15.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 (155) hide show
  1. package/README.md +1 -1
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  3. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/index.js +1 -1
  6. package/dist/melonjs.mjs/application/application.js +1 -1
  7. package/dist/melonjs.mjs/application/header.js +1 -1
  8. package/dist/melonjs.mjs/application/resize.js +1 -1
  9. package/dist/melonjs.mjs/application/settings.js +1 -1
  10. package/dist/melonjs.mjs/audio/audio.js +1 -1
  11. package/dist/melonjs.mjs/camera/camera2d.js +1 -1
  12. package/dist/melonjs.mjs/const.js +1 -1
  13. package/dist/melonjs.mjs/geometries/ellipse.js +1 -1
  14. package/dist/melonjs.mjs/geometries/line.js +1 -1
  15. package/dist/melonjs.mjs/geometries/path2d.js +1 -1
  16. package/dist/melonjs.mjs/geometries/point.js +1 -1
  17. package/dist/melonjs.mjs/geometries/poly.js +1 -1
  18. package/dist/melonjs.mjs/geometries/rectangle.js +1 -1
  19. package/dist/melonjs.mjs/geometries/roundrect.js +1 -1
  20. package/dist/melonjs.mjs/index.js +2 -2
  21. package/dist/melonjs.mjs/input/gamepad.js +1 -1
  22. package/dist/melonjs.mjs/input/input.js +1 -1
  23. package/dist/melonjs.mjs/input/keyboard.js +1 -1
  24. package/dist/melonjs.mjs/input/pointer.js +1 -1
  25. package/dist/melonjs.mjs/input/pointerevent.js +1 -1
  26. package/dist/melonjs.mjs/lang/console.js +1 -1
  27. package/dist/melonjs.mjs/lang/deprecated.js +1 -1
  28. package/dist/melonjs.mjs/level/level.js +1 -1
  29. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +1 -1
  30. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +1 -1
  31. package/dist/melonjs.mjs/level/tiled/TMXObject.js +1 -1
  32. package/dist/melonjs.mjs/level/tiled/TMXTile.js +1 -1
  33. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +1 -1
  34. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +1 -1
  35. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +1 -1
  36. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +1 -1
  37. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +1 -1
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  44. package/dist/melonjs.mjs/loader/cache.js +1 -1
  45. package/dist/melonjs.mjs/loader/loader.js +55 -3
  46. package/dist/melonjs.mjs/loader/loadingscreen.js +1 -1
  47. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  48. package/dist/melonjs.mjs/loader/parsers/binary.js +1 -1
  49. package/dist/melonjs.mjs/loader/parsers/fontface.js +1 -1
  50. package/dist/melonjs.mjs/loader/parsers/image.js +6 -1
  51. package/dist/melonjs.mjs/loader/parsers/json.js +6 -1
  52. package/dist/melonjs.mjs/loader/parsers/script.js +1 -1
  53. package/dist/melonjs.mjs/loader/parsers/tmx.js +6 -1
  54. package/dist/melonjs.mjs/loader/settings.js +1 -1
  55. package/dist/melonjs.mjs/math/color.js +1 -1
  56. package/dist/melonjs.mjs/math/math.js +1 -1
  57. package/dist/melonjs.mjs/math/matrix2.js +1 -1
  58. package/dist/melonjs.mjs/math/matrix3.js +1 -1
  59. package/dist/melonjs.mjs/math/observable_vector2.js +1 -1
  60. package/dist/melonjs.mjs/math/observable_vector3.js +1 -1
  61. package/dist/melonjs.mjs/math/vector2.js +1 -1
  62. package/dist/melonjs.mjs/math/vector3.js +1 -1
  63. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +1 -1
  64. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +1 -1
  65. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  66. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +1 -1
  67. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  68. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  69. package/dist/melonjs.mjs/particles/emitter.js +1 -1
  70. package/dist/melonjs.mjs/particles/particle.js +1 -1
  71. package/dist/melonjs.mjs/particles/settings.js +1 -1
  72. package/dist/melonjs.mjs/physics/body.js +1 -1
  73. package/dist/melonjs.mjs/physics/bounds.js +1 -1
  74. package/dist/melonjs.mjs/physics/collision.js +1 -1
  75. package/dist/melonjs.mjs/physics/detector.js +1 -1
  76. package/dist/melonjs.mjs/physics/quadtree.js +1 -1
  77. package/dist/melonjs.mjs/physics/response.js +1 -1
  78. package/dist/melonjs.mjs/physics/sat.js +1 -1
  79. package/dist/melonjs.mjs/physics/world.js +1 -1
  80. package/dist/melonjs.mjs/plugin/plugin.js +3 -3
  81. package/dist/melonjs.mjs/renderable/collectable.js +1 -1
  82. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  83. package/dist/melonjs.mjs/renderable/container.js +1 -1
  84. package/dist/melonjs.mjs/renderable/draggable.js +1 -1
  85. package/dist/melonjs.mjs/renderable/dragndrop.js +1 -1
  86. package/dist/melonjs.mjs/renderable/entity/entity.js +1 -1
  87. package/dist/melonjs.mjs/renderable/imagelayer.js +12 -11
  88. package/dist/melonjs.mjs/renderable/light2d.js +1 -1
  89. package/dist/melonjs.mjs/renderable/nineslicesprite.js +1 -1
  90. package/dist/melonjs.mjs/renderable/renderable.js +19 -1
  91. package/dist/melonjs.mjs/renderable/sprite.js +1 -1
  92. package/dist/melonjs.mjs/renderable/text/bitmaptext.js +3 -3
  93. package/dist/melonjs.mjs/renderable/text/bitmaptextdata.js +1 -1
  94. package/dist/melonjs.mjs/renderable/text/glyph.js +1 -1
  95. package/dist/melonjs.mjs/renderable/text/text.js +1 -1
  96. package/dist/melonjs.mjs/renderable/text/textmetrics.js +1 -1
  97. package/dist/melonjs.mjs/renderable/text/textstyle.js +1 -1
  98. package/dist/melonjs.mjs/renderable/trigger.js +1 -1
  99. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +1 -1
  100. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +1 -1
  101. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +1 -1
  102. package/dist/melonjs.mjs/state/stage.js +1 -1
  103. package/dist/melonjs.mjs/state/state.js +1 -1
  104. package/dist/melonjs.mjs/system/device.js +1 -1
  105. package/dist/melonjs.mjs/system/dom.js +1 -1
  106. package/dist/melonjs.mjs/system/event.js +14 -2
  107. package/dist/melonjs.mjs/system/platform.js +1 -1
  108. package/dist/melonjs.mjs/system/pooling.js +1 -1
  109. package/dist/melonjs.mjs/system/save.js +1 -1
  110. package/dist/melonjs.mjs/system/timer.js +1 -1
  111. package/dist/melonjs.mjs/tweens/easing.js +1 -1
  112. package/dist/melonjs.mjs/tweens/interpolation.js +1 -1
  113. package/dist/melonjs.mjs/tweens/tween.js +1 -1
  114. package/dist/melonjs.mjs/utils/agent.js +1 -1
  115. package/dist/melonjs.mjs/utils/array.js +1 -1
  116. package/dist/melonjs.mjs/utils/file.js +1 -1
  117. package/dist/melonjs.mjs/utils/function.js +1 -1
  118. package/dist/melonjs.mjs/utils/string.js +1 -1
  119. package/dist/melonjs.mjs/utils/utils.js +1 -1
  120. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +1 -1
  121. package/dist/melonjs.mjs/video/renderer.js +1 -1
  122. package/dist/melonjs.mjs/video/texture/atlas.js +1 -1
  123. package/dist/melonjs.mjs/video/texture/cache.js +1 -1
  124. package/dist/melonjs.mjs/video/texture/canvas_texture.js +1 -1
  125. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  126. package/dist/melonjs.mjs/video/video.js +1 -1
  127. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +1 -1
  128. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +1 -1
  129. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +1 -1
  130. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +1 -1
  131. package/dist/melonjs.mjs/video/webgl/glshader.js +1 -1
  132. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  133. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
  134. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  135. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
  136. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +1 -1
  137. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  138. package/dist/melonjs.mjs/video/webgl/utils/program.js +1 -1
  139. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  140. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +1 -1
  141. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1 -1
  142. package/dist/melonjs.module.js +120 -18
  143. package/dist/types/loader/loader.d.ts +28 -0
  144. package/dist/types/renderable/imagelayer.d.ts +1 -1
  145. package/dist/types/renderable/renderable.d.ts +6 -0
  146. package/dist/types/system/event.d.ts +11 -0
  147. package/package.json +15 -15
  148. package/src/loader/loader.js +52 -0
  149. package/src/loader/parsers/image.js +5 -0
  150. package/src/loader/parsers/json.js +5 -0
  151. package/src/loader/parsers/tmx.js +5 -0
  152. package/src/renderable/imagelayer.js +10 -9
  153. package/src/renderable/renderable.js +18 -0
  154. package/src/renderable/text/bitmaptext.js +2 -2
  155. package/src/system/event.js +12 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v15.13.0
2
+ * melonJS Game Engine - v15.15.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -61,8 +61,9 @@ var global$e =
61
61
  // eslint-disable-next-line no-restricted-globals -- safe
62
62
  check(typeof self == 'object' && self) ||
63
63
  check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
64
+ check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
64
65
  // eslint-disable-next-line no-new-func -- fallback
65
- (function () { return this; })() || commonjsGlobal || Function('return this')();
66
+ (function () { return this; })() || Function('return this')();
66
67
 
67
68
  var global$f = /*@__PURE__*/getDefaultExportFromCjs(global$e);
68
69
 
@@ -473,10 +474,10 @@ var store$2 = sharedStore;
473
474
  (shared$5.exports = function (key, value) {
474
475
  return store$2[key] || (store$2[key] = value !== undefined ? value : {});
475
476
  })('versions', []).push({
476
- version: '3.33.0',
477
+ version: '3.33.3',
477
478
  mode: IS_PURE ? 'pure' : 'global',
478
479
  copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',
479
- license: 'https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE',
480
+ license: 'https://github.com/zloirock/core-js/blob/v3.33.3/LICENSE',
480
481
  source: 'https://github.com/zloirock/core-js'
481
482
  });
482
483
 
@@ -9407,6 +9408,18 @@ const LOADER_COMPLETE = "me.loader.onload";
9407
9408
  */
9408
9409
  const LOADER_PROGRESS = "me.loader.onProgress";
9409
9410
 
9411
+ /**
9412
+ * Event for when an error occur during preloading <br>
9413
+ * Data passed : {Resource} resource object<br>
9414
+ * @public
9415
+ * @constant
9416
+ * @type {string}
9417
+ * @name LOADER_ERROR
9418
+ * @memberof event
9419
+ * @see event.on
9420
+ */
9421
+ const LOADER_ERROR = "me.loader.onError";
9422
+
9410
9423
  /**
9411
9424
  * Event for pressing a binded key <br>
9412
9425
  * Data passed : {string} user-defined action, {number} keyCode,
@@ -9735,6 +9748,7 @@ var event = {
9735
9748
  KEYUP: KEYUP,
9736
9749
  LEVEL_LOADED: LEVEL_LOADED,
9737
9750
  LOADER_COMPLETE: LOADER_COMPLETE,
9751
+ LOADER_ERROR: LOADER_ERROR,
9738
9752
  LOADER_PROGRESS: LOADER_PROGRESS,
9739
9753
  ONCONTEXT_LOST: ONCONTEXT_LOST,
9740
9754
  ONCONTEXT_RESTORED: ONCONTEXT_RESTORED,
@@ -17609,6 +17623,9 @@ class Renderable extends Rect {
17609
17623
  // viewport flag
17610
17624
  this._inViewport = false;
17611
17625
 
17626
+ // cache value for the parentApp
17627
+ this._parentApp = undefined;
17628
+
17612
17629
  // renderable cache tint value used by the getter/setter
17613
17630
  this._tint = pool.pull("Color", 255, 255, 255, 1.0);
17614
17631
 
@@ -17616,6 +17633,20 @@ class Renderable extends Rect {
17616
17633
  this.setOpacity(1.0);
17617
17634
  }
17618
17635
 
17636
+ /**
17637
+ * returns the parent application (or game) to which this renderable is attached to
17638
+ * @return {Application} the parent application or undefined if not attached to any container/app
17639
+ */
17640
+ get parentApp() {
17641
+ if (typeof this._parentApp === "undefined") {
17642
+ if (typeof this.ancestor !== "undefined" && typeof this.ancestor.getRootAncestor === "function") {
17643
+ // the `app` property is only defined in the world "root" container
17644
+ this._parentApp = this.ancestor.getRootAncestor().app;
17645
+ }
17646
+ }
17647
+ return this._parentApp;
17648
+ }
17649
+
17619
17650
  /**
17620
17651
  * Whether the renderable object is floating (i.e. used screen coordinates), or contained in a floating parent container
17621
17652
  * @see Renderable#floating
@@ -18141,6 +18172,7 @@ class Renderable extends Rect {
18141
18172
  }
18142
18173
 
18143
18174
  this.ancestor = undefined;
18175
+ this._parentApp = undefined;
18144
18176
 
18145
18177
  // destroy the physic body if defined and is a builtin body object
18146
18178
  if ((typeof this.body !== "undefined") && (typeof this.body.destroy === "function")) {
@@ -19188,6 +19220,11 @@ let jsonList = {};
19188
19220
  * ]);
19189
19221
  */
19190
19222
  function preloadImage(img, onload, onerror) {
19223
+ if (typeof imgList[img.name] !== "undefined") {
19224
+ // already loaded
19225
+ return 0;
19226
+ }
19227
+
19191
19228
  // create new Image object and add to list
19192
19229
  imgList[img.name] = new Image();
19193
19230
  if (typeof onload === "function") {
@@ -26527,6 +26564,11 @@ let level = {
26527
26564
  * @ignore
26528
26565
  */
26529
26566
  function preloadTMX(tmxData, onload, onerror) {
26567
+ if (typeof tmxList[tmxData.name] !== "undefined") {
26568
+ // already loaded
26569
+ return 0;
26570
+ }
26571
+
26530
26572
  /**
26531
26573
  * @ignore
26532
26574
  */
@@ -26642,6 +26684,11 @@ function preloadTMX(tmxData, onload, onerror) {
26642
26684
  * @ignore
26643
26685
  */
26644
26686
  function preloadJSON(data, onload, onerror) {
26687
+ if (typeof jsonList[data.name] !== "undefined") {
26688
+ // already loaded
26689
+ return 0;
26690
+ }
26691
+
26645
26692
  let xmlhttp = new XMLHttpRequest();
26646
26693
 
26647
26694
  if (xmlhttp.overrideMimeType) {
@@ -26810,6 +26857,18 @@ let onload;
26810
26857
  */
26811
26858
  let onProgress;
26812
26859
 
26860
+ /**
26861
+ * onError callback<br>
26862
+ * each time a resource loading is failed, the loader will fire the specified function giving the actual asset as argument.
26863
+ * @default undefined
26864
+ * @memberof loader
26865
+ * @type {function}
26866
+ * @example
26867
+ * // set a callback for error notification
26868
+ * me.loader.onError = this.loaderError.bind(this);
26869
+ */
26870
+ let onError;
26871
+
26813
26872
  /**
26814
26873
  * list of parser function for supported format type
26815
26874
  */
@@ -26825,6 +26884,10 @@ let resourceCount = 0;
26825
26884
  let loadCount = 0;
26826
26885
  let timerId = 0;
26827
26886
 
26887
+ /**
26888
+ * Assets uploaded with an error
26889
+ */
26890
+ const failureLoadedAssets = {};
26828
26891
 
26829
26892
  /**
26830
26893
  * init all supported parsers
@@ -26876,6 +26939,7 @@ function checkLoadStatus(onloadcb) {
26876
26939
  * @ignore
26877
26940
  */
26878
26941
  function onResourceLoaded(res) {
26942
+ delete failureLoadedAssets[res.src];
26879
26943
  // increment the loading counter
26880
26944
  loadCount++;
26881
26945
 
@@ -26892,9 +26956,15 @@ function onResourceLoaded(res) {
26892
26956
 
26893
26957
  /**
26894
26958
  * on error callback for image loading
26959
+ * @param {loader.Asset} asset - asset that loaded with failure
26895
26960
  * @ignore
26896
26961
  */
26897
26962
  function onLoadingError(res) {
26963
+ failureLoadedAssets[res.src] = res;
26964
+ if (this.onError) {
26965
+ this.onError(res);
26966
+ }
26967
+ emit(LOADER_ERROR, res);
26898
26968
  throw new Error("Failed loading resource " + res.src);
26899
26969
  }
26900
26970
 
@@ -27032,6 +27102,35 @@ function preload(assets, onloadcb, switchToLoadState = true) {
27032
27102
  checkLoadStatus(onload);
27033
27103
  }
27034
27104
 
27105
+ /**
27106
+ * retry loading assets after a loading failure
27107
+ * @memberof loader
27108
+ * @param {string} src - src of asset to reload
27109
+ * @example
27110
+ * event.on(
27111
+ * event.LOADER_ERROR,
27112
+ * (res) => {
27113
+ * // custom function
27114
+ * showErrorNotification({
27115
+ * text: `Error during loading content: ${res.name}`,
27116
+ * done: loader.reload(res.src);
27117
+ * })
27118
+ * }
27119
+ * );
27120
+ **/
27121
+ function reload(src) {
27122
+ const assetToReload = failureLoadedAssets[src];
27123
+ this.unload(assetToReload);
27124
+ resourceCount -= 1;
27125
+ resourceCount += this.load(
27126
+ assetToReload,
27127
+ this.onResourceLoaded.bind(this, assetToReload),
27128
+ this.onLoadingError.bind(this, assetToReload)
27129
+ );
27130
+ // check load status
27131
+ checkLoadStatus(this.onload);
27132
+ }
27133
+
27035
27134
  /**
27036
27135
  * Load a single asset (to be used if you need to load additional asset(s) during the game)
27037
27136
  * @memberof loader
@@ -27255,9 +27354,11 @@ var loader = {
27255
27354
  getTMX: getTMX,
27256
27355
  load: load,
27257
27356
  get nocache () { return nocache; },
27357
+ onError: onError,
27258
27358
  onProgress: onProgress,
27259
27359
  get onload () { return onload; },
27260
27360
  preload: preload,
27361
+ reload: reload,
27261
27362
  setBaseURL: setBaseURL,
27262
27363
  setNocache: setNocache,
27263
27364
  setParser: setParser,
@@ -32984,14 +33085,12 @@ class ImageLayer extends Sprite {
32984
33085
  on(VIEWPORT_ONCHANGE, this.updateLayer, this);
32985
33086
  on(VIEWPORT_ONRESIZE, this.resize, this);
32986
33087
  // force a first refresh when the level is loaded
32987
- once(LEVEL_LOADED, () => {
32988
- this.updateLayer(game.viewport.pos);
32989
- });
33088
+ on(LEVEL_LOADED, this.updateLayer, this);
32990
33089
  // in case the level is not added to the root container,
32991
33090
  // the onActivateEvent call happens after the LEVEL_LOADED event
32992
33091
  // so we need to force a first update
32993
33092
  if (this.ancestor.root !== true) {
32994
- this.updateLayer(game.viewport.pos);
33093
+ this.updateLayer();
32995
33094
  }
32996
33095
  }
32997
33096
 
@@ -33019,10 +33118,12 @@ class ImageLayer extends Sprite {
33019
33118
  * updateLayer function
33020
33119
  * @ignore
33021
33120
  */
33022
- updateLayer(vpos) {
33121
+ updateLayer() {
33023
33122
  const rx = this.ratio.x,
33024
33123
  ry = this.ratio.y;
33025
33124
 
33125
+ const viewport = game.viewport;
33126
+
33026
33127
  if (rx === 0 && ry === 0) {
33027
33128
  // static image
33028
33129
  return;
@@ -33030,8 +33131,8 @@ class ImageLayer extends Sprite {
33030
33131
 
33031
33132
  const width = this.width,
33032
33133
  height = this.height,
33033
- bw = game.viewport.bounds.width,
33034
- bh = game.viewport.bounds.height,
33134
+ bw = viewport.bounds.width,
33135
+ bh = viewport.bounds.height,
33035
33136
  ax = this.anchorPoint.x,
33036
33137
  ay = this.anchorPoint.y,
33037
33138
 
@@ -33041,8 +33142,8 @@ class ImageLayer extends Sprite {
33041
33142
  * See https://github.com/melonjs/melonJS/issues/741#issuecomment-138431532
33042
33143
  * for a thorough description of how this works.
33043
33144
  */
33044
- x = ax * (rx - 1) * (bw - game.viewport.width) + this.offset.x - rx * vpos.x,
33045
- y = ay * (ry - 1) * (bh - game.viewport.height) + this.offset.y - ry * vpos.y;
33145
+ x = ax * (rx - 1) * (bw - viewport.width) + this.offset.x - rx * viewport.pos.x,
33146
+ y = ay * (ry - 1) * (bh - viewport.height) + this.offset.y - ry * viewport.pos.y;
33046
33147
 
33047
33148
 
33048
33149
  // Repeat horizontally; start drawing from left boundary
@@ -33123,6 +33224,7 @@ class ImageLayer extends Sprite {
33123
33224
  // cancel all event subscriptions
33124
33225
  off(VIEWPORT_ONCHANGE, this.updateLayer);
33125
33226
  off(VIEWPORT_ONRESIZE, this.resize);
33227
+ off(LEVEL_LOADED, this.updateLayer);
33126
33228
  }
33127
33229
 
33128
33230
  /**
@@ -34432,7 +34534,7 @@ class BitmapText extends Renderable {
34432
34534
  break;
34433
34535
 
34434
34536
  default :
34435
- ax = this.metrics.width * 0.0;
34537
+ ax = 0; //this.metrics.width * 0.0;
34436
34538
  break;
34437
34539
  }
34438
34540
 
@@ -34449,7 +34551,7 @@ class BitmapText extends Renderable {
34449
34551
  break;
34450
34552
 
34451
34553
  default :
34452
- ay = this.metrics.height * 0.0;
34554
+ ay = 0; //this.metrics.height * 0.0;
34453
34555
  break;
34454
34556
  }
34455
34557
 
@@ -38354,9 +38456,9 @@ class BasePlugin {
38354
38456
  * define the minimum required version of melonJS<br>
38355
38457
  * this can be overridden by the plugin
38356
38458
  * @type {string}
38357
- * @default "15.13.0"
38459
+ * @default "15.15.0"
38358
38460
  */
38359
- this.version = "15.13.0";
38461
+ this.version = "15.15.0";
38360
38462
 
38361
38463
  /**
38362
38464
  * a reference to the app/game that registered this plugin
@@ -38638,7 +38740,7 @@ Renderer.prototype.getHeight = function() {
38638
38740
  * @name version
38639
38741
  * @type {string}
38640
38742
  */
38641
- const version = "15.13.0";
38743
+ const version = "15.15.0";
38642
38744
 
38643
38745
  /**
38644
38746
  * a flag indicating that melonJS is fully initialized
@@ -98,6 +98,23 @@ export function setParser(type: string, parserFn: Function): void;
98
98
  * me.loader.preload(game.assets, () => this.loaded());
99
99
  */
100
100
  export function preload(assets: loader.Asset[], onloadcb?: Function | undefined, switchToLoadState?: boolean | undefined): void;
101
+ /**
102
+ * retry loading assets after a loading failure
103
+ * @memberof loader
104
+ * @param {string} src - src of asset to reload
105
+ * @example
106
+ * event.on(
107
+ * event.LOADER_ERROR,
108
+ * (res) => {
109
+ * // custom function
110
+ * showErrorNotification({
111
+ * text: `Error during loading content: ${res.name}`,
112
+ * done: loader.reload(res.src);
113
+ * })
114
+ * }
115
+ * );
116
+ **/
117
+ export function reload(src: string): void;
101
118
  /**
102
119
  * Load a single asset (to be used if you need to load additional asset(s) during the game)
103
120
  * @memberof loader
@@ -185,6 +202,17 @@ export let onload: Function;
185
202
  * me.loader.onProgress = this.updateProgress.bind(this);
186
203
  */
187
204
  export let onProgress: Function;
205
+ /**
206
+ * onError callback<br>
207
+ * each time a resource loading is failed, the loader will fire the specified function giving the actual asset as argument.
208
+ * @default undefined
209
+ * @memberof loader
210
+ * @type {function}
211
+ * @example
212
+ * // set a callback for error notification
213
+ * me.loader.onError = this.loaderError.bind(this);
214
+ */
215
+ export let onError: Function;
188
216
  export namespace loader {
189
217
  /**
190
218
  * an asset definition to be used with the loader
@@ -67,7 +67,7 @@ export default class ImageLayer extends Sprite {
67
67
  * updateLayer function
68
68
  * @ignore
69
69
  */
70
- updateLayer(vpos: any): void;
70
+ updateLayer(): void;
71
71
  /**
72
72
  * override the default predraw function
73
73
  * as repeat and anchor are managed directly in the draw method
@@ -199,7 +199,13 @@ export default class Renderable extends Rect {
199
199
  y: boolean;
200
200
  };
201
201
  _inViewport: boolean;
202
+ _parentApp: any;
202
203
  _tint: object;
204
+ /**
205
+ * returns the parent application (or game) to which this renderable is attached to
206
+ * @return {Application} the parent application or undefined if not attached to any container/app
207
+ */
208
+ get parentApp(): Application;
203
209
  /**
204
210
  * Whether the renderable object is floating (i.e. used screen coordinates), or contained in a floating parent container
205
211
  * @see Renderable#floating
@@ -290,6 +290,17 @@ export const LOADER_COMPLETE: string;
290
290
  * @see event.on
291
291
  */
292
292
  export const LOADER_PROGRESS: string;
293
+ /**
294
+ * Event for when an error occur during preloading <br>
295
+ * Data passed : {Resource} resource object<br>
296
+ * @public
297
+ * @constant
298
+ * @type {string}
299
+ * @name LOADER_ERROR
300
+ * @memberof event
301
+ * @see event.on
302
+ */
303
+ export const LOADER_ERROR: string;
293
304
  /**
294
305
  * Event for pressing a binded key <br>
295
306
  * Data passed : {string} user-defined action, {number} keyCode,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "melonjs",
3
- "version": "15.13.0",
3
+ "version": "15.15.0",
4
4
  "description": "melonJS Game Engine",
5
5
  "homepage": "http://www.melonjs.org/",
6
6
  "type": "module",
@@ -53,36 +53,36 @@
53
53
  ],
54
54
  "dependencies": {
55
55
  "@teppeis/multimaps": "^3.0.0",
56
- "core-js": "^3.33.0",
56
+ "core-js": "^3.33.3",
57
57
  "earcut": "2.2.4",
58
58
  "eventemitter3": "^5.0.1",
59
59
  "howler": "2.2.4"
60
60
  },
61
61
  "devDependencies": {
62
- "@babel/eslint-parser": "^7.22.15",
63
- "@babel/plugin-syntax-import-assertions": "^7.22.5",
64
- "@fastify/static": "^6.11.2",
62
+ "@babel/eslint-parser": "^7.23.3",
63
+ "@babel/plugin-syntax-import-assertions": "^7.23.3",
64
+ "@fastify/static": "^6.12.0",
65
65
  "@melonjs/webdoc-theme": "^1.1.1",
66
- "@rollup/plugin-commonjs": "^25.0.5",
66
+ "@rollup/plugin-commonjs": "^25.0.7",
67
67
  "@rollup/plugin-image": "^3.0.3",
68
- "@rollup/plugin-node-resolve": "^15.2.2",
69
- "@rollup/plugin-replace": "^5.0.3",
68
+ "@rollup/plugin-node-resolve": "^15.2.3",
69
+ "@rollup/plugin-replace": "^5.0.5",
70
70
  "@webdoc/cli": "^2.2.0",
71
- "chromedriver": "^117.0.3",
71
+ "chromedriver": "^119.0.1",
72
72
  "cross-env": "^7.0.3",
73
73
  "del-cli": "^5.1.0",
74
- "eslint": "^8.51.0",
75
- "eslint-plugin-jsdoc": "^46.8.2",
74
+ "eslint": "^8.54.0",
75
+ "eslint-plugin-jsdoc": "^46.9.0",
76
76
  "expect": "^29.7.0",
77
77
  "expect-mocha-image-snapshot": "^3.0.15",
78
- "fastify": "^4.23.2",
78
+ "fastify": "^4.24.3",
79
79
  "mocha": "^10.2.0",
80
80
  "npm-self-link": "^1.1.7",
81
- "puppeteer": "^21.3.8",
82
- "rollup": "^3.29.4",
81
+ "puppeteer": "^21.5.2",
82
+ "rollup": "^4.5.0",
83
83
  "rollup-plugin-bundle-size": "^1.0.3",
84
84
  "rollup-plugin-string": "^3.0.0",
85
- "terser": "^5.21.0",
85
+ "terser": "^5.24.0",
86
86
  "typescript": "^5.2.2"
87
87
  },
88
88
  "scripts": {