melonjs 14.5.0 → 15.1.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 (315) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +6 -6
  3. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/arraymultimap.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  6. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  7. package/dist/melonjs.mjs/_virtual/index.js +7 -3
  8. package/dist/melonjs.mjs/_virtual/index2.js +1 -1
  9. package/dist/melonjs.mjs/_virtual/multimap.js +1 -1
  10. package/dist/melonjs.mjs/_virtual/setmultimap.js +1 -1
  11. package/dist/melonjs.mjs/application/application.js +27 -17
  12. package/dist/melonjs.mjs/application/header.js +6 -5
  13. package/dist/melonjs.mjs/application/resize.js +20 -20
  14. package/dist/melonjs.mjs/application/settings.js +1 -1
  15. package/dist/melonjs.mjs/audio/audio.js +18 -20
  16. package/dist/melonjs.mjs/camera/camera2d.js +10 -10
  17. package/dist/melonjs.mjs/const.js +1 -1
  18. package/dist/melonjs.mjs/entity/entity.js +4 -4
  19. package/dist/melonjs.mjs/geometries/ellipse.js +6 -6
  20. package/dist/melonjs.mjs/geometries/line.js +9 -9
  21. package/dist/melonjs.mjs/geometries/path2d.js +56 -56
  22. package/dist/melonjs.mjs/geometries/point.js +2 -2
  23. package/dist/melonjs.mjs/geometries/poly.js +29 -29
  24. package/dist/melonjs.mjs/geometries/rectangle.js +8 -8
  25. package/dist/melonjs.mjs/geometries/roundrect.js +6 -6
  26. package/dist/melonjs.mjs/index.js +8 -6
  27. package/dist/melonjs.mjs/input/gamepad.js +30 -30
  28. package/dist/melonjs.mjs/input/input.js +2 -2
  29. package/dist/melonjs.mjs/input/keyboard.js +15 -15
  30. package/dist/melonjs.mjs/input/pointer.js +2 -2
  31. package/dist/melonjs.mjs/input/pointerevent.js +59 -59
  32. package/dist/melonjs.mjs/lang/console.js +3 -3
  33. package/dist/melonjs.mjs/lang/deprecated.js +2 -2
  34. package/dist/melonjs.mjs/level/level.js +9 -9
  35. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +3 -3
  36. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +31 -31
  37. package/dist/melonjs.mjs/level/tiled/TMXObject.js +8 -8
  38. package/dist/melonjs.mjs/level/tiled/TMXTile.js +8 -8
  39. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +19 -19
  40. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +15 -15
  41. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +3 -3
  42. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +46 -41
  43. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  44. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +30 -30
  45. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +21 -21
  46. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +10 -10
  47. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +2 -2
  48. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +6 -6
  49. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  50. package/dist/melonjs.mjs/loader/cache.js +1 -1
  51. package/dist/melonjs.mjs/loader/loader.js +7 -7
  52. package/dist/melonjs.mjs/loader/loadingscreen.js +2 -2
  53. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  54. package/dist/melonjs.mjs/loader/parser.js +13 -13
  55. package/dist/melonjs.mjs/loader/settings.js +3 -3
  56. package/dist/melonjs.mjs/math/color.js +25 -24
  57. package/dist/melonjs.mjs/math/math.js +2 -2
  58. package/dist/melonjs.mjs/math/matrix2.js +22 -22
  59. package/dist/melonjs.mjs/math/matrix3.js +52 -52
  60. package/dist/melonjs.mjs/math/observable_vector2.js +12 -12
  61. package/dist/melonjs.mjs/math/observable_vector3.js +22 -22
  62. package/dist/melonjs.mjs/math/vector2.js +11 -11
  63. package/dist/melonjs.mjs/math/vector3.js +21 -21
  64. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +45 -0
  65. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +130 -0
  66. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +1 -1
  67. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +1 -1
  68. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +1 -1
  69. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +1 -1
  70. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  71. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +2 -2
  72. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  73. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  74. package/dist/melonjs.mjs/particles/emitter.js +5 -5
  75. package/dist/melonjs.mjs/particles/particle.js +8 -8
  76. package/dist/melonjs.mjs/particles/settings.js +3 -3
  77. package/dist/melonjs.mjs/physics/body.js +17 -17
  78. package/dist/melonjs.mjs/physics/bounds.js +12 -12
  79. package/dist/melonjs.mjs/physics/collision.js +3 -3
  80. package/dist/melonjs.mjs/physics/detector.js +14 -14
  81. package/dist/melonjs.mjs/physics/quadtree.js +19 -19
  82. package/dist/melonjs.mjs/physics/response.js +1 -1
  83. package/dist/melonjs.mjs/physics/sat.js +60 -60
  84. package/dist/melonjs.mjs/physics/world.js +4 -4
  85. package/dist/melonjs.mjs/plugin/plugin.js +11 -11
  86. package/dist/melonjs.mjs/renderable/collectable.js +2 -2
  87. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  88. package/dist/melonjs.mjs/renderable/container.js +77 -59
  89. package/dist/melonjs.mjs/renderable/dragndrop.js +5 -5
  90. package/dist/melonjs.mjs/renderable/imagelayer.js +7 -6
  91. package/dist/melonjs.mjs/renderable/light2d.js +6 -6
  92. package/dist/melonjs.mjs/renderable/nineslicesprite.js +12 -12
  93. package/dist/melonjs.mjs/renderable/renderable.js +35 -13
  94. package/dist/melonjs.mjs/renderable/sprite.js +25 -25
  95. package/dist/melonjs.mjs/renderable/trigger.js +11 -9
  96. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +97 -27
  97. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +25 -25
  98. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +83 -65
  99. package/dist/melonjs.mjs/state/stage.js +7 -7
  100. package/dist/melonjs.mjs/state/state.js +15 -15
  101. package/dist/melonjs.mjs/system/device.js +3 -3
  102. package/dist/melonjs.mjs/system/dom.js +1 -1
  103. package/dist/melonjs.mjs/system/event.js +2 -2
  104. package/dist/melonjs.mjs/system/platform.js +1 -1
  105. package/dist/melonjs.mjs/system/pooling.js +9 -9
  106. package/dist/melonjs.mjs/system/save.js +6 -6
  107. package/dist/melonjs.mjs/system/timer.js +16 -12
  108. package/dist/melonjs.mjs/text/bitmaptext.js +20 -20
  109. package/dist/melonjs.mjs/text/bitmaptextdata.js +22 -22
  110. package/dist/melonjs.mjs/text/glyph.js +3 -3
  111. package/dist/melonjs.mjs/text/text.js +63 -92
  112. package/dist/melonjs.mjs/text/textmetrics.js +15 -15
  113. package/dist/melonjs.mjs/text/textstyle.js +4 -6
  114. package/dist/melonjs.mjs/tweens/easing.js +4 -4
  115. package/dist/melonjs.mjs/tweens/interpolation.js +8 -8
  116. package/dist/melonjs.mjs/tweens/tween.js +11 -11
  117. package/dist/melonjs.mjs/utils/agent.js +6 -6
  118. package/dist/melonjs.mjs/utils/array.js +4 -4
  119. package/dist/melonjs.mjs/utils/file.js +1 -1
  120. package/dist/melonjs.mjs/utils/function.js +5 -5
  121. package/dist/melonjs.mjs/utils/string.js +3 -3
  122. package/dist/melonjs.mjs/utils/utils.js +16 -16
  123. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +41 -119
  124. package/dist/melonjs.mjs/video/renderer.js +70 -14
  125. package/dist/melonjs.mjs/video/texture/atlas.js +39 -45
  126. package/dist/melonjs.mjs/video/texture/cache.js +9 -10
  127. package/dist/melonjs.mjs/video/texture/canvas_texture.js +63 -3
  128. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  129. package/dist/melonjs.mjs/video/video.js +2 -2
  130. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +23 -19
  131. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +80 -80
  132. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +77 -0
  133. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +252 -0
  134. package/dist/melonjs.mjs/video/webgl/compositors/webgl_compositor.js +1 -1
  135. package/dist/melonjs.mjs/video/webgl/glshader.js +7 -7
  136. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  137. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +2 -2
  138. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  139. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +2 -2
  140. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +2 -2
  141. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  142. package/dist/melonjs.mjs/video/webgl/utils/program.js +7 -7
  143. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  144. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +4 -4
  145. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +188 -181
  146. package/dist/melonjs.module.js +25040 -25193
  147. package/dist/types/application/application.d.ts +11 -8
  148. package/dist/types/audio/audio.d.ts +3 -3
  149. package/dist/types/entity/entity.d.ts +1 -1
  150. package/dist/types/index.d.ts +7 -4
  151. package/dist/types/input/input.d.ts +1 -1
  152. package/dist/types/input/keyboard.d.ts +1 -1
  153. package/dist/types/input/pointerevent.d.ts +6 -6
  154. package/dist/types/level/level.d.ts +2 -2
  155. package/dist/types/level/tiled/TMXLayer.d.ts +4 -4
  156. package/dist/types/level/tiled/TMXTileMap.d.ts +2 -2
  157. package/dist/types/level/tiled/TMXUtils.d.ts +5 -4
  158. package/dist/types/loader/loader.d.ts +2 -2
  159. package/dist/types/loader/settings.d.ts +2 -2
  160. package/dist/types/particles/emitter.d.ts +1 -1
  161. package/dist/types/physics/collision.d.ts +1 -1
  162. package/dist/types/physics/detector.d.ts +1 -1
  163. package/dist/types/plugin/plugin.d.ts +2 -2
  164. package/dist/types/renderable/container.d.ts +21 -17
  165. package/dist/types/renderable/renderable.d.ts +6 -0
  166. package/dist/types/renderable/sprite.d.ts +11 -11
  167. package/dist/types/renderable/trigger.d.ts +1 -1
  168. package/dist/types/renderable/ui/uibaseelement.d.ts +28 -6
  169. package/dist/types/renderable/ui/uispriteelement.d.ts +12 -14
  170. package/dist/types/renderable/ui/uitextbutton.d.ts +52 -12
  171. package/dist/types/state/stage.d.ts +1 -1
  172. package/dist/types/system/device.d.ts +1 -1
  173. package/dist/types/system/pooling.d.ts +3 -3
  174. package/dist/types/system/timer.d.ts +5 -5
  175. package/dist/types/text/bitmaptext.d.ts +1 -1
  176. package/dist/types/text/text.d.ts +7 -21
  177. package/dist/types/text/textstyle.d.ts +1 -1
  178. package/dist/types/utils/array.d.ts +2 -2
  179. package/dist/types/video/canvas/canvas_renderer.d.ts +8 -81
  180. package/dist/types/video/renderer.d.ts +48 -4
  181. package/dist/types/video/texture/atlas.d.ts +3 -3
  182. package/dist/types/video/texture/canvas_texture.d.ts +40 -0
  183. package/dist/types/video/webgl/buffer/vertex.d.ts +3 -3
  184. package/dist/types/video/webgl/compositors/compositor.d.ts +38 -32
  185. package/dist/types/video/webgl/compositors/primitive_compositor.d.ts +22 -0
  186. package/dist/types/video/webgl/compositors/quad_compositor.d.ts +72 -0
  187. package/dist/types/video/webgl/glshader.d.ts +1 -1
  188. package/dist/types/video/webgl/webgl_renderer.d.ts +47 -37
  189. package/package.json +16 -17
  190. package/src/application/application.js +26 -16
  191. package/src/application/header.js +5 -4
  192. package/src/application/resize.js +19 -19
  193. package/src/audio/audio.js +17 -19
  194. package/src/camera/camera2d.js +9 -9
  195. package/src/entity/entity.js +3 -3
  196. package/src/geometries/ellipse.js +5 -5
  197. package/src/geometries/line.js +8 -8
  198. package/src/geometries/path2d.js +55 -55
  199. package/src/geometries/point.js +1 -1
  200. package/src/geometries/poly.js +28 -28
  201. package/src/geometries/rectangle.js +7 -7
  202. package/src/geometries/roundrect.js +5 -5
  203. package/src/index.js +9 -4
  204. package/src/input/gamepad.js +29 -29
  205. package/src/input/input.js +1 -1
  206. package/src/input/keyboard.js +14 -14
  207. package/src/input/pointer.js +1 -1
  208. package/src/input/pointerevent.js +52 -52
  209. package/src/lang/console.js +2 -2
  210. package/src/lang/deprecated.js +1 -1
  211. package/src/level/level.js +8 -8
  212. package/src/level/tiled/TMXGroup.js +2 -2
  213. package/src/level/tiled/TMXLayer.js +30 -30
  214. package/src/level/tiled/TMXObject.js +7 -7
  215. package/src/level/tiled/TMXTile.js +7 -7
  216. package/src/level/tiled/TMXTileMap.js +18 -18
  217. package/src/level/tiled/TMXTileset.js +14 -14
  218. package/src/level/tiled/TMXTilesetGroup.js +2 -2
  219. package/src/level/tiled/TMXUtils.js +45 -40
  220. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +29 -29
  221. package/src/level/tiled/renderer/TMXIsometricRenderer.js +20 -20
  222. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +9 -9
  223. package/src/level/tiled/renderer/TMXRenderer.js +1 -1
  224. package/src/level/tiled/renderer/TMXStaggeredRenderer.js +5 -5
  225. package/src/loader/loader.js +6 -6
  226. package/src/loader/loadingscreen.js +1 -1
  227. package/src/loader/parser.js +12 -12
  228. package/src/loader/settings.js +2 -2
  229. package/src/math/color.js +24 -23
  230. package/src/math/math.js +1 -1
  231. package/src/math/matrix2.js +21 -21
  232. package/src/math/matrix3.js +51 -51
  233. package/src/math/observable_vector2.js +11 -11
  234. package/src/math/observable_vector3.js +21 -21
  235. package/src/math/vector2.js +10 -10
  236. package/src/math/vector3.js +20 -20
  237. package/src/particles/emitter.js +4 -4
  238. package/src/particles/particle.js +7 -7
  239. package/src/particles/settings.js +2 -2
  240. package/src/physics/body.js +16 -16
  241. package/src/physics/bounds.js +11 -11
  242. package/src/physics/collision.js +2 -2
  243. package/src/physics/detector.js +13 -13
  244. package/src/physics/quadtree.js +18 -18
  245. package/src/physics/sat.js +59 -59
  246. package/src/physics/world.js +3 -3
  247. package/src/plugin/plugin.js +8 -8
  248. package/src/polyfill/index.js +0 -2
  249. package/src/renderable/collectable.js +1 -1
  250. package/src/renderable/container.js +76 -58
  251. package/src/renderable/dragndrop.js +4 -4
  252. package/src/renderable/imagelayer.js +6 -5
  253. package/src/renderable/light2d.js +5 -5
  254. package/src/renderable/nineslicesprite.js +11 -11
  255. package/src/renderable/renderable.js +34 -12
  256. package/src/renderable/sprite.js +24 -24
  257. package/src/renderable/trigger.js +10 -8
  258. package/src/renderable/ui/uibaseelement.js +96 -26
  259. package/src/renderable/ui/uispriteelement.js +24 -24
  260. package/src/renderable/ui/uitextbutton.js +85 -67
  261. package/src/state/stage.js +6 -6
  262. package/src/state/state.js +14 -14
  263. package/src/system/device.js +2 -2
  264. package/src/system/event.js +1 -1
  265. package/src/system/pooling.js +8 -8
  266. package/src/system/save.js +5 -5
  267. package/src/system/timer.js +15 -11
  268. package/src/text/bitmaptext.js +19 -19
  269. package/src/text/bitmaptextdata.js +21 -21
  270. package/src/text/glyph.js +2 -2
  271. package/src/text/text.js +62 -91
  272. package/src/text/textmetrics.js +14 -14
  273. package/src/text/textstyle.js +3 -5
  274. package/src/tweens/easing.js +3 -3
  275. package/src/tweens/interpolation.js +7 -7
  276. package/src/tweens/tween.js +10 -10
  277. package/src/utils/agent.js +5 -5
  278. package/src/utils/array.js +3 -3
  279. package/src/utils/function.js +4 -4
  280. package/src/utils/string.js +2 -2
  281. package/src/utils/utils.js +15 -15
  282. package/src/video/canvas/canvas_renderer.js +39 -117
  283. package/src/video/renderer.js +68 -12
  284. package/src/video/texture/atlas.js +38 -44
  285. package/src/video/texture/cache.js +6 -6
  286. package/src/video/texture/canvas_texture.js +62 -2
  287. package/src/video/video.js +1 -1
  288. package/src/video/webgl/buffer/vertex.js +22 -18
  289. package/src/video/webgl/compositors/compositor.js +79 -80
  290. package/src/video/webgl/compositors/primitive_compositor.js +68 -0
  291. package/src/video/webgl/compositors/{webgl_compositor.js → quad_compositor.js} +52 -109
  292. package/src/video/webgl/glshader.js +6 -6
  293. package/src/video/webgl/shaders/primitive.vert +2 -5
  294. package/src/video/webgl/shaders/quad.vert +3 -1
  295. package/src/video/webgl/utils/attributes.js +1 -1
  296. package/src/video/webgl/utils/program.js +6 -6
  297. package/src/video/webgl/utils/uniforms.js +3 -3
  298. package/src/video/webgl/webgl_renderer.js +186 -179
  299. package/dist/melonjs.mjs/_virtual/make-built-in.js +0 -10
  300. package/dist/melonjs.mjs/_virtual/object-define-property.js +0 -10
  301. package/dist/melonjs.mjs/_virtual/object-get-own-property-descriptor.js +0 -10
  302. package/dist/melonjs.mjs/_virtual/object-get-own-property-names.js +0 -10
  303. package/dist/melonjs.mjs/_virtual/object-get-own-property-symbols.js +0 -10
  304. package/dist/melonjs.mjs/_virtual/object-property-is-enumerable.js +0 -10
  305. package/dist/melonjs.mjs/_virtual/shared.js +0 -10
  306. package/dist/melonjs.mjs/game.js +0 -29
  307. package/dist/melonjs.mjs/polyfill/console.js +0 -18
  308. package/dist/melonjs.mjs/polyfill/performance.js +0 -27
  309. package/dist/melonjs.mjs/polyfill/requestAnimationFrame.js +0 -46
  310. package/dist/melonjs.mjs/polyfill/roundrect.js +0 -242
  311. package/dist/melonjs.mjs/renderable/re_container.js +0 -1016
  312. package/dist/melonjs.mjs/video/utils/resize.js +0 -116
  313. package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +0 -494
  314. package/src/polyfill/performance.js +0 -20
  315. package/src/polyfill/requestAnimationFrame.js +0 -39
