melonjs 15.0.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 (285) hide show
  1. package/README.md +4 -4
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  3. package/dist/melonjs.mjs/_virtual/arraymultimap.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  6. package/dist/melonjs.mjs/_virtual/index.js +7 -3
  7. package/dist/melonjs.mjs/_virtual/index2.js +1 -1
  8. package/dist/melonjs.mjs/_virtual/multimap.js +1 -1
  9. package/dist/melonjs.mjs/_virtual/setmultimap.js +1 -1
  10. package/dist/melonjs.mjs/application/application.js +27 -17
  11. package/dist/melonjs.mjs/application/header.js +6 -5
  12. package/dist/melonjs.mjs/application/resize.js +20 -20
  13. package/dist/melonjs.mjs/application/settings.js +1 -1
  14. package/dist/melonjs.mjs/audio/audio.js +17 -17
  15. package/dist/melonjs.mjs/camera/camera2d.js +10 -10
  16. package/dist/melonjs.mjs/const.js +1 -1
  17. package/dist/melonjs.mjs/entity/entity.js +4 -4
  18. package/dist/melonjs.mjs/geometries/ellipse.js +6 -6
  19. package/dist/melonjs.mjs/geometries/line.js +9 -9
  20. package/dist/melonjs.mjs/geometries/path2d.js +53 -53
  21. package/dist/melonjs.mjs/geometries/point.js +2 -2
  22. package/dist/melonjs.mjs/geometries/poly.js +29 -29
  23. package/dist/melonjs.mjs/geometries/rectangle.js +8 -8
  24. package/dist/melonjs.mjs/geometries/roundrect.js +6 -6
  25. package/dist/melonjs.mjs/index.js +5 -5
  26. package/dist/melonjs.mjs/input/gamepad.js +30 -30
  27. package/dist/melonjs.mjs/input/input.js +2 -2
  28. package/dist/melonjs.mjs/input/keyboard.js +15 -15
  29. package/dist/melonjs.mjs/input/pointer.js +2 -2
  30. package/dist/melonjs.mjs/input/pointerevent.js +58 -58
  31. package/dist/melonjs.mjs/lang/console.js +3 -3
  32. package/dist/melonjs.mjs/lang/deprecated.js +2 -2
  33. package/dist/melonjs.mjs/level/level.js +9 -9
  34. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +3 -3
  35. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +31 -31
  36. package/dist/melonjs.mjs/level/tiled/TMXObject.js +8 -8
  37. package/dist/melonjs.mjs/level/tiled/TMXTile.js +8 -8
  38. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +19 -19
  39. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +15 -15
  40. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +3 -3
  41. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +46 -41
  42. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +30 -30
  44. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +21 -21
  45. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +10 -10
  46. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +2 -2
  47. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +6 -6
  48. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  49. package/dist/melonjs.mjs/loader/cache.js +1 -1
  50. package/dist/melonjs.mjs/loader/loader.js +7 -7
  51. package/dist/melonjs.mjs/loader/loadingscreen.js +2 -2
  52. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  53. package/dist/melonjs.mjs/loader/parser.js +13 -13
  54. package/dist/melonjs.mjs/loader/settings.js +3 -3
  55. package/dist/melonjs.mjs/math/color.js +21 -21
  56. package/dist/melonjs.mjs/math/math.js +2 -2
  57. package/dist/melonjs.mjs/math/matrix2.js +22 -22
  58. package/dist/melonjs.mjs/math/matrix3.js +52 -52
  59. package/dist/melonjs.mjs/math/observable_vector2.js +12 -12
  60. package/dist/melonjs.mjs/math/observable_vector3.js +22 -22
  61. package/dist/melonjs.mjs/math/vector2.js +11 -11
  62. package/dist/melonjs.mjs/math/vector3.js +21 -21
  63. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +45 -0
  64. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +130 -0
  65. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +1 -1
  66. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +1 -1
  67. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +1 -1
  68. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +1 -1
  69. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  70. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +2 -2
  71. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  72. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  73. package/dist/melonjs.mjs/particles/emitter.js +5 -5
  74. package/dist/melonjs.mjs/particles/particle.js +8 -8
  75. package/dist/melonjs.mjs/particles/settings.js +3 -3
  76. package/dist/melonjs.mjs/physics/body.js +17 -17
  77. package/dist/melonjs.mjs/physics/bounds.js +12 -12
  78. package/dist/melonjs.mjs/physics/collision.js +3 -3
  79. package/dist/melonjs.mjs/physics/detector.js +14 -14
  80. package/dist/melonjs.mjs/physics/quadtree.js +19 -19
  81. package/dist/melonjs.mjs/physics/response.js +1 -1
  82. package/dist/melonjs.mjs/physics/sat.js +60 -60
  83. package/dist/melonjs.mjs/physics/world.js +4 -4
  84. package/dist/melonjs.mjs/plugin/plugin.js +11 -11
  85. package/dist/melonjs.mjs/renderable/collectable.js +2 -2
  86. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  87. package/dist/melonjs.mjs/renderable/container.js +77 -59
  88. package/dist/melonjs.mjs/renderable/dragndrop.js +5 -5
  89. package/dist/melonjs.mjs/renderable/imagelayer.js +7 -6
  90. package/dist/melonjs.mjs/renderable/light2d.js +6 -6
  91. package/dist/melonjs.mjs/renderable/nineslicesprite.js +12 -12
  92. package/dist/melonjs.mjs/renderable/renderable.js +11 -11
  93. package/dist/melonjs.mjs/renderable/sprite.js +25 -25
  94. package/dist/melonjs.mjs/renderable/trigger.js +11 -9
  95. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +97 -27
  96. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +25 -25
  97. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +83 -63
  98. package/dist/melonjs.mjs/state/stage.js +7 -7
  99. package/dist/melonjs.mjs/state/state.js +15 -15
  100. package/dist/melonjs.mjs/system/device.js +2 -2
  101. package/dist/melonjs.mjs/system/dom.js +1 -1
  102. package/dist/melonjs.mjs/system/event.js +2 -2
  103. package/dist/melonjs.mjs/system/platform.js +1 -1
  104. package/dist/melonjs.mjs/system/pooling.js +9 -9
  105. package/dist/melonjs.mjs/system/save.js +6 -6
  106. package/dist/melonjs.mjs/system/timer.js +16 -12
  107. package/dist/melonjs.mjs/text/bitmaptext.js +20 -20
  108. package/dist/melonjs.mjs/text/bitmaptextdata.js +22 -22
  109. package/dist/melonjs.mjs/text/glyph.js +3 -3
  110. package/dist/melonjs.mjs/text/text.js +10 -9
  111. package/dist/melonjs.mjs/text/textmetrics.js +15 -15
  112. package/dist/melonjs.mjs/text/textstyle.js +1 -1
  113. package/dist/melonjs.mjs/tweens/easing.js +4 -4
  114. package/dist/melonjs.mjs/tweens/interpolation.js +8 -8
  115. package/dist/melonjs.mjs/tweens/tween.js +11 -11
  116. package/dist/melonjs.mjs/utils/agent.js +6 -6
  117. package/dist/melonjs.mjs/utils/array.js +4 -4
  118. package/dist/melonjs.mjs/utils/file.js +1 -1
  119. package/dist/melonjs.mjs/utils/function.js +5 -5
  120. package/dist/melonjs.mjs/utils/string.js +3 -3
  121. package/dist/melonjs.mjs/utils/utils.js +16 -16
  122. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +35 -109
  123. package/dist/melonjs.mjs/video/renderer.js +74 -7
  124. package/dist/melonjs.mjs/video/texture/atlas.js +37 -37
  125. package/dist/melonjs.mjs/video/texture/cache.js +9 -10
  126. package/dist/melonjs.mjs/video/texture/canvas_texture.js +63 -3
  127. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  128. package/dist/melonjs.mjs/video/video.js +2 -2
  129. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +3 -3
  130. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +5 -5
  131. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +5 -5
  132. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +18 -15
  133. package/dist/melonjs.mjs/video/webgl/glshader.js +7 -7
  134. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  135. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
  136. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  137. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
  138. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +2 -2
  139. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  140. package/dist/melonjs.mjs/video/webgl/utils/program.js +7 -7
  141. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  142. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +4 -4
  143. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +55 -38
  144. package/dist/melonjs.module.js +1747 -1809
  145. package/dist/types/application/application.d.ts +11 -8
  146. package/dist/types/audio/audio.d.ts +3 -3
  147. package/dist/types/index.d.ts +4 -3
  148. package/dist/types/input/input.d.ts +1 -1
  149. package/dist/types/input/keyboard.d.ts +1 -1
  150. package/dist/types/input/pointerevent.d.ts +6 -6
  151. package/dist/types/level/level.d.ts +2 -2
  152. package/dist/types/level/tiled/TMXLayer.d.ts +4 -4
  153. package/dist/types/level/tiled/TMXTileMap.d.ts +2 -2
  154. package/dist/types/level/tiled/TMXUtils.d.ts +5 -4
  155. package/dist/types/loader/loader.d.ts +2 -2
  156. package/dist/types/loader/settings.d.ts +2 -2
  157. package/dist/types/particles/emitter.d.ts +1 -1
  158. package/dist/types/physics/collision.d.ts +1 -1
  159. package/dist/types/physics/detector.d.ts +1 -1
  160. package/dist/types/plugin/plugin.d.ts +2 -2
  161. package/dist/types/renderable/container.d.ts +21 -17
  162. package/dist/types/renderable/sprite.d.ts +11 -11
  163. package/dist/types/renderable/trigger.d.ts +1 -1
  164. package/dist/types/renderable/ui/uibaseelement.d.ts +28 -6
  165. package/dist/types/renderable/ui/uispriteelement.d.ts +12 -14
  166. package/dist/types/renderable/ui/uitextbutton.d.ts +52 -11
  167. package/dist/types/state/stage.d.ts +1 -1
  168. package/dist/types/system/device.d.ts +1 -1
  169. package/dist/types/system/pooling.d.ts +3 -3
  170. package/dist/types/system/timer.d.ts +5 -5
  171. package/dist/types/text/bitmaptext.d.ts +1 -1
  172. package/dist/types/text/text.d.ts +1 -1
  173. package/dist/types/utils/array.d.ts +2 -2
  174. package/dist/types/video/canvas/canvas_renderer.d.ts +8 -76
  175. package/dist/types/video/renderer.d.ts +48 -0
  176. package/dist/types/video/texture/atlas.d.ts +3 -3
  177. package/dist/types/video/texture/canvas_texture.d.ts +40 -0
  178. package/dist/types/video/webgl/glshader.d.ts +1 -1
  179. package/dist/types/video/webgl/webgl_renderer.d.ts +13 -9
  180. package/package.json +14 -14
  181. package/src/application/application.js +26 -16
  182. package/src/application/header.js +5 -4
  183. package/src/application/resize.js +19 -19
  184. package/src/audio/audio.js +16 -16
  185. package/src/camera/camera2d.js +9 -9
  186. package/src/entity/entity.js +3 -3
  187. package/src/geometries/ellipse.js +5 -5
  188. package/src/geometries/line.js +8 -8
  189. package/src/geometries/path2d.js +52 -52
  190. package/src/geometries/point.js +1 -1
  191. package/src/geometries/poly.js +28 -28
  192. package/src/geometries/rectangle.js +7 -7
  193. package/src/geometries/roundrect.js +5 -5
  194. package/src/index.js +3 -2
  195. package/src/input/gamepad.js +29 -29
  196. package/src/input/input.js +1 -1
  197. package/src/input/keyboard.js +14 -14
  198. package/src/input/pointer.js +1 -1
  199. package/src/input/pointerevent.js +52 -52
  200. package/src/lang/console.js +2 -2
  201. package/src/lang/deprecated.js +1 -1
  202. package/src/level/level.js +8 -8
  203. package/src/level/tiled/TMXGroup.js +2 -2
  204. package/src/level/tiled/TMXLayer.js +30 -30
  205. package/src/level/tiled/TMXObject.js +7 -7
  206. package/src/level/tiled/TMXTile.js +7 -7
  207. package/src/level/tiled/TMXTileMap.js +18 -18
  208. package/src/level/tiled/TMXTileset.js +14 -14
  209. package/src/level/tiled/TMXTilesetGroup.js +2 -2
  210. package/src/level/tiled/TMXUtils.js +45 -40
  211. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +29 -29
  212. package/src/level/tiled/renderer/TMXIsometricRenderer.js +20 -20
  213. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +9 -9
  214. package/src/level/tiled/renderer/TMXRenderer.js +1 -1
  215. package/src/level/tiled/renderer/TMXStaggeredRenderer.js +5 -5
  216. package/src/loader/loader.js +6 -6
  217. package/src/loader/loadingscreen.js +1 -1
  218. package/src/loader/parser.js +12 -12
  219. package/src/loader/settings.js +2 -2
  220. package/src/math/color.js +20 -20
  221. package/src/math/math.js +1 -1
  222. package/src/math/matrix2.js +21 -21
  223. package/src/math/matrix3.js +51 -51
  224. package/src/math/observable_vector2.js +11 -11
  225. package/src/math/observable_vector3.js +21 -21
  226. package/src/math/vector2.js +10 -10
  227. package/src/math/vector3.js +20 -20
  228. package/src/particles/emitter.js +4 -4
  229. package/src/particles/particle.js +7 -7
  230. package/src/particles/settings.js +2 -2
  231. package/src/physics/body.js +16 -16
  232. package/src/physics/bounds.js +11 -11
  233. package/src/physics/collision.js +2 -2
  234. package/src/physics/detector.js +13 -13
  235. package/src/physics/quadtree.js +18 -18
  236. package/src/physics/sat.js +59 -59
  237. package/src/physics/world.js +3 -3
  238. package/src/plugin/plugin.js +8 -8
  239. package/src/renderable/collectable.js +1 -1
  240. package/src/renderable/container.js +76 -58
  241. package/src/renderable/dragndrop.js +4 -4
  242. package/src/renderable/imagelayer.js +6 -5
  243. package/src/renderable/light2d.js +5 -5
  244. package/src/renderable/nineslicesprite.js +11 -11
  245. package/src/renderable/renderable.js +10 -10
  246. package/src/renderable/sprite.js +24 -24
  247. package/src/renderable/trigger.js +10 -8
  248. package/src/renderable/ui/uibaseelement.js +96 -26
  249. package/src/renderable/ui/uispriteelement.js +24 -24
  250. package/src/renderable/ui/uitextbutton.js +85 -65
  251. package/src/state/stage.js +6 -6
  252. package/src/state/state.js +14 -14
  253. package/src/system/device.js +1 -1
  254. package/src/system/event.js +1 -1
  255. package/src/system/pooling.js +8 -8
  256. package/src/system/save.js +5 -5
  257. package/src/system/timer.js +15 -11
  258. package/src/text/bitmaptext.js +19 -19
  259. package/src/text/bitmaptextdata.js +21 -21
  260. package/src/text/glyph.js +2 -2
  261. package/src/text/text.js +9 -8
  262. package/src/text/textmetrics.js +14 -14
  263. package/src/tweens/easing.js +3 -3
  264. package/src/tweens/interpolation.js +7 -7
  265. package/src/tweens/tween.js +10 -10
  266. package/src/utils/agent.js +5 -5
  267. package/src/utils/array.js +3 -3
  268. package/src/utils/function.js +4 -4
  269. package/src/utils/string.js +2 -2
  270. package/src/utils/utils.js +15 -15
  271. package/src/video/canvas/canvas_renderer.js +34 -108
  272. package/src/video/renderer.js +72 -5
  273. package/src/video/texture/atlas.js +36 -36
  274. package/src/video/texture/cache.js +6 -6
  275. package/src/video/texture/canvas_texture.js +62 -2
  276. package/src/video/video.js +1 -1
  277. package/src/video/webgl/buffer/vertex.js +2 -2
  278. package/src/video/webgl/compositors/compositor.js +4 -4
  279. package/src/video/webgl/compositors/primitive_compositor.js +4 -4
  280. package/src/video/webgl/compositors/quad_compositor.js +17 -14
  281. package/src/video/webgl/glshader.js +6 -6
  282. package/src/video/webgl/utils/attributes.js +1 -1
  283. package/src/video/webgl/utils/program.js +6 -6
  284. package/src/video/webgl/utils/uniforms.js +3 -3
  285. package/src/video/webgl/webgl_renderer.js +54 -37
