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
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v14.5.0
2
+ * melonJS Game Engine - v15.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
@@ -33,7 +33,7 @@ import Color from '../math/color.js';
33
33
  * @param {Vector2d} [settings.anchorPoint={x:0.5, y:0.5}] - Anchor point to draw the frame at (defaults to the center of the frame).
34
34
  * @example
35
35
  * // create a single sprite from a standalone image, with anchor in the center
36
- * var sprite = new me.Sprite(0, 0, {
36
+ * let sprite = new me.Sprite(0, 0, {
37
37
  * image : "PlayerTexture",
38
38
  * framewidth : 64,
39
39
  * frameheight : 64,
@@ -41,12 +41,12 @@ import Color from '../math/color.js';
41
41
  * });
42
42
  *
43
43
  * // create a single sprite from a packed texture
44
- * game.texture = new me.TextureAtlas(
44
+ * mytexture = new me.TextureAtlas(
45
45
  * me.loader.getJSON("texture"),
46
46
  * me.loader.getImage("texture")
47
47
  * );
48
- * var sprite = new me.Sprite(0, 0, {
49
- * image : game.texture,
48
+ * let sprite = new me.Sprite(0, 0, {
49
+ * image : mytexture,
50
50
  * region : "npc2.png",
51
51
  * });
52
52
  */
@@ -135,7 +135,7 @@ import Color from '../math/color.js';
135
135
  // check for defined region
136
136
  if (typeof (settings.region) !== "undefined") {
137
137
  // use a texture atlas
138
- var region = this.source.getRegion(settings.region);
138
+ let region = this.source.getRegion(settings.region);
139
139
  if (region) {
140
140
  // set the sprite region within the texture
141
141
  this.setRegion(region);
@@ -230,7 +230,7 @@ import Color from '../math/color.js';
230
230
  * // make the object flicker for 1 second
231
231
  * // and then remove it
232
232
  * this.flicker(1000, function () {
233
- * me.game.world.removeChild(this);
233
+ * world.removeChild(this);
234
234
  * });
235
235
  */
236
236
  flicker(duration, callback) {
@@ -288,7 +288,7 @@ import Color from '../math/color.js';
288
288
  };
289
289
 
290
290
  // # of frames
291
- var counter = 0;
291
+ let counter = 0;
292
292
 
293
293
  if (typeof (this.textureAtlas) !== "object") {
294
294
  return 0;
@@ -304,9 +304,9 @@ import Color from '../math/color.js';
304
304
  }
305
305
 
306
306
  // set each frame configuration (offset, size, etc..)
307
- for (var i = 0, len = index.length; i < len; i++) {
308
- var frame = index[i];
309
- var frameObject;
307
+ for (let i = 0, len = index.length; i < len; i++) {
308
+ let frame = index[i];
309
+ let frameObject;
310
310
  if (typeof(frame) === "number" || typeof(frame) === "string") {
311
311
  frameObject = {
312
312
  name: frame,
@@ -316,7 +316,7 @@ import Color from '../math/color.js';
316
316
  else {
317
317
  frameObject = frame;
318
318
  }
319
- var frameObjectName = frameObject.name;
319
+ let frameObjectName = frameObject.name;
320
320
  if (typeof(frameObjectName) === "number") {
321
321
  if (typeof (this.textureAtlas[frameObjectName]) !== "undefined") {
322
322
  // TODO: adding the cache source coordinates add undefined entries in webGL mode
@@ -369,13 +369,13 @@ import Color from '../math/color.js';
369
369
  * this.setCurrentAnimation("eat", "walk");
370
370
  *
371
371
  * // set "die" animation, and remove the object when finished
372
- * this.setCurrentAnimation("die", (function () {
373
- * me.game.world.removeChild(this);
372
+ * this.setCurrentAnimation("die", () => {
373
+ * world.removeChild(this);
374
374
  * return false; // do not reset to first frame
375
- * }).bind(this));
375
+ * });
376
376
  *
377
377
  * // set "attack" animation, and pause for a short duration
378
- * this.setCurrentAnimation("die", (function () {
378
+ * this.setCurrentAnimation("die", () => {
379
379
  * this.animationpause = true;
380
380
  *
381
381
  * // back to "standing" animation after 1 second
@@ -384,7 +384,7 @@ import Color from '../math/color.js';
384
384
  * }, 1000);
385
385
  *
386
386
  * return false; // do not reset to first frame
387
- * }).bind(this));
387
+ * });
388
388
  */
389
389
  setCurrentAnimation(name, resetAnim, preserve_dt = false) {
390
390
  if (typeof this.anim[name] !== "undefined") {
@@ -452,7 +452,7 @@ import Color from '../math/color.js';
452
452
  * @returns {Sprite} Reference to this object for method chaining
453
453
  * @example
454
454
  * // change the sprite to "shadedDark13.png";
455
- * mySprite.setRegion(game.texture.getRegion("shadedDark13.png"));
455
+ * mySprite.setRegion(mytexture.getRegion("shadedDark13.png"));
456
456
  */
457
457
  setRegion(region) {
458
458
  // set the source texture for the given region
@@ -526,13 +526,13 @@ import Color from '../math/color.js';
526
526
  update(dt) {
527
527
  // Update animation if necessary
528
528
  if (!this.animationpause && this.current.length > 1) {
529
- var duration = this.getAnimationFrameObjectByIndex(this.current.idx).delay;
529
+ let duration = this.getAnimationFrameObjectByIndex(this.current.idx).delay;
530
530
  this.dt += dt;
531
531
  while (this.dt >= duration) {
532
532
  this.isDirty = true;
533
533
  this.dt -= duration;
534
534
 
535
- var nextFrame = (this.current.length > 1 ? this.current.idx + 1 : this.current.idx);
535
+ let nextFrame = (this.current.length > 1 ? this.current.idx + 1 : this.current.idx);
536
536
  this.setAnimationFrame(nextFrame);
537
537
 
538
538
  // Switch animation if we reach the end of the strip and a callback is defined
@@ -595,18 +595,18 @@ import Color from '../math/color.js';
595
595
  }
596
596
 
597
597
  // the frame to draw
598
- var frame = this.current;
598
+ let frame = this.current;
599
599
 
600
600
  // cache the current position and size
601
- var xpos = this.pos.x,
601
+ let xpos = this.pos.x,
602
602
  ypos = this.pos.y;
603
603
 
604
- var w = frame.width,
604
+ let w = frame.width,
605
605
  h = frame.height;
606
606
 
607
607
  // frame offset in the texture/atlas
608
- var frame_offset = frame.offset;
609
- var g_offset = this.offset;
608
+ let frame_offset = frame.offset;
609
+ let g_offset = this.offset;
610
610
 
611
611
 
612
612
  // remove image's TexturePacker/ShoeBox rotation
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v14.5.0
2
+ * melonJS Game Engine - v15.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,7 +9,6 @@ import Renderable from './renderable.js';
9
9
  import collision from '../physics/collision.js';
10
10
  import Body from '../physics/body.js';
11
11
  import level from '../level/level.js';
12
- import { game } from '../index.js';
13
12
  import pool from '../system/pooling.js';
14
13
 
15
14
  /**
@@ -33,7 +32,7 @@ import pool from '../system/pooling.js';
33
32
  * @param {boolean} [settings.flatten] - Flatten all objects into the target container. See {@link level.load}
34
33
  * @param {boolean} [settings.setViewportBounds] - Resize the viewport to match the level. See {@link level.load}
35
34
  * @example
36
- * me.game.world.addChild(new me.Trigger(
35
+ * world.addChild(new me.Trigger(
37
36
  * x, y, {
38
37
  * shapes: [new me.Rect(0, 0, 100, 100)],
39
38
  * "duration" : 250,
@@ -74,7 +73,7 @@ import pool from '../system/pooling.js';
74
73
  });
75
74
 
76
75
  // add and configure the physic body
77
- var shape = settings.shapes;
76
+ let shape = settings.shapes;
78
77
  if (typeof shape === "undefined") {
79
78
  shape = pool.pull("Polygon", 0, 0, [
80
79
  pool.pull("Vector2d", 0, 0),
@@ -94,9 +93,10 @@ import pool from '../system/pooling.js';
94
93
  * @ignore
95
94
  */
96
95
  getTriggerSettings() {
96
+ let world = this.ancestor.getRootAncestor();
97
97
  // Lookup for the container instance
98
98
  if (typeof(this.triggerSettings.container) === "string") {
99
- this.triggerSettings.container = game.world.getChildByName(this.triggerSettings.container)[0];
99
+ this.triggerSettings.container = world.getChildByName(this.triggerSettings.container)[0];
100
100
  }
101
101
  return this.triggerSettings;
102
102
  }
@@ -105,8 +105,9 @@ import pool from '../system/pooling.js';
105
105
  * @ignore
106
106
  */
107
107
  onFadeComplete() {
108
+ let world = this.ancestor.getRootAncestor();
108
109
  level.load(this.gotolevel, this.getTriggerSettings());
109
- game.viewport.fadeOut(this.fade, this.duration);
110
+ world.app.viewport.fadeOut(this.fade, this.duration);
110
111
  }
111
112
 
112
113
  /**
@@ -116,7 +117,8 @@ import pool from '../system/pooling.js';
116
117
  * @protected
117
118
  */
118
119
  triggerEvent() {
119
- var triggerSettings = this.getTriggerSettings();
120
+ let triggerSettings = this.getTriggerSettings();
121
+ let world = this.ancestor.getRootAncestor();
120
122
 
121
123
  if (triggerSettings.event === "level") {
122
124
  this.gotolevel = triggerSettings.to;
@@ -125,8 +127,8 @@ import pool from '../system/pooling.js';
125
127
  if (this.fade && this.duration) {
126
128
  if (!this.fading) {
127
129
  this.fading = true;
128
- game.viewport.fadeIn(this.fade, this.duration,
129
- this.onFadeComplete.bind(this));
130
+ world.app.viewport.fadeIn(this.fade, this.duration,
131
+ () => this.onFadeComplete());
130
132
  }
131
133
  } else {
132
134
  level.load(this.gotolevel, triggerSettings);
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v14.5.0
2
+ * melonJS Game Engine - v15.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
@@ -7,13 +7,14 @@
7
7
  */
8
8
  import Container from '../container.js';
9
9
  import timer from '../../system/timer.js';
10
+ import { on, POINTERMOVE, off } from '../../system/event.js';
11
+ import pool from '../../system/pooling.js';
10
12
  import { registerPointerEvent, releasePointerEvent } from '../../input/pointerevent.js';
11
13
 
12
14
  /**
13
15
  * @classdesc
14
- * This is a basic clickable container which you can use in your game UI.
15
- * Use this for example if you want to display a button which contains
16
- * text and images.
16
+ * This is a basic clickable and draggable container which you can use in your game UI.
17
+ * Use this for example if you want to display a panel that contains text, images or other UI elements.
17
18
  * @augments Container
18
19
  */
19
20
  class UIBaseElement extends Container {
@@ -21,17 +22,25 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
21
22
  *
22
23
  * @param {number} x - The x position of the container
23
24
  * @param {number} y - The y position of the container
24
- * @param {number} w - width of the container (default: viewport width)
25
- * @param {number} h - height of the container (default: viewport height)
25
+ * @param {number} w - width of the container
26
+ * @param {number} h - height of the container
26
27
  */
27
28
  constructor(x, y, w, h) {
28
29
  super(x, y, w, h);
29
30
  /**
30
31
  * object can be clicked or not
31
32
  * @type {boolean}
33
+ * @default true
32
34
  */
33
35
  this.isClickable = true;
34
36
 
37
+ /**
38
+ * object can be clicked or not
39
+ * @type {boolean}
40
+ * @default false
41
+ */
42
+ this.isDraggable = false;
43
+
35
44
  /**
36
45
  * Tap and hold threshold timeout in ms
37
46
  * @type {number}
@@ -53,13 +62,25 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
53
62
  */
54
63
  this.hover = false;
55
64
 
56
- // object has been updated (clicked,etc..)
57
- this.holdTimeout = null;
65
+ /**
66
+ * false if the pointer is down, or true when the pointer status is up
67
+ * @type {boolean}
68
+ * @default false
69
+ */
58
70
  this.released = true;
59
71
 
60
- // GUI items use screen coordinates
72
+ /**
73
+ * UI base elements use screen coordinates by default
74
+ * (Note: any child elements added to a UIBaseElement should set their floating property to false)
75
+ * @see Renderable.floating
76
+ * @type {boolean}
77
+ * @default true
78
+ */
61
79
  this.floating = true;
62
80
 
81
+ // object has been updated (clicked,etc..)
82
+ this.holdTimeout = -1;
83
+
63
84
  // enable event detection
64
85
  this.isKinematic = false;
65
86
  }
@@ -74,16 +95,18 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
74
95
  this.dirty = true;
75
96
  this.released = false;
76
97
  if (this.isHoldable) {
77
- if (this.holdTimeout !== null) {
78
- timer.clearTimeout(this.holdTimeout);
79
- }
98
+ timer.clearTimeout(this.holdTimeout);
80
99
  this.holdTimeout = timer.setTimeout(
81
- this.hold.bind(this),
100
+ () => this.hold(),
82
101
  this.holdThreshold,
83
102
  false
84
103
  );
85
104
  this.released = false;
86
105
  }
106
+ if (this.isDraggable) {
107
+ this.grabOffset.set(event.gameX, event.gameY);
108
+ this.grabOffset.sub(this.pos);
109
+ }
87
110
  return this.onClick(event);
88
111
  }
89
112
  }
@@ -104,9 +127,37 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
104
127
  enter(event) {
105
128
  this.hover = true;
106
129
  this.dirty = true;
130
+ if (this.isDraggable === true) {
131
+ on(POINTERMOVE, this.pointerMove, this);
132
+ // to memorize where we grab the object
133
+ this.grabOffset = pool.pull("Vector2d", 0, 0);
134
+ }
107
135
  return this.onOver(event);
108
136
  }
109
137
 
138
+ /**
139
+ * pointermove function
140
+ * @ignore
141
+ */
142
+ pointerMove(event) {
143
+ if (this.hover === true && this.released === false) {
144
+ // follow the pointer
145
+ this.pos.set(event.gameX, event.gameY, this.pos.z);
146
+ this.pos.sub(this.grabOffset);
147
+ // mark the container for redraw
148
+ this.isDirty = true;
149
+ return this.onMove(event);
150
+ }
151
+ }
152
+
153
+ /**
154
+ * function called when the pointer is moved over the object
155
+ * @param {Pointer} event - the event object
156
+ */
157
+ onMove(event) { // eslint-disable-line no-unused-vars
158
+ // to be extended
159
+ }
160
+
110
161
  /**
111
162
  * function called when the pointer is over the object
112
163
  * @param {Pointer} event - the event object
@@ -122,6 +173,12 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
122
173
  leave(event) {
123
174
  this.hover = false;
124
175
  this.dirty = true;
176
+ if (this.isDraggable === true) {
177
+ // unregister on the global pointermove event
178
+ off(POINTERMOVE, this.pointerMove);
179
+ pool.push(this.grabOffset);
180
+ this.grabOffset = undefined;
181
+ }
125
182
  this.release(event);
126
183
  return this.onOut(event);
127
184
  }
@@ -143,6 +200,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
143
200
  this.released = true;
144
201
  this.dirty = true;
145
202
  timer.clearTimeout(this.holdTimeout);
203
+ this.holdTimeout = -1;
146
204
  return this.onRelease(event);
147
205
  }
148
206
  }
@@ -161,6 +219,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
161
219
  */
162
220
  hold() {
163
221
  timer.clearTimeout(this.holdTimeout);
222
+ this.holdTimeout = -1;
164
223
  this.dirty = true;
165
224
  if (!this.released) {
166
225
  this.onHold();
@@ -179,19 +238,14 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
179
238
  */
180
239
  onActivateEvent() {
181
240
  // register pointer events
182
- registerPointerEvent(
183
- "pointerdown",
184
- this,
185
- this.clicked.bind(this)
186
- );
187
- registerPointerEvent("pointerup", this, this.release.bind(this));
188
- registerPointerEvent(
189
- "pointercancel",
190
- this,
191
- this.release.bind(this)
192
- );
193
- registerPointerEvent("pointerenter", this, this.enter.bind(this));
194
- registerPointerEvent("pointerleave", this, this.leave.bind(this));
241
+ registerPointerEvent("pointerdown", this, (e) => this.clicked(e));
242
+ registerPointerEvent("pointerup", this, (e) => this.release(e));
243
+ registerPointerEvent("pointercancel", this, (e) => this.release(e));
244
+ registerPointerEvent("pointerenter", this, (e) => this.enter(e));
245
+ registerPointerEvent("pointerleave", this, (e) => this.leave(e));
246
+
247
+ // call the parent function
248
+ super.onActivateEvent();
195
249
  }
196
250
 
197
251
  /**
@@ -200,12 +254,28 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
200
254
  */
201
255
  onDeactivateEvent() {
202
256
  // release pointer events
203
- releasePointerEvent("pointerdown", this.hitbox);
257
+ releasePointerEvent("pointerdown", this);
204
258
  releasePointerEvent("pointerup", this);
205
259
  releasePointerEvent("pointercancel", this);
206
260
  releasePointerEvent("pointerenter", this);
207
261
  releasePointerEvent("pointerleave", this);
208
262
  timer.clearTimeout(this.holdTimeout);
263
+ this.holdTimeout = -1;
264
+
265
+ // unregister on the global pointermove event
266
+ // note: this is just a precaution, in case
267
+ // the object is being remove from his parent
268
+ // container before the leave function is called
269
+ if (this.isDraggable === true) {
270
+ off(POINTERMOVE, this.pointerMove);
271
+ if (typeof this.grabOffset !== "undefined") {
272
+ pool.push(this.grabOffset);
273
+ this.grabOffset = undefined;
274
+ }
275
+ }
276
+
277
+ // call the parent function
278
+ super.onDeactivateEvent();
209
279
  }
210
280
  }
211
281
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v14.5.0
2
+ * melonJS Game Engine - v15.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,31 +11,29 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
11
11
 
12
12
  /**
13
13
  * @classdesc
14
- * This is a basic sprite based button which you can use in your Game UI.
14
+ * This is a basic sprite based button which you can use in your Game UI.
15
15
  * @augments Sprite
16
16
  */
17
17
  class UISpriteElement extends Sprite {
18
18
  /**
19
- * @param {number} x - the x coordinate of the GUI Object
20
- * @param {number} y - the y coordinate of the GUI Object
19
+ * @param {number} x - the x coordinate of the UISpriteElement Object
20
+ * @param {number} y - the y coordinate of the UISpriteElement Object
21
21
  * @param {object} settings - See {@link Sprite}
22
22
  * @example
23
23
  * // create a basic GUI Object
24
24
  * class myButton extends UISpriteElement {
25
25
  * constructor(x, y) {
26
- * var settings = {}
27
- * settings.image = "button";
28
- * settings.framewidth = 100;
29
- * settings.frameheight = 50;
30
- * // super constructor
31
- * super(x, y, settings);
32
- * // define the object z order
33
- * this.pos.z = 4;
26
+ * // call the UISpriteElement parent constructor
27
+ * super(x, y, {
28
+ * image: "button",
29
+ * framewidth: 100,
30
+ * frameheight: 50
31
+ * });
34
32
  * }
35
33
  *
36
34
  * // output something in the console
37
35
  * // when the object is clicked
38
- * onClick:function (event) {
36
+ * onClick(event) {
39
37
  * console.log("clicked!");
40
38
  * // don't propagate the event
41
39
  * return false;
@@ -43,7 +41,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
43
41
  * });
44
42
  *
45
43
  * // add the object at pos (10,10)
46
- * me.game.world.addChild(new myButton(10,10));
44
+ * world.addChild(new myButton(10,10));
47
45
  */
48
46
  constructor(x, y, settings) {
49
47
 
@@ -79,7 +77,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
79
77
  this.hover = false;
80
78
 
81
79
  // object has been updated (clicked,etc..)
82
- this.holdTimeout = null;
80
+ this.holdTimeout = -1;
83
81
  this.released = true;
84
82
 
85
83
  // GUI items use screen coordinates
@@ -99,10 +97,8 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
99
97
  this.dirty = true;
100
98
  this.released = false;
101
99
  if (this.isHoldable) {
102
- if (this.holdTimeout !== null) {
103
- timer.clearTimeout(this.holdTimeout);
104
- }
105
- this.holdTimeout = timer.setTimeout(this.hold.bind(this), this.holdThreshold, false);
100
+ timer.clearTimeout(this.holdTimeout);
101
+ this.holdTimeout = timer.setTimeout(() => this.hold(), this.holdThreshold, false);
106
102
  this.released = false;
107
103
  }
108
104
  return this.onClick(event);
@@ -164,6 +160,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
164
160
  this.released = true;
165
161
  this.dirty = true;
166
162
  timer.clearTimeout(this.holdTimeout);
163
+ this.holdTimeout = -1;
167
164
  return this.onRelease(event);
168
165
  }
169
166
  }
@@ -182,6 +179,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
182
179
  */
183
180
  hold() {
184
181
  timer.clearTimeout(this.holdTimeout);
182
+ this.holdTimeout = -1;
185
183
  this.dirty = true;
186
184
  if (!this.released) {
187
185
  this.onHold();
@@ -192,7 +190,8 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
192
190
  * function called when the object is pressed and held<br>
193
191
  * to be extended <br>
194
192
  */
195
- onHold() {}
193
+ onHold() {
194
+ }
196
195
 
197
196
  /**
198
197
  * function called when added to the game world or a container
@@ -200,11 +199,11 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
200
199
  */
201
200
  onActivateEvent() {
202
201
  // register pointer events
203
- registerPointerEvent("pointerdown", this, this.clicked.bind(this));
204
- registerPointerEvent("pointerup", this, this.release.bind(this));
205
- registerPointerEvent("pointercancel", this, this.release.bind(this));
206
- registerPointerEvent("pointerenter", this, this.enter.bind(this));
207
- registerPointerEvent("pointerleave", this, this.leave.bind(this));
202
+ registerPointerEvent("pointerdown", this, (e) => this.clicked(e));
203
+ registerPointerEvent("pointerup", this, (e) => this.release(e));
204
+ registerPointerEvent("pointercancel", this, (e) => this.release(e));
205
+ registerPointerEvent("pointerenter", this, (e) => this.enter(e));
206
+ registerPointerEvent("pointerleave", this, (e) => this.leave(e));
208
207
  }
209
208
 
210
209
  /**
@@ -219,6 +218,7 @@ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerev
219
218
  releasePointerEvent("pointerenter", this);
220
219
  releasePointerEvent("pointerleave", this);
221
220
  timer.clearTimeout(this.holdTimeout);
221
+ this.holdTimeout = -1;
222
222
  }
223
223
  }
224
224