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
@@ -45,6 +45,18 @@ export let onload;
45
45
  */
46
46
  export let onProgress;
47
47
 
48
+ /**
49
+ * onError callback<br>
50
+ * each time a resource loading is failed, the loader will fire the specified function giving the actual asset as argument.
51
+ * @default undefined
52
+ * @memberof loader
53
+ * @type {function}
54
+ * @example
55
+ * // set a callback for error notification
56
+ * me.loader.onError = this.loaderError.bind(this);
57
+ */
58
+ export let onError;
59
+
48
60
  /**
49
61
  * list of parser function for supported format type
50
62
  */
@@ -60,6 +72,10 @@ let resourceCount = 0;
60
72
  let loadCount = 0;
61
73
  let timerId = 0;
62
74
 
75
+ /**
76
+ * Assets uploaded with an error
77
+ */
78
+ const failureLoadedAssets = {};
63
79
 
64
80
  /**
65
81
  * init all supported parsers
@@ -111,6 +127,7 @@ function checkLoadStatus(onloadcb) {
111
127
  * @ignore
112
128
  */
113
129
  function onResourceLoaded(res) {
130
+ delete failureLoadedAssets[res.src];
114
131
  // increment the loading counter
115
132
  loadCount++;
116
133
 
@@ -127,9 +144,15 @@ function onResourceLoaded(res) {
127
144
 
128
145
  /**
129
146
  * on error callback for image loading
147
+ * @param {loader.Asset} asset - asset that loaded with failure
130
148
  * @ignore
131
149
  */
132
150
  function onLoadingError(res) {
151
+ failureLoadedAssets[res.src] = res;
152
+ if (this.onError) {
153
+ this.onError(res);
154
+ }
155
+ event.emit(event.LOADER_ERROR, res);
133
156
  throw new Error("Failed loading resource " + res.src);
134
157
  }
135
158
 
@@ -267,6 +290,35 @@ export function preload(assets, onloadcb, switchToLoadState = true) {
267
290
  checkLoadStatus(onload);
268
291
  }
269
292
 
293
+ /**
294
+ * retry loading assets after a loading failure
295
+ * @memberof loader
296
+ * @param {string} src - src of asset to reload
297
+ * @example
298
+ * event.on(
299
+ * event.LOADER_ERROR,
300
+ * (res) => {
301
+ * // custom function
302
+ * showErrorNotification({
303
+ * text: `Error during loading content: ${res.name}`,
304
+ * done: loader.reload(res.src);
305
+ * })
306
+ * }
307
+ * );
308
+ **/
309
+ export function reload(src) {
310
+ const assetToReload = failureLoadedAssets[src];
311
+ this.unload(assetToReload);
312
+ resourceCount -= 1;
313
+ resourceCount += this.load(
314
+ assetToReload,
315
+ this.onResourceLoaded.bind(this, assetToReload),
316
+ this.onLoadingError.bind(this, assetToReload)
317
+ );
318
+ // check load status
319
+ checkLoadStatus(this.onload);
320
+ }
321
+
270
322
  /**
271
323
  * Load a single asset (to be used if you need to load additional asset(s) during the game)
272
324
  * @memberof loader
@@ -17,6 +17,11 @@ import { crossOrigin, nocache } from "../settings.js";
17
17
  * ]);
18
18
  */
19
19
  export function preloadImage(img, onload, onerror) {
20
+ if (typeof imgList[img.name] !== "undefined") {
21
+ // already loaded
22
+ return 0;
23
+ }
24
+
20
25
  // create new Image object and add to list
21
26
  imgList[img.name] = new Image();
22
27
  if (typeof onload === "function") {
@@ -11,6 +11,11 @@ import { nocache, withCredentials } from "../settings.js";
11
11
  * @ignore
12
12
  */
13
13
  export function preloadJSON(data, onload, onerror) {
14
+ if (typeof jsonList[data.name] !== "undefined") {
15
+ // already loaded
16
+ return 0;
17
+ }
18
+
14
19
  let xmlhttp = new XMLHttpRequest();
15
20
 
16
21
  if (xmlhttp.overrideMimeType) {
@@ -15,6 +15,11 @@ import { nocache, withCredentials } from "../settings.js";
15
15
  * @ignore
16
16
  */
17
17
  export function preloadTMX(tmxData, onload, onerror) {
18
+ if (typeof tmxList[tmxData.name] !== "undefined") {
19
+ // already loaded
20
+ return 0;
21
+ }
22
+
18
23
  /**
19
24
  * @ignore
20
25
  */
@@ -124,14 +124,12 @@ export default class ImageLayer extends Sprite {
124
124
  event.on(event.VIEWPORT_ONCHANGE, this.updateLayer, this);
125
125
  event.on(event.VIEWPORT_ONRESIZE, this.resize, this);
126
126
  // force a first refresh when the level is loaded
127
- event.once(event.LEVEL_LOADED, () => {
128
- this.updateLayer(game.viewport.pos);
129
- });
127
+ event.on(event.LEVEL_LOADED, this.updateLayer, this);
130
128
  // in case the level is not added to the root container,
131
129
  // the onActivateEvent call happens after the LEVEL_LOADED event
132
130
  // so we need to force a first update
133
131
  if (this.ancestor.root !== true) {
134
- this.updateLayer(game.viewport.pos);
132
+ this.updateLayer();
135
133
  }
136
134
  }
137
135
 
@@ -159,10 +157,12 @@ export default class ImageLayer extends Sprite {
159
157
  * updateLayer function
160
158
  * @ignore
161
159
  */
162
- updateLayer(vpos) {
160
+ updateLayer() {
163
161
  const rx = this.ratio.x,
164
162
  ry = this.ratio.y;
165
163
 
164
+ const viewport = game.viewport;
165
+
166
166
  if (rx === 0 && ry === 0) {
167
167
  // static image
168
168
  return;
@@ -170,8 +170,8 @@ export default class ImageLayer extends Sprite {
170
170
 
171
171
  const width = this.width,
172
172
  height = this.height,
173
- bw = game.viewport.bounds.width,
174
- bh = game.viewport.bounds.height,
173
+ bw = viewport.bounds.width,
174
+ bh = viewport.bounds.height,
175
175
  ax = this.anchorPoint.x,
176
176
  ay = this.anchorPoint.y,
177
177
 
@@ -181,8 +181,8 @@ export default class ImageLayer extends Sprite {
181
181
  * See https://github.com/melonjs/melonJS/issues/741#issuecomment-138431532
182
182
  * for a thorough description of how this works.
183
183
  */
184
- x = ax * (rx - 1) * (bw - game.viewport.width) + this.offset.x - rx * vpos.x,
185
- y = ay * (ry - 1) * (bh - game.viewport.height) + this.offset.y - ry * vpos.y;
184
+ x = ax * (rx - 1) * (bw - viewport.width) + this.offset.x - rx * viewport.pos.x,
185
+ y = ay * (ry - 1) * (bh - viewport.height) + this.offset.y - ry * viewport.pos.y;
186
186
 
187
187
 
188
188
  // Repeat horizontally; start drawing from left boundary
@@ -263,6 +263,7 @@ export default class ImageLayer extends Sprite {
263
263
  // cancel all event subscriptions
264
264
  event.off(event.VIEWPORT_ONCHANGE, this.updateLayer);
265
265
  event.off(event.VIEWPORT_ONRESIZE, this.resize);
266
+ event.off(event.LEVEL_LOADED, this.updateLayer);
266
267
  }
267
268
 
268
269
  /**
@@ -258,6 +258,9 @@ export default class Renderable extends Rect {
258
258
  // viewport flag
259
259
  this._inViewport = false;
260
260
 
261
+ // cache value for the parentApp
262
+ this._parentApp = undefined;
263
+
261
264
  // renderable cache tint value used by the getter/setter
262
265
  this._tint = pool.pull("Color", 255, 255, 255, 1.0);
263
266
 
@@ -265,6 +268,20 @@ export default class Renderable extends Rect {
265
268
  this.setOpacity(1.0);
266
269
  }
267
270
 
271
+ /**
272
+ * returns the parent application (or game) to which this renderable is attached to
273
+ * @return {Application} the parent application or undefined if not attached to any container/app
274
+ */
275
+ get parentApp() {
276
+ if (typeof this._parentApp === "undefined") {
277
+ if (typeof this.ancestor !== "undefined" && typeof this.ancestor.getRootAncestor === "function") {
278
+ // the `app` property is only defined in the world "root" container
279
+ this._parentApp = this.ancestor.getRootAncestor().app;
280
+ }
281
+ }
282
+ return this._parentApp;
283
+ }
284
+
268
285
  /**
269
286
  * Whether the renderable object is floating (i.e. used screen coordinates), or contained in a floating parent container
270
287
  * @see Renderable#floating
@@ -790,6 +807,7 @@ export default class Renderable extends Rect {
790
807
  }
791
808
 
792
809
  this.ancestor = undefined;
810
+ this._parentApp = undefined;
793
811
 
794
812
  // destroy the physic body if defined and is a builtin body object
795
813
  if ((typeof this.body !== "undefined") && (typeof this.body.destroy === "function")) {
@@ -206,7 +206,7 @@ export default class BitmapText extends Renderable {
206
206
  break;
207
207
 
208
208
  default :
209
- ax = this.metrics.width * 0.0;
209
+ ax = 0; //this.metrics.width * 0.0;
210
210
  break;
211
211
  }
212
212
 
@@ -223,7 +223,7 @@ export default class BitmapText extends Renderable {
223
223
  break;
224
224
 
225
225
  default :
226
- ay = this.metrics.height * 0.0;
226
+ ay = 0; //this.metrics.height * 0.0;
227
227
  break;
228
228
  }
229
229
 
@@ -279,6 +279,18 @@ export const LOADER_COMPLETE = "me.loader.onload";
279
279
  */
280
280
  export const LOADER_PROGRESS = "me.loader.onProgress";
281
281
 
282
+ /**
283
+ * Event for when an error occur during preloading <br>
284
+ * Data passed : {Resource} resource object<br>
285
+ * @public
286
+ * @constant
287
+ * @type {string}
288
+ * @name LOADER_ERROR
289
+ * @memberof event
290
+ * @see event.on
291
+ */
292
+ export const LOADER_ERROR = "me.loader.onError";
293
+
282
294
  /**
283
295
  * Event for pressing a binded key <br>
284
296
  * Data passed : {string} user-defined action, {number} keyCode,