@@ -26,7 +26,7 @@ import Color from "../math/color.js";
26
26
  * @param {Vector2d} [settings.anchorPoint={x:0.5, y:0.5}] - Anchor point to draw the frame at (defaults to the center of the frame).
27
27
  * @example
28
28
  * // create a single sprite from a standalone image, with anchor in the center
29
- * var sprite = new me.Sprite(0, 0, {
29
+ * let sprite = new me.Sprite(0, 0, {
30
30
  * image : "PlayerTexture",
31
31
  * framewidth : 64,
32
32
  * frameheight : 64,
@@ -34,12 +34,12 @@ import Color from "../math/color.js";
34
34
  * });
35
35
  *
36
36
  * // create a single sprite from a packed texture
37
- * game.texture = new me.TextureAtlas(
37
+ * mytexture = new me.TextureAtlas(
38
38
  * me.loader.getJSON("texture"),
39
39
  * me.loader.getImage("texture")
40
40
  * );
41
- * var sprite = new me.Sprite(0, 0, {
42
- * image : game.texture,
41
+ * let sprite = new me.Sprite(0, 0, {
42
+ * image : mytexture,
43
43
  * region : "npc2.png",
44
44
  * });
45
45
  */
@@ -128,7 +128,7 @@ import Color from "../math/color.js";
128
128
  // check for defined region
129
129
  if (typeof (settings.region) !== "undefined") {
130
130
  // use a texture atlas
131
- var region = this.source.getRegion(settings.region);
131
+ let region = this.source.getRegion(settings.region);
132
132
  if (region) {
133
133
  // set the sprite region within the texture
134
134
  this.setRegion(region);
@@ -223,7 +223,7 @@ import Color from "../math/color.js";
223
223
  * // make the object flicker for 1 second
224
224
  * // and then remove it
225
225
  * this.flicker(1000, function () {
226
- * me.game.world.removeChild(this);
226
+ * world.removeChild(this);
227
227
  * });
228
228
  */
229
229
  flicker(duration, callback) {
@@ -281,7 +281,7 @@ import Color from "../math/color.js";
281
281
  };
282
282
 
283
283
  // # of frames
284
- var counter = 0;
284
+ let counter = 0;
285
285
 
286
286
  if (typeof (this.textureAtlas) !== "object") {
287
287
  return 0;
@@ -297,9 +297,9 @@ import Color from "../math/color.js";
297
297
  }
298
298
 
299
299
  // set each frame configuration (offset, size, etc..)
300
- for (var i = 0, len = index.length; i < len; i++) {
301
- var frame = index[i];
302
- var frameObject;
300
+ for (let i = 0, len = index.length; i < len; i++) {
301
+ let frame = index[i];
302
+ let frameObject;
303
303
  if (typeof(frame) === "number" || typeof(frame) === "string") {
304
304
  frameObject = {
305
305
  name: frame,
@@ -309,7 +309,7 @@ import Color from "../math/color.js";
309
309
  else {
310
310
  frameObject = frame;
311
311
  }
312
- var frameObjectName = frameObject.name;
312
+ let frameObjectName = frameObject.name;
313
313
  if (typeof(frameObjectName) === "number") {
314
314
  if (typeof (this.textureAtlas[frameObjectName]) !== "undefined") {
315
315
  // TODO: adding the cache source coordinates add undefined entries in webGL mode
@@ -362,13 +362,13 @@ import Color from "../math/color.js";
362
362
  * this.setCurrentAnimation("eat", "walk");
363
363
  *
364
364
  * // set "die" animation, and remove the object when finished
365
- * this.setCurrentAnimation("die", (function () {
366
- * me.game.world.removeChild(this);
365
+ * this.setCurrentAnimation("die", () => {
366
+ * world.removeChild(this);
367
367
  * return false; // do not reset to first frame
368
- * }).bind(this));
368
+ * });
369
369
  *
370
370
  * // set "attack" animation, and pause for a short duration
371
- * this.setCurrentAnimation("die", (function () {
371
+ * this.setCurrentAnimation("die", () => {
372
372
  * this.animationpause = true;
373
373
  *
374
374
  * // back to "standing" animation after 1 second
@@ -377,7 +377,7 @@ import Color from "../math/color.js";
377
377
  * }, 1000);
378
378
  *
379
379
  * return false; // do not reset to first frame
380
- * }).bind(this));
380
+ * });
381
381
  */
382
382
  setCurrentAnimation(name, resetAnim, preserve_dt = false) {
383
383
  if (typeof this.anim[name] !== "undefined") {
@@ -445,7 +445,7 @@ import Color from "../math/color.js";
445
445
  * @returns {Sprite} Reference to this object for method chaining
446
446
  * @example
447
447
  * // change the sprite to "shadedDark13.png";
448
- * mySprite.setRegion(game.texture.getRegion("shadedDark13.png"));
448
+ * mySprite.setRegion(mytexture.getRegion("shadedDark13.png"));
449
449
  */
450
450
  setRegion(region) {
451
451
  // set the source texture for the given region
@@ -519,13 +519,13 @@ import Color from "../math/color.js";
519
519
  update(dt) {
520
520
  // Update animation if necessary
521
521
  if (!this.animationpause && this.current.length > 1) {
522
- var duration = this.getAnimationFrameObjectByIndex(this.current.idx).delay;
522
+ let duration = this.getAnimationFrameObjectByIndex(this.current.idx).delay;
523
523
  this.dt += dt;
524
524
  while (this.dt >= duration) {
525
525
  this.isDirty = true;
526
526
  this.dt -= duration;
527
527
 
528
- var nextFrame = (this.current.length > 1 ? this.current.idx + 1 : this.current.idx);
528
+ let nextFrame = (this.current.length > 1 ? this.current.idx + 1 : this.current.idx);
529
529
  this.setAnimationFrame(nextFrame);
530
530
 
531
531
  // Switch animation if we reach the end of the strip and a callback is defined
@@ -588,18 +588,18 @@ import Color from "../math/color.js";
588
588
  }
589
589
 
590
590
  // the frame to draw
591
- var frame = this.current;
591
+ let frame = this.current;
592
592
 
593
593
  // cache the current position and size
594
- var xpos = this.pos.x,
594
+ let xpos = this.pos.x,
595
595
  ypos = this.pos.y;
596
596
 
597
- var w = frame.width,
597
+ let w = frame.width,
598
598
  h = frame.height;
599
599
 
600
600
  // frame offset in the texture/atlas
601
- var frame_offset = frame.offset;
602
- var g_offset = this.offset;
601
+ let frame_offset = frame.offset;
602
+ let g_offset = this.offset;
603
603
 
604
604
 
605
605
  // remove image's TexturePacker/ShoeBox rotation
@@ -2,7 +2,6 @@ import Renderable from "./renderable.js";
2
2
  import collision from "./../physics/collision.js";
3
3
  import Body from "./../physics/body.js";
4
4
  import level from "./../level/level.js";
5
- import { game } from "../index.js";
6
5
  import pool from "./../system/pooling.js";
7
6
 
8
7
  /**
@@ -26,7 +25,7 @@ import pool from "./../system/pooling.js";
26
25
  * @param {boolean} [settings.flatten] - Flatten all objects into the target container. See {@link level.load}
27
26
  * @param {boolean} [settings.setViewportBounds] - Resize the viewport to match the level. See {@link level.load}
28
27
  * @example
29
- * me.game.world.addChild(new me.Trigger(
28
+ * world.addChild(new me.Trigger(
30
29
  * x, y, {
31
30
  * shapes: [new me.Rect(0, 0, 100, 100)],
32
31
  * "duration" : 250,
@@ -67,7 +66,7 @@ import pool from "./../system/pooling.js";
67
66
  });
68
67
 
69
68
  // add and configure the physic body
70
- var shape = settings.shapes;
69
+ let shape = settings.shapes;
71
70
  if (typeof shape === "undefined") {
72
71
  shape = pool.pull("Polygon", 0, 0, [
73
72
  pool.pull("Vector2d", 0, 0),
@@ -87,9 +86,10 @@ import pool from "./../system/pooling.js";
87
86
  * @ignore
88
87
  */
89
88
  getTriggerSettings() {
89
+ let world = this.ancestor.getRootAncestor();
90
90
  // Lookup for the container instance
91
91
  if (typeof(this.triggerSettings.container) === "string") {
92
- this.triggerSettings.container = game.world.getChildByName(this.triggerSettings.container)[0];
92
+ this.triggerSettings.container = world.getChildByName(this.triggerSettings.container)[0];
93
93
  }
94
94
  return this.triggerSettings;
95
95
  }
@@ -98,8 +98,9 @@ import pool from "./../system/pooling.js";
98
98
  * @ignore
99
99
  */
100
100
  onFadeComplete() {
101
+ let world = this.ancestor.getRootAncestor();
101
102
  level.load(this.gotolevel, this.getTriggerSettings());
102
- game.viewport.fadeOut(this.fade, this.duration);
103
+ world.app.viewport.fadeOut(this.fade, this.duration);
103
104
  }
104
105
 
105
106
  /**
@@ -109,7 +110,8 @@ import pool from "./../system/pooling.js";
109
110
  * @protected
110
111
  */
111
112
  triggerEvent() {
112
- var triggerSettings = this.getTriggerSettings();
113
+ let triggerSettings = this.getTriggerSettings();
114
+ let world = this.ancestor.getRootAncestor();
113
115
 
114
116
  if (triggerSettings.event === "level") {
115
117
  this.gotolevel = triggerSettings.to;
@@ -118,8 +120,8 @@ import pool from "./../system/pooling.js";
118
120
  if (this.fade && this.duration) {
119
121
  if (!this.fading) {
120
122
  this.fading = true;
121
- game.viewport.fadeIn(this.fade, this.duration,
122
- this.onFadeComplete.bind(this));
123
+ world.app.viewport.fadeIn(this.fade, this.duration,
124
+ () => this.onFadeComplete());
123
125
  }
124
126
  } else {
125
127
  level.load(this.gotolevel, triggerSettings);
@@ -1,12 +1,13 @@
1
1
  import Container from "../container.js";
2
2
  import timer from "../../system/timer.js";
3
+ import { on, off, POINTERMOVE } from "../../system/event.js";
3
4
  import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js";
5
+ import pool from "../../system/pooling.js";
4
6
 
5
7
  /**
6
8
  * @classdesc
7
- * This is a basic clickable container which you can use in your game UI.
8
- * Use this for example if you want to display a button which contains
9
- * text and images.
9
+ * This is a basic clickable and draggable container which you can use in your game UI.
10
+ * Use this for example if you want to display a panel that contains text, images or other UI elements.
10
11
  * @augments Container
11
12
  */
12
13
  export default class UIBaseElement extends Container {
@@ -14,17 +15,25 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
14
15
  *
15
16
  * @param {number} x - The x position of the container
16
17
  * @param {number} y - The y position of the container
17
- * @param {number} w - width of the container (default: viewport width)
18
- * @param {number} h - height of the container (default: viewport height)
18
+ * @param {number} w - width of the container
19
+ * @param {number} h - height of the container
19
20
  */
20
21
  constructor(x, y, w, h) {
21
22
  super(x, y, w, h);
22
23
  /**
23
24
  * object can be clicked or not
24
25
  * @type {boolean}
26
+ * @default true
25
27
  */
26
28
  this.isClickable = true;
27
29
 
30
+ /**
31
+ * object can be clicked or not
32
+ * @type {boolean}
33
+ * @default false
34
+ */
35
+ this.isDraggable = false;
36
+
28
37
  /**
29
38
  * Tap and hold threshold timeout in ms
30
39
  * @type {number}
@@ -46,13 +55,25 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
46
55
  */
47
56
  this.hover = false;
48
57
 
49
- // object has been updated (clicked,etc..)
50
- this.holdTimeout = null;
58
+ /**
59
+ * false if the pointer is down, or true when the pointer status is up
60
+ * @type {boolean}
61
+ * @default false
62
+ */
51
63
  this.released = true;
52
64
 
53
- // GUI items use screen coordinates
65
+ /**
66
+ * UI base elements use screen coordinates by default
67
+ * (Note: any child elements added to a UIBaseElement should set their floating property to false)
68
+ * @see Renderable.floating
69
+ * @type {boolean}
70
+ * @default true
71
+ */
54
72
  this.floating = true;
55
73
 
74
+ // object has been updated (clicked,etc..)
75
+ this.holdTimeout = -1;
76
+
56
77
  // enable event detection
57
78
  this.isKinematic = false;
58
79
  }
@@ -67,16 +88,18 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
67
88
  this.dirty = true;
68
89
  this.released = false;
69
90
  if (this.isHoldable) {
70
- if (this.holdTimeout !== null) {
71
- timer.clearTimeout(this.holdTimeout);
72
- }
91
+ timer.clearTimeout(this.holdTimeout);
73
92
  this.holdTimeout = timer.setTimeout(
74
- this.hold.bind(this),
93
+ () => this.hold(),
75
94
  this.holdThreshold,
76
95
  false
77
96
  );
78
97
  this.released = false;
79
98
  }
99
+ if (this.isDraggable) {
100
+ this.grabOffset.set(event.gameX, event.gameY);
101
+ this.grabOffset.sub(this.pos);
102
+ }
80
103
  return this.onClick(event);
81
104
  }
82
105
  }
@@ -97,9 +120,37 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
97
120
  enter(event) {
98
121
  this.hover = true;
99
122
  this.dirty = true;
123
+ if (this.isDraggable === true) {
124
+ on(POINTERMOVE, this.pointerMove, this);
125
+ // to memorize where we grab the object
126
+ this.grabOffset = pool.pull("Vector2d", 0, 0);
127
+ }
100
128
  return this.onOver(event);
101
129
  }
102
130
 
131
+ /**
132
+ * pointermove function
133
+ * @ignore
134
+ */
135
+ pointerMove(event) {
136
+ if (this.hover === true && this.released === false) {
137
+ // follow the pointer
138
+ this.pos.set(event.gameX, event.gameY, this.pos.z);
139
+ this.pos.sub(this.grabOffset);
140
+ // mark the container for redraw
141
+ this.isDirty = true;
142
+ return this.onMove(event);
143
+ }
144
+ }
145
+
146
+ /**
147
+ * function called when the pointer is moved over the object
148
+ * @param {Pointer} event - the event object
149
+ */
150
+ onMove(event) { // eslint-disable-line no-unused-vars
151
+ // to be extended
152
+ }
153
+
103
154
  /**
104
155
  * function called when the pointer is over the object
105
156
  * @param {Pointer} event - the event object
@@ -115,6 +166,12 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
115
166
  leave(event) {
116
167
  this.hover = false;
117
168
  this.dirty = true;
169
+ if (this.isDraggable === true) {
170
+ // unregister on the global pointermove event
171
+ off(POINTERMOVE, this.pointerMove);
172
+ pool.push(this.grabOffset);
173
+ this.grabOffset = undefined;
174
+ }
118
175
  this.release(event);
119
176
  return this.onOut(event);
120
177
  }
@@ -136,6 +193,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
136
193
  this.released = true;
137
194
  this.dirty = true;
138
195
  timer.clearTimeout(this.holdTimeout);
196
+ this.holdTimeout = -1;
139
197
  return this.onRelease(event);
140
198
  }
141
199
  }
@@ -154,6 +212,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
154
212
  */
155
213
  hold() {
156
214
  timer.clearTimeout(this.holdTimeout);
215
+ this.holdTimeout = -1;
157
216
  this.dirty = true;
158
217
  if (!this.released) {
159
218
  this.onHold();
@@ -172,19 +231,14 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
172
231
  */
173
232
  onActivateEvent() {
174
233
  // register pointer events
175
- registerPointerEvent(
176
- "pointerdown",
177
- this,
178
- this.clicked.bind(this)
179
- );
180
- registerPointerEvent("pointerup", this, this.release.bind(this));
181
- registerPointerEvent(
182
- "pointercancel",
183
- this,
184
- this.release.bind(this)
185
- );
186
- registerPointerEvent("pointerenter", this, this.enter.bind(this));
187
- registerPointerEvent("pointerleave", this, this.leave.bind(this));
234
+ registerPointerEvent("pointerdown", this, (e) => this.clicked(e));
235
+ registerPointerEvent("pointerup", this, (e) => this.release(e));
236
+ registerPointerEvent("pointercancel", this, (e) => this.release(e));
237
+ registerPointerEvent("pointerenter", this, (e) => this.enter(e));
238
+ registerPointerEvent("pointerleave", this, (e) => this.leave(e));
239
+
240
+ // call the parent function
241
+ super.onActivateEvent();
188
242
  }
189
243
 
190
244
  /**
@@ -193,11 +247,27 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
193
247
  */
194
248
  onDeactivateEvent() {
195
249
  // release pointer events
196
- releasePointerEvent("pointerdown", this.hitbox);
250
+ releasePointerEvent("pointerdown", this);
197
251
  releasePointerEvent("pointerup", this);
198
252
  releasePointerEvent("pointercancel", this);
199
253
  releasePointerEvent("pointerenter", this);
200
254
  releasePointerEvent("pointerleave", this);
201
255
  timer.clearTimeout(this.holdTimeout);
256
+ this.holdTimeout = -1;
257
+
258
+ // unregister on the global pointermove event
259
+ // note: this is just a precaution, in case
260
+ // the object is being remove from his parent
261
+ // container before the leave function is called
262
+ if (this.isDraggable === true) {
263
+ off(POINTERMOVE, this.pointerMove);
264
+ if (typeof this.grabOffset !== "undefined") {
265
+ pool.push(this.grabOffset);
266
+ this.grabOffset = undefined;
267
+ }
268
+ }
269
+
270
+ // call the parent function
271
+ super.onDeactivateEvent();
202
272
  }
203
273
  }
@@ -4,31 +4,29 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
4
4
 
5
5
  /**
6
6
  * @classdesc
7
- * This is a basic sprite based button which you can use in your Game UI.
7
+ * This is a basic sprite based button which you can use in your Game UI.
8
8
  * @augments Sprite
9
9
  */
10
10
  export default class UISpriteElement extends Sprite {
11
11
  /**
12
- * @param {number} x - the x coordinate of the GUI Object
13
- * @param {number} y - the y coordinate of the GUI Object
12
+ * @param {number} x - the x coordinate of the UISpriteElement Object
13
+ * @param {number} y - the y coordinate of the UISpriteElement Object
14
14
  * @param {object} settings - See {@link Sprite}
15
15
  * @example
16
16
  * // create a basic GUI Object
17
17
  * class myButton extends UISpriteElement {
18
18
  * constructor(x, y) {
19
- * var settings = {}
20
- * settings.image = "button";
21
- * settings.framewidth = 100;
22
- * settings.frameheight = 50;
23
- * // super constructor
24
- * super(x, y, settings);
25
- * // define the object z order
26
- * this.pos.z = 4;
19
+ * // call the UISpriteElement parent constructor
20
+ * super(x, y, {
21
+ * image: "button",
22
+ * framewidth: 100,
23
+ * frameheight: 50
24
+ * });
27
25
  * }
28
26
  *
29
27
  * // output something in the console
30
28
  * // when the object is clicked
31
- * onClick:function (event) {
29
+ * onClick(event) {
32
30
  * console.log("clicked!");
33
31
  * // don't propagate the event
34
32
  * return false;
@@ -36,7 +34,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
36
34
  * });
37
35
  *
38
36
  * // add the object at pos (10,10)
39
- * me.game.world.addChild(new myButton(10,10));
37
+ * world.addChild(new myButton(10,10));
40
38
  */
41
39
  constructor(x, y, settings) {
42
40
 
@@ -72,7 +70,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
72
70
  this.hover = false;
73
71
 
74
72
  // object has been updated (clicked,etc..)
75
- this.holdTimeout = null;
73
+ this.holdTimeout = -1;
76
74
  this.released = true;
77
75
 
78
76
  // GUI items use screen coordinates
@@ -92,10 +90,8 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
92
90
  this.dirty = true;
93
91
  this.released = false;
94
92
  if (this.isHoldable) {
95
- if (this.holdTimeout !== null) {
96
- timer.clearTimeout(this.holdTimeout);
97
- }
98
- this.holdTimeout = timer.setTimeout(this.hold.bind(this), this.holdThreshold, false);
93
+ timer.clearTimeout(this.holdTimeout);
94
+ this.holdTimeout = timer.setTimeout(() => this.hold(), this.holdThreshold, false);
99
95
  this.released = false;
100
96
  }
101
97
  return this.onClick(event);
@@ -157,6 +153,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
157
153
  this.released = true;
158
154
  this.dirty = true;
159
155
  timer.clearTimeout(this.holdTimeout);
156
+ this.holdTimeout = -1;
160
157
  return this.onRelease(event);
161
158
  }
162
159
  }
@@ -175,6 +172,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
175
172
  */
176
173
  hold() {
177
174
  timer.clearTimeout(this.holdTimeout);
175
+ this.holdTimeout = -1;
178
176
  this.dirty = true;
179
177
  if (!this.released) {
180
178
  this.onHold();
@@ -185,7 +183,8 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
185
183
  * function called when the object is pressed and held<br>
186
184
  * to be extended <br>
187
185
  */
188
- onHold() {}
186
+ onHold() {
187
+ }
189
188
 
190
189
  /**
191
190
  * function called when added to the game world or a container
@@ -193,11 +192,11 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
193
192
  */
194
193
  onActivateEvent() {
195
194
  // register pointer events
196
- registerPointerEvent("pointerdown", this, this.clicked.bind(this));
197
- registerPointerEvent("pointerup", this, this.release.bind(this));
198
- registerPointerEvent("pointercancel", this, this.release.bind(this));
199
- registerPointerEvent("pointerenter", this, this.enter.bind(this));
200
- registerPointerEvent("pointerleave", this, this.leave.bind(this));
195
+ registerPointerEvent("pointerdown", this, (e) => this.clicked(e));
196
+ registerPointerEvent("pointerup", this, (e) => this.release(e));
197
+ registerPointerEvent("pointercancel", this, (e) => this.release(e));
198
+ registerPointerEvent("pointerenter", this, (e) => this.enter(e));
199
+ registerPointerEvent("pointerleave", this, (e) => this.leave(e));
201
200
  }
202
201
 
203
202
  /**
@@ -212,6 +211,7 @@ import { registerPointerEvent, releasePointerEvent} from "./../../input/input.js
212
211
  releasePointerEvent("pointerenter", this);
213
212
  releasePointerEvent("pointerleave", this);
214
213
  timer.clearTimeout(this.holdTimeout);
214
+ this.holdTimeout = -1;
215
215
  }
216
216
  }
217
217