@@ -27,13 +27,14 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
27
27
  * @param {number|string} [options.scale=1.0] - enable scaling of the canvas ('auto' for automatic scaling)
28
28
  * @param {string} [options.scaleMethod="fit"] - screen scaling modes ('fit','fill-min','fill-max','flex','flex-width','flex-height','stretch')
29
29
  * @param {boolean} [options.preferWebGL1=false] - if true the renderer will only use WebGL 1
30
+ * @param {boolean} [options.depthTest="sorting"] - ~Experimental~ the default method to sort object on the z axis in WebGL ("sorting", "z-buffer")
30
31
  * @param {string} [options.powerPreference="default"] - a hint to the user agent indicating what configuration of GPU is suitable for the WebGL context ("default", "high-performance", "low-power"). To be noted that Safari and Chrome (since version 80) both default to "low-power" to save battery life and improve the user experience on these dual-GPU machines.
31
32
  * @param {boolean} [options.transparent=false] - whether to allow transparent pixels in the front buffer (screen).
32
33
  * @param {boolean} [options.antiAlias=false] - whether to enable or not video scaling interpolation
33
34
  * @param {boolean} [options.consoleHeader=true] - whether to display melonJS version and basic device information in the console
34
35
  * @throws Will throw an exception if it fails to instantiate a renderer
