melonjs 16.1.3 → 17.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 (289) hide show
  1. package/README.md +3 -3
  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/_virtual/re.js +1 -1
  7. package/dist/melonjs.mjs/application/application.js +1 -1
  8. package/dist/melonjs.mjs/application/header.js +1 -1
  9. package/dist/melonjs.mjs/application/resize.js +1 -1
  10. package/dist/melonjs.mjs/application/settings.js +1 -1
  11. package/dist/melonjs.mjs/audio/audio.js +120 -34
  12. package/dist/melonjs.mjs/camera/camera2d.js +1 -1
  13. package/dist/melonjs.mjs/const.js +1 -1
  14. package/dist/melonjs.mjs/geometries/ellipse.js +1 -1
  15. package/dist/melonjs.mjs/geometries/line.js +1 -1
  16. package/dist/melonjs.mjs/geometries/path2d.js +1 -1
  17. package/dist/melonjs.mjs/geometries/point.js +1 -1
  18. package/dist/melonjs.mjs/geometries/poly.js +1 -1
  19. package/dist/melonjs.mjs/geometries/rectangle.js +1 -1
  20. package/dist/melonjs.mjs/geometries/roundrect.js +1 -1
  21. package/dist/melonjs.mjs/geometries/toarccanvas.js +1 -1
  22. package/dist/melonjs.mjs/index.js +7 -7
  23. package/dist/melonjs.mjs/input/gamepad.js +1 -1
  24. package/dist/melonjs.mjs/input/input.js +1 -1
  25. package/dist/melonjs.mjs/input/keyboard.js +1 -1
  26. package/dist/melonjs.mjs/input/pointer.js +1 -1
  27. package/dist/melonjs.mjs/input/pointerevent.js +1 -1
  28. package/dist/melonjs.mjs/lang/console.js +1 -1
  29. package/dist/melonjs.mjs/lang/deprecated.js +24 -2
  30. package/dist/melonjs.mjs/level/level.js +1 -1
  31. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +1 -1
  32. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +1 -1
  33. package/dist/melonjs.mjs/level/tiled/TMXObject.js +1 -1
  34. package/dist/melonjs.mjs/level/tiled/TMXTile.js +1 -1
  35. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +1 -1
  36. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +1 -1
  37. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +1 -1
  38. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +1 -1
  39. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +1 -1
  44. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  45. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  46. package/dist/melonjs.mjs/loader/cache.js +1 -1
  47. package/dist/melonjs.mjs/loader/loader.js +127 -5
  48. package/dist/melonjs.mjs/loader/loadingscreen.js +1 -1
  49. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  50. package/dist/melonjs.mjs/loader/parsers/binary.js +4 -3
  51. package/dist/melonjs.mjs/loader/parsers/compressed_textures/compressed_image.js +58 -0
  52. package/dist/melonjs.mjs/loader/parsers/compressed_textures/parseDDS.js +13 -0
  53. package/dist/melonjs.mjs/loader/parsers/compressed_textures/parseKTX.js +13 -0
  54. package/dist/melonjs.mjs/loader/parsers/compressed_textures/parseKTX2.js +13 -0
  55. package/dist/melonjs.mjs/loader/parsers/compressed_textures/parsePKM.js +13 -0
  56. package/dist/melonjs.mjs/loader/parsers/compressed_textures/parsePVR.js +136 -0
  57. package/dist/melonjs.mjs/loader/parsers/fetchdata.js +7 -7
  58. package/dist/melonjs.mjs/loader/parsers/fontface.js +1 -1
  59. package/dist/melonjs.mjs/loader/parsers/image.js +92 -44
  60. package/dist/melonjs.mjs/loader/parsers/json.js +5 -4
  61. package/dist/melonjs.mjs/loader/parsers/script.js +7 -3
  62. package/dist/melonjs.mjs/loader/parsers/tmx.js +5 -4
  63. package/dist/melonjs.mjs/loader/parsers/video.js +7 -7
  64. package/dist/melonjs.mjs/math/color.js +1 -1
  65. package/dist/melonjs.mjs/math/math.js +25 -32
  66. package/dist/melonjs.mjs/math/matrix2.js +1 -1
  67. package/dist/melonjs.mjs/math/matrix3.js +1 -1
  68. package/dist/melonjs.mjs/math/observable_vector2.js +1 -1
  69. package/dist/melonjs.mjs/math/observable_vector3.js +1 -1
  70. package/dist/melonjs.mjs/math/vector2.js +1 -1
  71. package/dist/melonjs.mjs/math/vector3.js +1 -1
  72. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +1 -1
  73. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +1 -1
  74. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  75. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +1 -1
  76. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  77. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  78. package/dist/melonjs.mjs/node_modules/semver/classes/comparator.js +1 -1
  79. package/dist/melonjs.mjs/node_modules/semver/classes/range.js +1 -1
  80. package/dist/melonjs.mjs/node_modules/semver/classes/semver.js +1 -1
  81. package/dist/melonjs.mjs/node_modules/semver/functions/clean.js +1 -1
  82. package/dist/melonjs.mjs/node_modules/semver/functions/cmp.js +1 -1
  83. package/dist/melonjs.mjs/node_modules/semver/functions/coerce.js +1 -1
  84. package/dist/melonjs.mjs/node_modules/semver/functions/compare-build.js +1 -1
  85. package/dist/melonjs.mjs/node_modules/semver/functions/compare-loose.js +1 -1
  86. package/dist/melonjs.mjs/node_modules/semver/functions/compare.js +1 -1
  87. package/dist/melonjs.mjs/node_modules/semver/functions/diff.js +1 -1
  88. package/dist/melonjs.mjs/node_modules/semver/functions/eq.js +1 -1
  89. package/dist/melonjs.mjs/node_modules/semver/functions/gt.js +1 -1
  90. package/dist/melonjs.mjs/node_modules/semver/functions/gte.js +1 -1
  91. package/dist/melonjs.mjs/node_modules/semver/functions/inc.js +1 -1
  92. package/dist/melonjs.mjs/node_modules/semver/functions/lt.js +1 -1
  93. package/dist/melonjs.mjs/node_modules/semver/functions/lte.js +1 -1
  94. package/dist/melonjs.mjs/node_modules/semver/functions/major.js +1 -1
  95. package/dist/melonjs.mjs/node_modules/semver/functions/minor.js +1 -1
  96. package/dist/melonjs.mjs/node_modules/semver/functions/neq.js +1 -1
  97. package/dist/melonjs.mjs/node_modules/semver/functions/parse.js +1 -1
  98. package/dist/melonjs.mjs/node_modules/semver/functions/patch.js +1 -1
  99. package/dist/melonjs.mjs/node_modules/semver/functions/prerelease.js +1 -1
  100. package/dist/melonjs.mjs/node_modules/semver/functions/rcompare.js +1 -1
  101. package/dist/melonjs.mjs/node_modules/semver/functions/rsort.js +1 -1
  102. package/dist/melonjs.mjs/node_modules/semver/functions/satisfies.js +1 -1
  103. package/dist/melonjs.mjs/node_modules/semver/functions/sort.js +1 -1
  104. package/dist/melonjs.mjs/node_modules/semver/functions/valid.js +1 -1
  105. package/dist/melonjs.mjs/node_modules/semver/index.js +1 -1
  106. package/dist/melonjs.mjs/node_modules/semver/internal/constants.js +1 -1
  107. package/dist/melonjs.mjs/node_modules/semver/internal/debug.js +1 -1
  108. package/dist/melonjs.mjs/node_modules/semver/internal/identifiers.js +1 -1
  109. package/dist/melonjs.mjs/node_modules/semver/internal/parse-options.js +1 -1
  110. package/dist/melonjs.mjs/node_modules/semver/internal/re.js +1 -1
  111. package/dist/melonjs.mjs/node_modules/semver/node_modules/lru-cache/index.js +1 -1
  112. package/dist/melonjs.mjs/node_modules/semver/node_modules/yallist/iterator.js +1 -1
  113. package/dist/melonjs.mjs/node_modules/semver/node_modules/yallist/yallist.js +1 -1
  114. package/dist/melonjs.mjs/node_modules/semver/ranges/gtr.js +1 -1
  115. package/dist/melonjs.mjs/node_modules/semver/ranges/intersects.js +1 -1
  116. package/dist/melonjs.mjs/node_modules/semver/ranges/ltr.js +1 -1
  117. package/dist/melonjs.mjs/node_modules/semver/ranges/max-satisfying.js +1 -1
  118. package/dist/melonjs.mjs/node_modules/semver/ranges/min-satisfying.js +1 -1
  119. package/dist/melonjs.mjs/node_modules/semver/ranges/min-version.js +1 -1
  120. package/dist/melonjs.mjs/node_modules/semver/ranges/outside.js +1 -1
  121. package/dist/melonjs.mjs/node_modules/semver/ranges/simplify.js +1 -1
  122. package/dist/melonjs.mjs/node_modules/semver/ranges/subset.js +1 -1
  123. package/dist/melonjs.mjs/node_modules/semver/ranges/to-comparators.js +1 -1
  124. package/dist/melonjs.mjs/node_modules/semver/ranges/valid.js +1 -1
  125. package/dist/melonjs.mjs/particles/emitter.js +2 -2
  126. package/dist/melonjs.mjs/particles/particle.js +1 -1
  127. package/dist/melonjs.mjs/particles/settings.js +1 -1
  128. package/dist/melonjs.mjs/physics/body.js +1 -1
  129. package/dist/melonjs.mjs/physics/bounds.js +1 -1
  130. package/dist/melonjs.mjs/physics/collision.js +1 -1
  131. package/dist/melonjs.mjs/physics/detector.js +1 -1
  132. package/dist/melonjs.mjs/physics/quadtree.js +1 -1
  133. package/dist/melonjs.mjs/physics/response.js +1 -1
  134. package/dist/melonjs.mjs/physics/sat.js +1 -1
  135. package/dist/melonjs.mjs/physics/world.js +1 -1
  136. package/dist/melonjs.mjs/plugin/plugin.js +4 -4
  137. package/dist/melonjs.mjs/renderable/collectable.js +1 -1
  138. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  139. package/dist/melonjs.mjs/renderable/container.js +1 -1
  140. package/dist/melonjs.mjs/renderable/draggable.js +1 -1
  141. package/dist/melonjs.mjs/renderable/dragndrop.js +1 -1
  142. package/dist/melonjs.mjs/renderable/entity/entity.js +1 -1
  143. package/dist/melonjs.mjs/renderable/imagelayer.js +1 -1
  144. package/dist/melonjs.mjs/renderable/light2d.js +2 -2
  145. package/dist/melonjs.mjs/renderable/nineslicesprite.js +1 -1
  146. package/dist/melonjs.mjs/renderable/renderable.js +19 -7
  147. package/dist/melonjs.mjs/renderable/sprite.js +8 -1
  148. package/dist/melonjs.mjs/renderable/text/bitmaptext.js +1 -1
  149. package/dist/melonjs.mjs/renderable/text/bitmaptextdata.js +1 -1
  150. package/dist/melonjs.mjs/renderable/text/glyph.js +1 -1
  151. package/dist/melonjs.mjs/renderable/text/text.js +2 -2
  152. package/dist/melonjs.mjs/renderable/text/textmetrics.js +1 -1
  153. package/dist/melonjs.mjs/renderable/text/textstyle.js +1 -1
  154. package/dist/melonjs.mjs/renderable/trigger.js +1 -1
  155. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +1 -1
  156. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +1 -1
  157. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +1 -1
  158. package/dist/melonjs.mjs/state/stage.js +2 -2
  159. package/dist/melonjs.mjs/state/state.js +5 -5
  160. package/dist/melonjs.mjs/system/device.js +20 -121
  161. package/dist/melonjs.mjs/system/dom.js +1 -1
  162. package/dist/melonjs.mjs/system/event.js +2 -2
  163. package/dist/melonjs.mjs/system/platform.js +1 -1
  164. package/dist/melonjs.mjs/system/pooling.js +2 -2
  165. package/dist/melonjs.mjs/system/save.js +3 -3
  166. package/dist/melonjs.mjs/system/timer.js +4 -4
  167. package/dist/melonjs.mjs/tweens/easing.js +1 -1
  168. package/dist/melonjs.mjs/tweens/interpolation.js +1 -1
  169. package/dist/melonjs.mjs/tweens/tween.js +1 -1
  170. package/dist/melonjs.mjs/utils/agent.js +1 -1
  171. package/dist/melonjs.mjs/utils/array.js +1 -1
  172. package/dist/melonjs.mjs/utils/file.js +1 -1
  173. package/dist/melonjs.mjs/utils/function.js +1 -1
  174. package/dist/melonjs.mjs/utils/string.js +1 -1
  175. package/dist/melonjs.mjs/utils/utils.js +1 -1
  176. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +1 -4
  177. package/dist/melonjs.mjs/video/renderer.js +17 -45
  178. package/dist/melonjs.mjs/video/{texture/canvas_texture.js → rendertarget/canvasrendertarget.js} +89 -22
  179. package/dist/melonjs.mjs/video/texture/atlas.js +83 -160
  180. package/dist/melonjs.mjs/video/texture/cache.js +1 -1
  181. package/dist/melonjs.mjs/video/texture/parser/aseprite.js +78 -0
  182. package/dist/melonjs.mjs/video/texture/parser/spritesheet.js +77 -0
  183. package/dist/melonjs.mjs/video/texture/parser/texturepacker.js +64 -0
  184. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  185. package/dist/melonjs.mjs/video/video.js +1 -1
  186. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +1 -1
  187. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +1 -1
  188. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +1 -1
  189. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +1 -1
  190. package/dist/melonjs.mjs/video/webgl/glshader.js +1 -1
  191. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  192. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
  193. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  194. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
  195. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +1 -1
  196. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  197. package/dist/melonjs.mjs/video/webgl/utils/program.js +1 -1
  198. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  199. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +1 -1
  200. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +53 -62
  201. package/dist/melonjs.module.js +1687 -1244
  202. package/dist/types/audio/audio.d.ts +84 -29
  203. package/dist/types/index.d.ts +2 -2
  204. package/dist/types/lang/deprecated.d.ts +23 -0
  205. package/dist/types/level/tiled/TMXLayer.d.ts +1 -2
  206. package/dist/types/loader/loader.d.ts +85 -1
  207. package/dist/types/loader/parsers/binary.d.ts +2 -1
  208. package/dist/types/loader/parsers/compressed_textures/compressed_image.d.ts +1 -0
  209. package/dist/types/loader/parsers/compressed_textures/parseDDS.d.ts +1 -0
  210. package/dist/types/loader/parsers/compressed_textures/parseKTX.d.ts +1 -0
  211. package/dist/types/loader/parsers/compressed_textures/parseKTX2.d.ts +1 -0
  212. package/dist/types/loader/parsers/compressed_textures/parsePKM.d.ts +1 -0
  213. package/dist/types/loader/parsers/compressed_textures/parsePVR.d.ts +1 -0
  214. package/dist/types/loader/parsers/fetchdata.d.ts +3 -1
  215. package/dist/types/loader/parsers/image.d.ts +2 -1
  216. package/dist/types/loader/parsers/json.d.ts +3 -2
  217. package/dist/types/loader/parsers/script.d.ts +3 -2
  218. package/dist/types/loader/parsers/tmx.d.ts +3 -2
  219. package/dist/types/loader/parsers/video.d.ts +3 -2
  220. package/dist/types/math/math.d.ts +8 -30
  221. package/dist/types/particles/emitter.d.ts +30 -9
  222. package/dist/types/plugin/plugin.d.ts +1 -1
  223. package/dist/types/polyfill/console.d.ts +1 -0
  224. package/dist/types/polyfill/roundrect.d.ts +1 -0
  225. package/dist/types/renderable/collectable.d.ts +0 -2
  226. package/dist/types/renderable/container.d.ts +7 -1
  227. package/dist/types/renderable/entity/entity.d.ts +6 -0
  228. package/dist/types/renderable/renderable.d.ts +9 -0
  229. package/dist/types/renderable/text/bitmaptext.d.ts +6 -0
  230. package/dist/types/renderable/trigger.d.ts +0 -2
  231. package/dist/types/state/stage.d.ts +1 -1
  232. package/dist/types/state/state.d.ts +1 -1
  233. package/dist/types/system/device.d.ts +1 -107
  234. package/dist/types/system/event.d.ts +5 -5
  235. package/dist/types/system/pooling.d.ts +2 -2
  236. package/dist/types/video/canvas/canvas_renderer.d.ts +0 -1
  237. package/dist/types/video/renderer.d.ts +7 -0
  238. package/dist/types/video/{texture/canvas_texture.d.ts → rendertarget/canvasrendertarget.d.ts} +13 -12
  239. package/dist/types/video/texture/atlas.d.ts +9 -13
  240. package/dist/types/video/texture/parser/aseprite.d.ts +8 -0
  241. package/dist/types/video/texture/parser/spritesheet.d.ts +8 -0
  242. package/dist/types/video/texture/parser/texturepacker.d.ts +8 -0
  243. package/dist/types/video/utils/autodetect.d.ts +1 -3
  244. package/dist/types/video/video.d.ts +0 -1
  245. package/dist/types/video/webgl/webgl_renderer.d.ts +18 -16
  246. package/package.json +17 -16
  247. package/src/audio/audio.js +118 -32
  248. package/src/index.js +3 -3
  249. package/src/lang/deprecated.js +21 -0
  250. package/src/loader/loader.js +119 -5
  251. package/src/loader/parsers/binary.js +3 -2
  252. package/src/loader/parsers/compressed_textures/compressed_image.js +49 -0
  253. package/src/loader/parsers/compressed_textures/parseDDS.js +5 -0
  254. package/src/loader/parsers/compressed_textures/parseKTX.js +5 -0
  255. package/src/loader/parsers/compressed_textures/parseKTX2.js +5 -0
  256. package/src/loader/parsers/compressed_textures/parsePKM.js +5 -0
  257. package/src/loader/parsers/compressed_textures/parsePVR.js +127 -0
  258. package/src/loader/parsers/fetchdata.js +6 -6
  259. package/src/loader/parsers/image.js +91 -43
  260. package/src/loader/parsers/json.js +4 -3
  261. package/src/loader/parsers/script.js +4 -5
  262. package/src/loader/parsers/tmx.js +4 -3
  263. package/src/loader/parsers/video.js +6 -6
  264. package/src/math/math.js +23 -30
  265. package/src/particles/emitter.js +1 -1
  266. package/src/plugin/plugin.js +1 -1
  267. package/src/renderable/container.js +1 -1
  268. package/src/renderable/light2d.js +1 -1
  269. package/src/renderable/renderable.js +19 -6
  270. package/src/renderable/sprite.js +7 -0
  271. package/src/renderable/text/text.js +1 -1
  272. package/src/state/stage.js +1 -1
  273. package/src/state/state.js +3 -3
  274. package/src/system/device.js +19 -120
  275. package/src/system/event.js +1 -1
  276. package/src/system/pooling.js +1 -1
  277. package/src/system/save.js +1 -1
  278. package/src/system/timer.js +2 -2
  279. package/src/video/canvas/canvas_renderer.js +0 -3
  280. package/src/video/renderer.js +15 -43
  281. package/src/video/{texture/canvas_texture.js → rendertarget/canvasrendertarget.js} +90 -21
  282. package/src/video/texture/atlas.js +81 -158
  283. package/src/video/texture/parser/aseprite.js +69 -0
  284. package/src/video/texture/parser/spritesheet.js +68 -0
  285. package/src/video/texture/parser/texturepacker.js +55 -0
  286. package/src/video/webgl/webgl_renderer.js +52 -61
  287. package/dist/melonjs.mjs/loader/settings.js +0 -92
  288. package/dist/types/loader/settings.d.ts +0 -57
  289. package/src/loader/settings.js +0 -86