35
36
  * @example
36
- * var my game = new Application(640, 480, {renderer: me.video.AUTO}) {
37
+ * let my game = new Application(640, 480, {renderer: me.video.AUTO}) {
37
38
  * ....
38
39
  * }
39
40
  */
@@ -72,14 +73,6 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
72
73
  */
73
74
  this.mergeGroup = true;
74
75
 
75
- /**
76
- * Specify the property to be used when sorting renderables.
77
- * Accepted values : "x", "y", "z"
78
- * @type {string}
79
- * @default "z"
80
- */
81
- this.sortOn = "z";
82
-
83
76
  /**
84
77
  * Last time the game update loop was executed. <br>
85
78
  * Use this value to implement frame prediction in drawing events,
@@ -144,6 +137,7 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
144
137
  this.settings.transparent = !!(this.settings.transparent);
145
138
  this.settings.antiAlias = !!(this.settings.antiAlias);
146
139
  this.settings.failIfMajorPerformanceCaveat = !!(this.settings.failIfMajorPerformanceCaveat);
140
+ this.settings.depthTest = this.settings.depthTest === "z-buffer" ? "z-buffer" : "sorting";
147
141
  this.settings.subPixel = !!(this.settings.subPixel);
148
142
  this.settings.verbose = !!(this.settings.verbose);
149
143
  if (this.settings.scaleMethod.search(/^(fill-(min|max)|fit|flex(-(width|height))?|stretch)$/) !== -1) {
@@ -155,7 +149,7 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
155
149
  }
156
150
 
157
151
  // override renderer settings if &webgl or &canvas is defined in the URL
158
- var uriFragment = utils.getUriFragment();
152
+ let uriFragment = utils.getUriFragment();
159
153
  if (uriFragment.webgl === true || uriFragment.webgl1 === true || uriFragment.webgl2 === true) {
160
154
  this.settings.renderer = WEBGL;
161
155
  if (uriFragment.webgl1 === true) {
@@ -183,14 +177,14 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
183
177
  break;
184
178
  }
185
179
  } else {
186
- var CustomRenderer = this.settings.renderer;
180
+ let CustomRenderer = this.settings.renderer;
187
181
  // a renderer class
188
182
  this.renderer = new CustomRenderer(this.settings);
189
183
  }
190
184
 
191
185
  // register to the channel
192
- event.on(event.WINDOW_ONRESIZE, () => { onresize(this); }, this);
193
- event.on(event.WINDOW_ONORIENTATION_CHANGE, () => { onresize(this); }, this);
186
+ event.on(event.WINDOW_ONRESIZE, () => onresize(this), this);
187
+ event.on(event.WINDOW_ONORIENTATION_CHANGE, () => onresize(this), this);
194
188
 
195
189
  // add our canvas (default to document.body if settings.parent is undefined)
196
190
  this.parentElement = device.getElement(this.settings.parent);
@@ -208,7 +202,7 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
208
202
  // add an observer to detect when the dom tree is modified
209
203
  if ("MutationObserver" in globalThis) {
210
204
  // Create an observer instance linked to the callback function
211
- var observer = new MutationObserver(onresize.bind(this, this));
205
+ let observer = new MutationObserver(() => onresize(this));
212
206
 
213
207
  // Start observing the target node for configured mutations
214
208
  observer.observe(this.parentElement, {
@@ -221,10 +215,13 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
221
215
  }
222
216
 
223
217
  // create a new physic world
224
- this.world = new World();
218
+ this.world = new World(0, 0, this.settings.width, this.settings.height);
225
219
  // set the reference to this application instance
226
220
  this.world.app = this;
221
+ // app starting time
227
222
  this.lastUpdate = globalThis.performance.now();
223
+ // manually sort child if depthTest setting is "sorting"
224
+ this.world.autoSort = !(this.renderer.type === "WEBGL" && this.settings.depthTest === "z-buffer");
228
225
 
229
226
  this.isInitialized = true;
230
227
 
@@ -237,7 +234,7 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
237
234
  */
238
235
  reset() {
239
236
  // point to the current active stage "default" camera
240
- var current = state.get();
237
+ let current = state.get();
241
238
  if (typeof current !== "undefined") {
242
239
  this.viewport = current.cameras.get("default");
243
240
  }
@@ -249,6 +246,19 @@ import { CANVAS, WEBGL, AUTO } from "../const.js";
249
246
  this.updateFrameRate();
250
247
  }
251
248
 
249
+ /**
250
+ * Specify the property to be used when sorting renderables for this application game world.
251
+ * Accepted values : "x", "y", "z", "depth"
252
+ * @type {string}
253
+ * @see World.sortOn
254
+ */
255
+ get sortOn() {
256
+ return this.world.sortOn;
257
+ }
258
+ set sortOn(value) {
259
+ this.world.sortOn = value;
260
+ }
261
+
252
262
  /**
253
263
  * Fired when a level is fully loaded and all renderable instantiated. <br>
254
264
  * Additionnaly the level id will also be passed to the called function.
@@ -5,13 +5,14 @@ import * as device from "../system/device";
5
5
  * @param {Application} game - the game application instance calling this function
6
6
  */
7
7
  export function consoleHeader(app) {
8
- var renderType = app.renderer.type;
9
- var gpu_renderer = (typeof app.renderer.GPURenderer === "string") ? " (" + app.renderer.GPURenderer + ")" : "";
10
- var audioType = device.hasWebAudio ? "Web Audio" : "HTML5 Audio";
8
+ let renderType = app.renderer.type;
9
+ let gpu_renderer = (typeof app.renderer.GPURenderer === "string") ? " (" + app.renderer.GPURenderer + ")" : "";
10
+ let depthTesting = renderType.includes("WebGL") && app.renderer.depthTest === "z-buffer" ? "Depth Test | " : "";
11
+ let audioType = device.hasWebAudio ? "Web Audio" : "HTML5 Audio";
11
12
 
12
13
  // output video information in the console
13
14
  console.log(
14
- renderType + " renderer" + gpu_renderer + " | " +
15
+ renderType + " renderer" + gpu_renderer + " | " + depthTesting +
15
16
  audioType + " | " +
16
17
  "pixel ratio " + device.devicePixelRatio + " | " +
17
18
  (device.platform.nodeJS ? "node.js" : device.platform.isMobile ? "mobile" : "desktop") + " | " +
@@ -10,14 +10,14 @@ import * as device from "./../system/device";
10
10
  * @param {number} y - y scaling multiplier
11
11
  */
12
12
  function scale(game, x, y) {
13
- var renderer = game.renderer;
14
- var canvas = renderer.getCanvas();
15
- var context = renderer.getContext();
16
- var settings = renderer.settings;
17
- var pixelRatio = device.devicePixelRatio;
13
+ let renderer = game.renderer;
14
+ let canvas = renderer.getCanvas();
15
+ let context = renderer.getContext();
16
+ let settings = renderer.settings;
17
+ let pixelRatio = device.devicePixelRatio;
18
18
 
19
- var w = settings.zoomX = canvas.width * x * pixelRatio;
20
- var h = settings.zoomY = canvas.height * y * pixelRatio;
19
+ let w = settings.zoomX = canvas.width * x * pixelRatio;
20
+ let h = settings.zoomY = canvas.height * y * pixelRatio;
21
21
 
22
22
  // update the global scale variable
23
23
  renderer.scaleRatio.set(x * pixelRatio, y * pixelRatio);
@@ -40,37 +40,37 @@ function scale(game, x, y) {
40
40
  * @param {Application} game - the game application instance triggering the resize
41
41
  */
42
42
  export function onresize(game) {
43
- var renderer = game.renderer;
44
- var settings = renderer.settings;
45
- var scaleX = 1, scaleY = 1;
43
+ let renderer = game.renderer;
44
+ let settings = renderer.settings;
45
+ let scaleX = 1, scaleY = 1;
46
46
 
47
47
  if (settings.autoScale) {
48
48
 
49
49
  // set max the canvas max size if CSS values are defined
50
- var canvasMaxWidth = Infinity;
51
- var canvasMaxHeight = Infinity;
50
+ let canvasMaxWidth = Infinity;
51
+ let canvasMaxHeight = Infinity;
52
52
 
53
53
  if (globalThis.getComputedStyle) {
54
- var style = globalThis.getComputedStyle(renderer.getCanvas(), null);
54
+ let style = globalThis.getComputedStyle(renderer.getCanvas(), null);
55
55
  canvasMaxWidth = parseInt(style.maxWidth, 10) || Infinity;
56
56
  canvasMaxHeight = parseInt(style.maxHeight, 10) || Infinity;
57
57
  }
58
58
 
59
59
  // get the maximum canvas size within the parent div containing the canvas container
60
- var nodeBounds = device.getParentBounds(game.getParentElement());
60
+ let nodeBounds = device.getParentBounds(game.getParentElement());
61
61
 
62
- var _max_width = Math.min(canvasMaxWidth, nodeBounds.width);
63
- var _max_height = Math.min(canvasMaxHeight, nodeBounds.height);
62
+ let _max_width = Math.min(canvasMaxWidth, nodeBounds.width);
63
+ let _max_height = Math.min(canvasMaxHeight, nodeBounds.height);
64
64
 
65
65
  // calculate final canvas width & height
66
- var screenRatio = _max_width / _max_height;
66
+ let screenRatio = _max_width / _max_height;
67
67
 
68
68
  if ((settings.scaleMethod === "fill-min" && screenRatio > renderer.designRatio) ||
69
69
  (settings.scaleMethod === "fill-max" && screenRatio < renderer.designRatio) ||
70
70
  (settings.scaleMethod === "flex-width")
71
71
  ) {
72
72
  // resize the display canvas to fill the parent container
73
- var sWidth = Math.min(canvasMaxWidth, settings.height * screenRatio);
73
+ let sWidth = Math.min(canvasMaxWidth, settings.height * screenRatio);
74
74
  scaleX = scaleY = _max_width / sWidth;
75
75
  renderer.resize(Math.floor(sWidth), settings.height);
76
76
  }
@@ -79,7 +79,7 @@ export function onresize(game) {
79
79
  (settings.scaleMethod === "flex-height")
80
80
  ) {
81
81
  // resize the display canvas to fill the parent container
82
- var sHeight = Math.min(canvasMaxHeight, settings.width * (_max_height / _max_width));
82
+ let sHeight = Math.min(canvasMaxHeight, settings.width * (_max_height / _max_width));
83
83
  scaleX = scaleY = _max_height / sHeight;
84
84
  renderer.resize(settings.width, Math.floor(sHeight));
85
85
  }
@@ -40,7 +40,7 @@ let soundLoadError = function (sound_name, onerror_cb) {
40
40
  // check the retry counter
41
41
  if (retry_counter++ > 3) {
42
42
  // something went wrong
43
- var errmsg = "melonJS: failed loading " + sound_name;
43
+ let errmsg = "melonJS: failed loading " + sound_name;
44
44
  if (stopOnAudioError === false) {
45
45
  // disable audio
46
46
  disable();
@@ -146,14 +146,14 @@ export function disable() {
146
146
  * @ignore
147
147
  */
148
148
  export function load(sound, html5, onload_cb, onerror_cb) {
149
- var urls = [];
149
+ let urls = [];
150
150
  if (audioExts.length === 0) {
151
151
  throw new Error("target audio extension(s) should be set through me.audio.init() before calling the preloader.");
152
152
  }
153
153
  if (isDataUrl(sound.src) === true) {
154
154
  urls.push(sound.src);
155
155
  } else {
156
- for (var i = 0; i < audioExts.length; i++) {
156
+ for (let i = 0; i < audioExts.length; i++) {
157
157
  urls.push(sound.src + sound.name + "." + audioExts[i] + nocache);
158
158
  }
159
159
  }
@@ -202,9 +202,9 @@ export function load(sound, html5, onload_cb, onerror_cb) {
202
202
  * me.audio.play("gameover_sfx", false, null, 0.5);
203
203
  */
204
204
  export function play(sound_name, loop = false, onend, volume) {
205
- var sound = audioTracks[sound_name];
205
+ let sound = audioTracks[sound_name];
206
206
  if (sound && typeof sound !== "undefined") {
207
- var id = sound.play();
207
+ let id = sound.play();
208
208
  if (typeof loop === "boolean") {
209
209
  // arg[0] can take different types in howler 2.0
210
210
  sound.loop(loop, id);
@@ -234,7 +234,7 @@ export function play(sound_name, loop = false, onend, volume) {
234
234
  * @param {number} [id] - the sound instance ID. If none is passed, all sounds in group will fade.
235
235
  */
236
236
  export function fade(sound_name, from, to, duration, id) {
237
- var sound = audioTracks[sound_name];
237
+ let sound = audioTracks[sound_name];
238
238
  if (sound && typeof sound !== "undefined") {
239
239
  sound.fade(from, to, duration, id);
240
240
  } else {
@@ -251,12 +251,12 @@ export function fade(sound_name, from, to, duration, id) {
251
251
  * @returns {number} return the current seek position (if no extra parameters were given)
252
252
  * @example
253
253
  * // return the current position of the background music
254
- * var current_pos = me.audio.seek("dst-gameforest");
254
+ * let current_pos = me.audio.seek("dst-gameforest");
255
255
  * // set back the position of the background music to the beginning
256
256
  * me.audio.seek("dst-gameforest", 0);
257
257
  */
258
258
  export function seek(sound_name, ...args) {
259
- var sound = audioTracks[sound_name];
259
+ let sound = audioTracks[sound_name];
260
260
  if (sound && typeof sound !== "undefined") {
261
261
  return sound.seek(...args);
262
262
  } else {
@@ -273,12 +273,12 @@ export function seek(sound_name, ...args) {
273
273
  * @returns {number} return the current playback rate (if no extra parameters were given)
274
274
  * @example
275
275
  * // get the playback rate of the background music
276
- * var rate = me.audio.rate("dst-gameforest");
276
+ * let rate = me.audio.rate("dst-gameforest");
277
277
  * // speed up the playback of the background music
278
278
  * me.audio.rate("dst-gameforest", 2.0);
279
279
  */
280
280
  export function rate(sound_name, ...args) {
281
- var sound = audioTracks[sound_name];
281
+ let sound = audioTracks[sound_name];
282
282
  if (sound && typeof sound !== "undefined") {
283
283
  return sound.rate(...args);
284
284
  } else {
@@ -296,7 +296,7 @@ export function rate(sound_name, ...args) {
296
296
  */
297
297
  export function stop(sound_name, id) {
298
298
  if (typeof sound_name !== "undefined") {
299
- var sound = audioTracks[sound_name];
299
+ let sound = audioTracks[sound_name];
300
300
  if (sound && typeof sound !== "undefined") {
301
301
  sound.stop(id);
302
302
  // remove the defined onend callback (if any defined)
@@ -319,7 +319,7 @@ export function stop(sound_name, id) {
319
319
  * me.audio.pause("cling");
320
320
  */
321
321
  export function pause(sound_name, id) {
322
- var sound = audioTracks[sound_name];
322
+ let sound = audioTracks[sound_name];
323
323
  if (sound && typeof sound !== "undefined") {
324
324
  sound.pause(id);
325
325
  } else {
@@ -334,7 +334,7 @@ export function pause(sound_name, id) {
334
334
  * @param {number} [id] - the sound instance ID. If none is passed, all sounds in group will resume.
335
335
  * @example
336
336
  * // play a audio clip
337
- * var id = me.audio.play("myClip");
337
+ * let id = me.audio.play("myClip");
338
338
  * ...
339
339
  * // pause it
340
340
  * me.audio.pause("myClip", id);
@@ -343,7 +343,7 @@ export function pause(sound_name, id) {
343
343
  * me.audio.resume("myClip", id);
344
344
  */
345
345
  export function resume(sound_name, id) {
346
- var sound = audioTracks[sound_name];
346
+ let sound = audioTracks[sound_name];
347
347
  if (sound && typeof sound !== "undefined") {
348
348
  sound.play(id);
349
349
  } else {
@@ -455,10 +455,8 @@ export function getVolume() {
455
455
  * // mute the background music
456
456
  * me.audio.mute("awesome_music");
457
457
  */
458
- export function mute(sound_name, id, mute) {
459
- // if not defined : true
460
- mute = (typeof(mute) === "undefined" ? true : !!mute);
461
- var sound = audioTracks[sound_name];
458
+ export function mute(sound_name, id, mute = true) {
459
+ let sound = audioTracks[sound_name];
462
460
  if (sound && typeof(sound) !== "undefined") {
463
461
  sound.mute(mute, id);
464
462
  } else {
@@ -527,7 +525,7 @@ export function unload(sound_name) {
527
525
  * me.audio.unloadAll();
528
526
  */
529
527
  export function unloadAll() {
530
- for (var sound_name in audioTracks) {
528
+ for (let sound_name in audioTracks) {
531
529
  if (audioTracks.hasOwnProperty(sound_name)) {
532
530
  unload(sound_name);
533
531
  }
@@ -16,7 +16,7 @@ import { game } from "../index.js";
16
16
  // some ref shortcut
17
17
  const MIN = Math.min, MAX = Math.max;
18
18
 
19
- var targetV = new Vector2d();
19
+ let targetV = new Vector2d();
20
20
 
21
21
  /**
22
22
  * @classdesc
@@ -178,7 +178,7 @@ var targetV = new Vector2d();
178
178
 
179
179
  /** @ignore */
180
180
  _followH(target) {
181
- var targetX = this.pos.x;
181
+ let targetX = this.pos.x;
182
182
  if ((target.x - this.pos.x) > (this.deadzone.right)) {
183
183
  targetX = MIN((target.x) - (this.deadzone.right), this.bounds.width - this.width);
184
184
  }
@@ -191,7 +191,7 @@ var targetV = new Vector2d();
191
191
 
192
192
  /** @ignore */
193
193
  _followV(target) {
194
- var targetY = this.pos.y;
194
+ let targetY = this.pos.y;
195
195
  if ((target.y - this.pos.y) > (this.deadzone.bottom)) {
196
196
  targetY = MIN((target.y) - (this.deadzone.bottom), this.bounds.height - this.height);
197
197
  }
@@ -384,8 +384,8 @@ var targetV = new Vector2d();
384
384
  * @param {number} y
385
385
  */
386
386
  moveTo(x, y) {
387
- var _x = this.pos.x;
388
- var _y = this.pos.y;
387
+ let _x = this.pos.x;
388
+ let _y = this.pos.y;
389
389
 
390
390
  this.pos.x = clamp(
391
391
  x,
@@ -561,7 +561,7 @@ var targetV = new Vector2d();
561
561
  */
562
562
  fadeIn(color, duration = 1000, onComplete) {
563
563
  this._fadeIn.color = pool.pull("Color").copy(color);
564
- var _alpha = this._fadeIn.color.alpha;
564
+ let _alpha = this._fadeIn.color.alpha;
565
565
  this._fadeIn.color.alpha = 0.0;
566
566
  this._fadeIn.tween = pool.pull("Tween", this._fadeIn.color)
567
567
  .to({ alpha: _alpha }, duration)
@@ -577,7 +577,7 @@ var targetV = new Vector2d();
577
577
  * @param {Renderable} target - the renderable to focus the camera on
578
578
  */
579
579
  focusOn(target) {
580
- var bounds = target.getBounds();
580
+ let bounds = target.getBounds();
581
581
  this.moveTo(
582
582
  target.pos.x + bounds.left + (bounds.width / 2),
583
583
  target.pos.y + bounds.top + (bounds.height / 2)
@@ -687,8 +687,8 @@ var targetV = new Vector2d();
687
687
  * @ignore
688
688
  */
689
689
  draw(renderer, container) {
690
- var translateX = this.pos.x + this.offset.x;
691
- var translateY = this.pos.y + this.offset.y;
690
+ let translateX = this.pos.x + this.offset.x;
691
+ let translateY = this.pos.y + this.offset.y;
692
692
 
693
693
  // translate the world coordinates by default to screen coordinates
694
694
  container.currentTransform.translate(-translateX, -translateY);
@@ -108,7 +108,7 @@ import Body from "./../physics/body.js";
108
108
  pool.pull("Vector2d", 0, this.height)
109
109
  ]);
110
110
  }
111
- this.body = new Body(this, settings.shapes, this.onBodyUpdate.bind(this));
111
+ this.body = new Body(this, settings.shapes, () => this.onBodyUpdate());
112
112
 
113
113
  // resize the entity if required
114
114
  if (this.width === 0 && this.height === 0) {
@@ -160,7 +160,7 @@ import Body from "./../physics/body.js";
160
160
  * @returns {Bounds} this entity bounding box Rectangle object
161
161
  */
162
162
  updateBounds(absolute = true) {
163
- var bounds = this.getBounds();
163
+ let bounds = this.getBounds();
164
164
 
165
165
  bounds.clear();
166
166
  bounds.addFrame(
@@ -230,7 +230,7 @@ import Body from "./../physics/body.js";
230
230
  * @param {Camera2d} [viewport] - the viewport to (re)draw
231
231
  */
232
232
  draw(renderer, viewport) {
233
- var renderable = this.renderable;
233
+ let renderable = this.renderable;
234
234
  if (renderable instanceof Renderable) {
235
235
  // predraw (apply transforms)
236
236
  renderable.preDraw(renderer);
@@ -84,14 +84,14 @@ import pool from "./../system/pooling.js";
84
84
  * @returns {Ellipse} this instance for objecf chaining
85
85
  */
86
86
  setShape(x, y, w, h) {
87
- var hW = w / 2;
88
- var hH = h / 2;
87
+ const hW = w / 2;
88
+ const hH = h / 2;
89
89
 
90
90
  this.pos.set(x, y);
91
91
  this.radius = Math.max(hW, hH);
92
92
  this.ratio.set(hW / this.radius, hH / this.radius);
93
93
  this.radiusV.set(this.radius, this.radius).scaleV(this.ratio);
94
- var r = this.radius * this.radius;
94
+ const r = this.radius * this.radius;
95
95
  this.radiusSq.set(r, r).scaleV(this.ratio);
96
96
 
97
97
  // update the corresponding bounds
@@ -175,7 +175,7 @@ import pool from "./../system/pooling.js";
175
175
  * @returns {Ellipse} this ellipse
176
176
  */
177
177
  translate() {
178
- var _x, _y;
178
+ let _x, _y;
179
179
 
180
180
  if (arguments.length === 2) {
181
181
  // x, y
@@ -212,7 +212,7 @@ import pool from "./../system/pooling.js";
212
212
  * @returns {boolean} true if contains
213
213
  */
214
214
  contains() {
215
- var _x, _y;
215
+ let _x, _y;
216
216
 
217
217
  if (arguments.length === 2) {
218
218
  // x, y
@@ -30,7 +30,7 @@ import Polygon from "./poly.js";
30
30
  * @returns {boolean} true if contains
31
31
  */
32
32
  contains() {
33
- var _x, _y;
33
+ let _x, _y;
34
34
 
35
35
  if (arguments.length === 2) {
36
36
  // x, y
@@ -46,8 +46,8 @@ import Polygon from "./poly.js";
46
46
  // rather than creating temp translated vectors
47
47
  _x -= this.pos.x; // Cx
48
48
  _y -= this.pos.y; // Cy
49
- var start = this.points[0]; // Ax/Ay
50
- var end = this.points[1]; // Bx/By
49
+ let start = this.points[0]; // Ax/Ay
50
+ let end = this.points[1]; // Bx/By
51
51
 
52
52
  //(Cy - Ay) * (Bx - Ax) = (By - Ay) * (Cx - Ax)
53
53
  return (_y - start.y) * (end.x - start.x) === (end.y - start.y) * (_x - start.x);
@@ -61,12 +61,12 @@ import Polygon from "./poly.js";
61
61
  * @returns {Line} this instance for objecf chaining
62
62
  */
63
63
  recalc() {
64
- var edges = this.edges;
65
- var normals = this.normals;
66
- var indices = this.indices;
64
+ let edges = this.edges;
65
+ let normals = this.normals;
66
+ let indices = this.indices;
67
67
 
68
68
  // Copy the original points array and apply the offset/angle
69
- var points = this.points;
69
+ let points = this.points;
70
70
 
71
71
  if (points.length !== 2) {
72
72
  throw new Error("Requires exactly 2 points");
@@ -96,7 +96,7 @@ import Polygon from "./poly.js";
96
96
  * @returns {Line} new Line
97
97
  */
98
98
  clone() {
99
- var copy = [];
99
+ let copy = [];
100
100
  this.points.forEach((point) => {
101
101
  copy.push(point.clone());
102
102
  });