@@ -1,17 +1,17 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
6
6
  * @copyright (C) 2011 - 2024 Olivier Biot (AltByte Pte Ltd)
7
7
  */
8
- import { nocache } from '../settings.js';
9
-
10
8
  /**
11
9
  * Fetches data from the specified URL.
12
10
  * @param {string} url - The URL to fetch the data from.
13
11
  * @param {string} responseType - The type of response expected ('json', 'text', 'blob', 'arrayBuffer').
12
+ * @param {Object} [settings] - custom settings to apply to the request (@link https://developer.mozilla.org/en-US/docs/Web/API/fetch#options)
14
13
  * @returns {Promise} A promise that resolves with the fetched data or rejects with an error.
14
+ * @ignore
15
15
  * @example
16
16
  * fetchData('https://api.example.com/data', 'json')
17
17
  * .then(data => {
@@ -21,15 +21,15 @@ import { nocache } from '../settings.js';
21
21
  * // Handle the error
22
22
  * });
23
23
  */
24
- function fetchData(url, responseType) {
24
+ function fetchData(url, responseType, settings = {}) {
25
25
  return new Promise((resolve, reject) => {
26
26
  fetch(url, {
27
27
  method: "GET",
28
28
  // internally nocache is a string with a generated random number
29
- cache: nocache === "" ? "no-cache" : "reload",
30
- credentials: "omit",
29
+ cache: settings.nocache === "" ? "no-cache" : "reload",
30
+ credentials: settings.withCredentials === true ? "include" : "omit",
31
31
  // see setting.crossorigin, "anonymous" is used for cross-origin requests
32
- mode: "no-cors"
32
+ mode: settings.crossOrigin === "anonymous" ? "cors" : "no-cors"
33
33
  })
34
34
  .then(response => {
35
35
  if (!response.ok) {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
@@ -8,12 +8,14 @@
8
8
  import { imgList } from '../cache.js';
9
9
  import { fetchData } from './fetchdata.js';
10
10
  import { getExtension } from '../../utils/file.js';
11
+ import { parseCompressedImage } from './compressed_textures/compressed_image.js';
11
12
 
12
13
  /**
13
14
  * parse/preload an image
14
15
  * @param {loader.Asset} img
15
16
  * @param {Function} [onload] - function to be called when the resource is loaded
16
17
  * @param {Function} [onerror] - function to be called in case of error
18
+ * @param {Object} [settings] - Additional settings to be passed when loading the asset
17
19
  * @returns {number} the amount of corresponding resource parsed/preloaded
18
20
  * @ignore
19
21
  * @example
@@ -24,58 +26,104 @@ import { getExtension } from '../../utils/file.js';
24
26
  * { name : 'image4', src : 'images/image4.png'}
25
27
  * ]);
26
28
  */
27
- function preloadImage(img, onload, onerror) {
29
+ function preloadImage(img, onload, onerror, settings) {
28
30
  if (typeof imgList[img.name] !== "undefined") {
29
31
  // already loaded
30
32
  return 0;
31
33
  }
32
34
 
33
- // handle SVG file loading
34
- if (getExtension(img.src) === "svg") {
35
- // handle SVG file
36
- fetchData(img.src, "text")
37
- .then(svgText => {
38
- const svgImage = new Image();
39
- svgImage.onload = function() {
40
- imgList[img.name] = svgImage;
41
- if (typeof onload === "function") {
42
- // callback
43
- onload();
44
- }
45
- };
46
- svgImage.onerror = function(error) {
47
- if (typeof onerror === "function") {
48
- onerror(error);
49
- }
50
- };
51
- svgImage.src = "data:image/svg+xml;charset=utf8," + encodeURIComponent(svgText);
52
- })
53
- .catch(error => {
54
- if (typeof onerror === "function") {
55
- onerror(error);
56
- }
57
- });
58
- } else {
59
- // handle all other image files
60
- fetchData(img.src, "blob")
61
- .then(blob => {
62
- globalThis.createImageBitmap(blob)
63
- .then((bitmap) => {
64
- imgList[img.name] = bitmap;
65
- if (typeof onload === "function") {
66
- // callback
67
- onload();
35
+ let sources = Array.isArray(img.src) ? img.src : [img.src];
36
+ let isFormatSupported = false;
37
+
38
+ for (const imgPath of sources) {
39
+ const imgExt = getExtension(imgPath);
40
+ // loop will stop as soon as a first supported format is detected
41
+ switch (imgExt) {
42
+ // Compressed texture
43
+ case "dds":
44
+ case "pvr":
45
+ case "pkm":
46
+ case "ktx":
47
+ case "ktx2":
48
+ fetchData(imgPath, "arrayBuffer", settings)
49
+ .then(arrayBuffer => {
50
+ try {
51
+ imgList[img.name] = parseCompressedImage(arrayBuffer, imgExt);
52
+ isFormatSupported = true;
53
+ if (typeof onload === "function") {
54
+ // callback
55
+ onload();
56
+ }
57
+ } catch (e) {
58
+ // parseCompressedImage will throw an error if a format is not supported or badly formatted
59
+ }
60
+ }).catch(error => {
61
+ if (typeof onerror === "function") {
62
+ // file cannot be loaded
63
+ onerror(error);
64
+ }
65
+ });
66
+ break;
67
+
68
+ // SVG file
69
+ case "svg":
70
+ fetchData(imgPath, "text", settings)
71
+ .then(svgText => {
72
+ const svgImage = new Image();
73
+ svgImage.onload = function() {
74
+ imgList[img.name] = svgImage;
75
+ if (typeof onload === "function") {
76
+ // callback
77
+ onload();
78
+ }
79
+ };
80
+ svgImage.onerror = function(error) {
81
+ if (typeof onerror === "function") {
82
+ onerror(error);
83
+ }
84
+ };
85
+ svgImage.src = "data:image/svg+xml;charset=utf8," + encodeURIComponent(svgText);
86
+ })
87
+ .catch(error => {
88
+ if (typeof onerror === "function") {
89
+ onerror(error);
68
90
  }
69
91
  });
70
- })
71
- .catch(error => {
72
- if (typeof onerror === "function") {
73
- onerror(error);
74
- }
75
- });
92
+ isFormatSupported = true;
93
+ break;
94
+
95
+ // default is regular images (jpg, png and friends)
96
+ default:
97
+ fetchData(imgPath, "blob", settings)
98
+ .then(blob => {
99
+ globalThis.createImageBitmap(blob)
100
+ .then((bitmap) => {
101
+ imgList[img.name] = bitmap;
102
+ if (typeof onload === "function") {
103
+ // callback
104
+ onload();
105
+ }
106
+ });
107
+ })
108
+ .catch(error => {
109
+ if (typeof onerror === "function") {
110
+ onerror(error);
111
+ }
112
+ });
113
+ isFormatSupported = true;
114
+ break;
115
+ }
116
+
117
+ // exit the loop as soon as the first supported format is detected
118
+ if (isFormatSupported === true) {
119
+ return 1;
120
+ }
76
121
  }
77
122
 
78
- return 1;
123
+ // no compatible format was found
124
+ throw new Error(
125
+ "No suppported Image file format found for " + img.name
126
+ );
79
127
  }
80
128
 
81
129
  export { preloadImage };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
@@ -11,18 +11,19 @@ import { fetchData } from './fetchdata.js';
11
11
  /**
12
12
  * parse/preload a JSON files
13
13
  * @param {loader.Asset} data - asset data
14
- * @param {Function} [onload] - function to be called when the asset is loaded
14
+ * @param {Function} [onload] - function to be called when the resource is loaded
15
15
  * @param {Function} [onerror] - function to be called in case of error
16
+ * @param {Object} [settings] - Additional settings to be passed when loading the asset
16
17
  * @returns {number} the amount of corresponding resource parsed/preloaded
17
18
  * @ignore
18
19
  */
19
- function preloadJSON(data, onload, onerror) {
20
+ function preloadJSON(data, onload, onerror, settings) {
20
21
  if (typeof jsonList[data.name] !== "undefined") {
21
22
  // already loaded
22
23
  return 0;
23
24
  }
24
25
 
25
- fetchData(data.src, "json")
26
+ fetchData(data.src, "json", settings)
26
27
  .then(response => {
27
28
  jsonList[data.name] = response;
28
29
  if (typeof onload === "function") {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
@@ -8,16 +8,20 @@
8
8
  /**
9
9
  * parse/preload a Javascript files
10
10
  * @param {loader.Asset} data - asset data
11
- * @param {Function} [onload] - function to be called when the asset is loaded
11
+ * @param {Function} [onload] - function to be called when the resource is loaded
12
12
  * @param {Function} [onerror] - function to be called in case of error
13
+ * @param {Object} [settings] - Additional settings to be passed when loading the asset
13
14
  * @returns {number} the amount of corresponding resource parsed/preloaded
14
15
  * @ignore
15
16
  */
16
- function preloadJavascript(data, onload, onerror) {
17
+ function preloadJavascript(data, onload, onerror, settings) {
17
18
  let script = globalThis.document.createElement("script");
18
19
 
19
20
  script.src = data.src;
20
21
  script.type = "text/javascript";
22
+ if (typeof (crossOrigin) === "string") {
23
+ script.crossOrigin = settings.crossOrigin;
24
+ }
21
25
  script.defer = true;
22
26
 
23
27
  if (typeof onload === "function") {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
@@ -15,12 +15,13 @@ import { fetchData } from './fetchdata.js';
15
15
  * parse/preload a TMX file
16
16
  * @param {loader.Asset} data - asset data
17
17
  * @param {Function} [onload] - function to be called when the asset is loaded
18
+ * @param {Function} [onload] - function to be called when the resource is loaded
18
19
  * @param {Function} [onerror] - function to be called in case of error
19
- * @param {Function} [fetchData] - function to use instead of default window.fetch, has some error handling and things
20
+ * @param {Object} [settings] - Additional settings to be passed when loading the asset
20
21
  * @returns {number} the amount of corresponding resource parsed/preloaded
21
22
  * @ignore
22
23
  */
23
- function preloadTMX(tmxData, onload, onerror) {
24
+ function preloadTMX(tmxData, onload, onerror, settings) {
24
25
  if (typeof tmxList[tmxData.name] !== "undefined") {
25
26
  // already loaded
26
27
  return 0;
@@ -48,7 +49,7 @@ function preloadTMX(tmxData, onload, onerror) {
48
49
  return;
49
50
  }
50
51
 
51
- fetchData(tmxData.src, "text")
52
+ fetchData(tmxData.src, "text", settings)
52
53
  .then(response => {
53
54
  if (typeof response !== "string") {
54
55
  throw new Error("Invalid response type");
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
@@ -9,25 +9,25 @@ import { videoList } from '../cache.js';
9
9
  import { fetchData } from './fetchdata.js';
10
10
  import { hasVideoFormat } from '../../system/device.js';
11
11
  import { getExtension } from '../../utils/file.js';
12
- import { crossOrigin } from '../settings.js';
13
12
  import { isDataUrl } from '../../utils/string.js';
14
13
 
15
14
  /**
16
15
  * parse/preload a Video file
17
16
  * @param {loader.Asset} data - asset data
18
- * @param {Function} [onload] - function to be called when the asset is loaded
17
+ * @param {Function} [onload] - function to be called when the resource is loaded
19
18
  * @param {Function} [onerror] - function to be called in case of error
19
+ * @param {Object} [settings] - Additional settings to be passed when loading the asset
20
20
  * @returns {number} the amount of corresponding resource parsed/preloaded
21
21
  * @ignore
22
22
  */
23
- function preloadVideo(data, onload, onerror) {
23
+ function preloadVideo(data, onload, onerror, settings) {
24
24
 
25
25
  if (typeof videoList[data.name] !== "undefined") {
26
26
  // Video already preloaded
27
27
  return 0;
28
28
  }
29
29
 
30
- let videoElement = videoList[data.name] = document.createElement("video");
30
+ let videoElement = videoList[data.name] = globalThis.document.createElement("video");
31
31
 
32
32
  if (isDataUrl(data.src)) {
33
33
  const mimeType = data.src.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/)[0];
@@ -41,7 +41,7 @@ function preloadVideo(data, onload, onerror) {
41
41
  }
42
42
 
43
43
  if (isDataUrl(data.src)) {
44
- fetchData(data.src, "blob")
44
+ fetchData(data.src, "blob", settings)
45
45
  .then(blob => {
46
46
  videoElement.src = globalThis.URL.createObjectURL(blob);
47
47
  })
@@ -59,7 +59,7 @@ function preloadVideo(data, onload, onerror) {
59
59
  videoElement.setAttribute("playsinline", "true");
60
60
  videoElement.setAttribute("disablePictureInPicture", "true");
61
61
  videoElement.setAttribute("controls", "false");
62
- videoElement.setAttribute("crossorigin", crossOrigin);
62
+ videoElement.setAttribute("crossorigin", settings.crossOrigin);
63
63
 
64
64
  if (data.autoplay === true) {
65
65
  videoElement.setAttribute("autoplay", "true");
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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
@@ -12,54 +12,42 @@
12
12
 
13
13
  /**
14
14
  * constant to convert from degrees to radians
15
- * @public
16
15
  * @type {number}
17
- * @name DEG_TO_RAD
18
16
  * @memberof Math
19
17
  */
20
18
  const DEG_TO_RAD = Math.PI / 180.0;
21
19
 
22
20
  /**
23
21
  * constant to convert from radians to degrees
24
- * @public
25
22
  * @type {number}
26
- * @name RAD_TO_DEG
27
23
  * @memberof Math
28
24
  */
29
25
  const RAD_TO_DEG = 180.0 / Math.PI;
30
26
 
31
27
  /**
32
28
  * constant equals to 2 times pi
33
- * @public
34
29
  * @type {number}
35
- * @name TAU
36
30
  * @memberof Math
37
31
  */
38
32
  const TAU = Math.PI * 2;
39
33
 
40
34
  /**
41
35
  * constant equals to half pi
42
- * @public
43
36
  * @type {number}
44
- * @name ETA
45
37
  * @memberof Math
46
38
  */
47
39
  const ETA = Math.PI * 0.5;
48
40
 
49
41
  /**
50
42
  * the difference between 1 and the smallest floating point number greater than 1
51
- * @public
52
43
  * @type {number}
53
- * @name EPSILON
54
44
  * @memberof Math
55
45
  */
56
46
  const EPSILON = 0.000001;
57
47
 
58
48
  /**
59
49
  * returns true if the given value is a power of two
60
- * @public
61
50
  * @memberof Math
62
- * @name isPowerOfTwo
63
51
  * @param {number} val
64
52
  * @returns {boolean}
65
53
  */
@@ -67,11 +55,31 @@ function isPowerOfTwo(val) {
67
55
  return (val & (val - 1)) === 0;
68
56
  }
69
57
 
58
+ /**
59
+ * returns true if the given value is a power of four
60
+ * @memberof Math
61
+ * @param {number} val
62
+ * @returns {boolean}
63
+ */
64
+ function isPowerOfFour(val) {
65
+ if (val === 0 || val === 2 || val === 3) {
66
+ return false;
67
+ }
68
+ if (val === 1) {
69
+ return true;
70
+ }
71
+
72
+ if ((val & (val - 1)) === 0) {
73
+ if ((val & 0xAAAAAAAA) === 0) {
74
+ return true;
75
+ }
76
+ }
77
+ return false;
78
+ }
79
+
70
80
  /**
71
81
  * returns the next power of two for the given value
72
- * @public
73
82
  * @memberof Math
74
- * @name nextPowerOfTwo
75
83
  * @param {number} val
76
84
  * @returns {boolean}
77
85
  */
@@ -88,9 +96,7 @@ function nextPowerOfTwo(val) {
88
96
 
89
97
  /**
90
98
  * Converts an angle in degrees to an angle in radians
91
- * @public
92
99
  * @memberof Math
93
- * @name degToRad
94
100
  * @param {number} angle - angle in degrees
95
101
  * @returns {number} corresponding angle in radians
96
102
  * @example
@@ -103,9 +109,7 @@ function degToRad(angle) {
103
109
 
104
110
  /**
105
111
  * Converts an angle in radians to an angle in degrees.
106
- * @public
107
112
  * @memberof Math
108
- * @name radToDeg
109
113
  * @param {number} radians - angle in radians
110
114
  * @returns {number} corresponding angle in degrees
111
115
  * @example
@@ -118,9 +122,7 @@ function radToDeg(radians) {
118
122
 
119
123
  /**
120
124
  * clamp the given value
121
- * @public
122
125
  * @memberof Math
123
- * @name clamp
124
126
  * @param {number} val - the value to clamp
125
127
  * @param {number} low - lower limit
126
128
  * @param {number} high - higher limit
@@ -132,9 +134,7 @@ function clamp(val, low, high) {
132
134
 
133
135
  /**
134
136
  * return a random integer between min (included) and max (excluded)
135
- * @public
136
137
  * @memberof Math
137
- * @name random
138
138
  * @param {number} min - minimum value.
139
139
  * @param {number} max - maximum value.
140
140
  * @returns {number} random value
@@ -148,9 +148,7 @@ function random(min, max) {
148
148
 
149
149
  /**
150
150
  * return a random float between min, max (exclusive)
151
- * @public
152
151
  * @memberof Math
153
- * @name randomFloat
154
152
  * @param {number} min - minimum value.
155
153
  * @param {number} max - maximum value.
156
154
  * @returns {number} random value
@@ -164,9 +162,7 @@ function randomFloat(min, max) {
164
162
 
165
163
  /**
166
164
  * return a weighted random between min, max (exclusive)
167
- * @public
168
165
  * @memberof Math
169
- * @name weightedRandom
170
166
  * @param {number} min - minimum value.
171
167
  * @param {number} max - maximum value.
172
168
  * @returns {number} random value
@@ -180,9 +176,7 @@ function weightedRandom(min, max) {
180
176
 
181
177
  /**
182
178
  * round a value to the specified number of digit
183
- * @public
184
179
  * @memberof Math
185
- * @name round
186
180
  * @param {number} num - value to be rounded.
187
181
  * @param {number} [dec=0] - number of decimal digit to be rounded to.
188
182
  * @returns {number} rounded value
@@ -198,9 +192,7 @@ function round(num, dec = 0) {
198
192
 
199
193
  /**
200
194
  * check if the given value is close to the expected one
201
- * @public
202
195
  * @memberof Math
203
- * @name toBeCloseTo
204
196
  * @param {number} expected - value to be compared with.
205
197
  * @param {number} actual - actual value to compare
206
198
  * @param {number} [precision=2] - float precision for the comparison
@@ -218,6 +210,7 @@ function toBeCloseTo(expected, actual, precision = 2) {
218
210
 
219
211
  /**
220
212
  * Calculates the power of a number.
213
+ * @memberof Math
221
214
  * @param {number} n - The number to be raised to the power of 2.
222
215
  * @returns {number} The result of raising the number to the power of 2.
223
216
  */
@@ -225,4 +218,4 @@ function pow(n) {
225
218
  return Math.pow(n, 2);
226
219
  }
227
220
 
228
- export { DEG_TO_RAD, EPSILON, ETA, RAD_TO_DEG, TAU, clamp, degToRad, isPowerOfTwo, nextPowerOfTwo, pow, radToDeg, random, randomFloat, round, toBeCloseTo, weightedRandom };
221
+ export { DEG_TO_RAD, EPSILON, ETA, RAD_TO_DEG, TAU, clamp, degToRad, isPowerOfFour, isPowerOfTwo, nextPowerOfTwo, pow, radToDeg, random, randomFloat, round, toBeCloseTo, weightedRandom };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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 - v16.1.3
2
+ * melonJS Game Engine - v17.1.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