melonjs 15.1.5 → 15.2.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 (168) hide show
  1. package/README.md +2 -2
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  3. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/index.js +1 -1
  6. package/dist/melonjs.mjs/application/application.js +3 -3
  7. package/dist/melonjs.mjs/application/header.js +1 -1
  8. package/dist/melonjs.mjs/application/resize.js +1 -1
  9. package/dist/melonjs.mjs/application/settings.js +1 -1
  10. package/dist/melonjs.mjs/audio/audio.js +1 -1
  11. package/dist/melonjs.mjs/camera/camera2d.js +3 -3
  12. package/dist/melonjs.mjs/const.js +1 -1
  13. package/dist/melonjs.mjs/entity/entity.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/index.js +12 -7
  22. package/dist/melonjs.mjs/input/gamepad.js +1 -1
  23. package/dist/melonjs.mjs/input/input.js +1 -1
  24. package/dist/melonjs.mjs/input/keyboard.js +1 -1
  25. package/dist/melonjs.mjs/input/pointer.js +1 -1
  26. package/dist/melonjs.mjs/input/pointerevent.js +1 -1
  27. package/dist/melonjs.mjs/lang/console.js +1 -1
  28. package/dist/melonjs.mjs/lang/deprecated.js +3 -2
  29. package/dist/melonjs.mjs/level/level.js +5 -4
  30. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +1 -1
  31. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +1 -1
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +1 -1
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +1 -1
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +3 -3
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +1 -1
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +1 -1
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +6 -8
  38. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  44. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  45. package/dist/melonjs.mjs/loader/cache.js +1 -1
  46. package/dist/melonjs.mjs/loader/loader.js +1 -1
  47. package/dist/melonjs.mjs/loader/loadingscreen.js +1 -1
  48. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  49. package/dist/melonjs.mjs/loader/parser.js +1 -1
  50. package/dist/melonjs.mjs/loader/settings.js +1 -1
  51. package/dist/melonjs.mjs/math/color.js +1 -1
  52. package/dist/melonjs.mjs/math/math.js +1 -1
  53. package/dist/melonjs.mjs/math/matrix2.js +1 -1
  54. package/dist/melonjs.mjs/math/matrix3.js +1 -1
  55. package/dist/melonjs.mjs/math/observable_vector2.js +1 -1
  56. package/dist/melonjs.mjs/math/observable_vector3.js +1 -1
  57. package/dist/melonjs.mjs/math/vector2.js +1 -1
  58. package/dist/melonjs.mjs/math/vector3.js +1 -1
  59. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +1 -1
  60. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +1 -1
  61. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  62. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +1 -1
  63. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  64. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  65. package/dist/melonjs.mjs/particles/emitter.js +1 -1
  66. package/dist/melonjs.mjs/particles/particle.js +1 -1
  67. package/dist/melonjs.mjs/particles/settings.js +1 -1
  68. package/dist/melonjs.mjs/physics/body.js +3 -3
  69. package/dist/melonjs.mjs/physics/bounds.js +1 -1
  70. package/dist/melonjs.mjs/physics/collision.js +1 -1
  71. package/dist/melonjs.mjs/physics/detector.js +4 -4
  72. package/dist/melonjs.mjs/physics/quadtree.js +1 -1
  73. package/dist/melonjs.mjs/physics/response.js +1 -1
  74. package/dist/melonjs.mjs/physics/sat.js +9 -9
  75. package/dist/melonjs.mjs/physics/world.js +1 -1
  76. package/dist/melonjs.mjs/plugin/plugin.js +106 -108
  77. package/dist/melonjs.mjs/renderable/collectable.js +1 -1
  78. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  79. package/dist/melonjs.mjs/renderable/container.js +20 -19
  80. package/dist/melonjs.mjs/renderable/draggable.js +121 -0
  81. package/dist/melonjs.mjs/renderable/dragndrop.js +3 -113
  82. package/dist/melonjs.mjs/renderable/imagelayer.js +1 -1
  83. package/dist/melonjs.mjs/renderable/light2d.js +1 -1
  84. package/dist/melonjs.mjs/renderable/nineslicesprite.js +1 -1
  85. package/dist/melonjs.mjs/renderable/renderable.js +2 -2
  86. package/dist/melonjs.mjs/renderable/sprite.js +1 -1
  87. package/dist/melonjs.mjs/renderable/trigger.js +2 -2
  88. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +1 -1
  89. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +1 -1
  90. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +1 -1
  91. package/dist/melonjs.mjs/state/stage.js +1 -1
  92. package/dist/melonjs.mjs/state/state.js +1 -1
  93. package/dist/melonjs.mjs/system/device.js +1 -1
  94. package/dist/melonjs.mjs/system/dom.js +1 -1
  95. package/dist/melonjs.mjs/system/event.js +1 -1
  96. package/dist/melonjs.mjs/system/platform.js +1 -1
  97. package/dist/melonjs.mjs/system/pooling.js +1 -1
  98. package/dist/melonjs.mjs/system/save.js +1 -1
  99. package/dist/melonjs.mjs/system/timer.js +4 -4
  100. package/dist/melonjs.mjs/text/bitmaptext.js +1 -1
  101. package/dist/melonjs.mjs/text/bitmaptextdata.js +1 -1
  102. package/dist/melonjs.mjs/text/glyph.js +1 -1
  103. package/dist/melonjs.mjs/text/text.js +1 -1
  104. package/dist/melonjs.mjs/text/textmetrics.js +1 -1
  105. package/dist/melonjs.mjs/text/textstyle.js +1 -1
  106. package/dist/melonjs.mjs/tweens/easing.js +1 -1
  107. package/dist/melonjs.mjs/tweens/interpolation.js +1 -1
  108. package/dist/melonjs.mjs/tweens/tween.js +1 -1
  109. package/dist/melonjs.mjs/utils/agent.js +1 -1
  110. package/dist/melonjs.mjs/utils/array.js +1 -1
  111. package/dist/melonjs.mjs/utils/file.js +1 -1
  112. package/dist/melonjs.mjs/utils/function.js +1 -1
  113. package/dist/melonjs.mjs/utils/string.js +1 -1
  114. package/dist/melonjs.mjs/utils/utils.js +105 -111
  115. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +1 -1
  116. package/dist/melonjs.mjs/video/renderer.js +1 -1
  117. package/dist/melonjs.mjs/video/texture/atlas.js +1 -1
  118. package/dist/melonjs.mjs/video/texture/cache.js +1 -1
  119. package/dist/melonjs.mjs/video/texture/canvas_texture.js +1 -1
  120. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  121. package/dist/melonjs.mjs/video/video.js +4 -4
  122. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +1 -1
  123. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +1 -1
  124. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +1 -1
  125. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +1 -1
  126. package/dist/melonjs.mjs/video/webgl/glshader.js +1 -1
  127. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  128. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
  129. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  130. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
  131. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +1 -1
  132. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  133. package/dist/melonjs.mjs/video/webgl/utils/program.js +1 -1
  134. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  135. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +1 -1
  136. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1 -1
  137. package/dist/melonjs.module.js +516 -500
  138. package/dist/types/camera/camera2d.d.ts +4 -4
  139. package/dist/types/index.d.ts +4 -4
  140. package/dist/types/physics/body.d.ts +4 -4
  141. package/dist/types/physics/detector.d.ts +5 -5
  142. package/dist/types/physics/sat.d.ts +12 -12
  143. package/dist/types/plugin/plugin.d.ts +60 -5
  144. package/dist/types/renderable/container.d.ts +25 -25
  145. package/dist/types/renderable/draggable.d.ts +53 -0
  146. package/dist/types/renderable/dragndrop.d.ts +0 -52
  147. package/dist/types/renderable/renderable.d.ts +2 -2
  148. package/dist/types/utils/utils.d.ts +56 -17
  149. package/package.json +8 -8
  150. package/src/application/application.js +2 -2
  151. package/src/camera/camera2d.js +2 -2
  152. package/src/index.js +5 -3
  153. package/src/lang/deprecated.js +2 -1
  154. package/src/level/level.js +4 -3
  155. package/src/level/tiled/TMXTileMap.js +2 -2
  156. package/src/level/tiled/TMXUtils.js +4 -3
  157. package/src/physics/body.js +2 -2
  158. package/src/physics/detector.js +3 -3
  159. package/src/physics/sat.js +8 -8
  160. package/src/plugin/plugin.js +103 -105
  161. package/src/renderable/container.js +19 -18
  162. package/src/renderable/draggable.js +114 -0
  163. package/src/renderable/dragndrop.js +0 -109
  164. package/src/renderable/renderable.js +1 -1
  165. package/src/renderable/trigger.js +1 -1
  166. package/src/system/timer.js +3 -3
  167. package/src/utils/utils.js +102 -111
  168. package/src/video/video.js +3 -3
@@ -0,0 +1,114 @@
1
+ import Vector2d from "./../math/vector2.js";
2
+ import * as input from "./../input/input.js";
3
+ import * as event from "./../system/event.js";
4
+ import Renderable from "./../renderable/renderable.js";
5
+
6
+ /**
7
+ * @classdesc
8
+ * A Draggable base object
9
+ * @see DropTarget
10
+ * @augments Renderable
11
+ */
12
+ export class Draggable extends Renderable {
13
+ /**
14
+ * @param {number} x - the x coordinates of the draggable object
15
+ * @param {number} y - the y coordinates of the draggable object
16
+ * @param {number} width - draggable object width
17
+ * @param {number} height - draggable object height
18
+ */
19
+ constructor(x, y, width, height) {
20
+ super(x, y, width, height);
21
+ this.isKinematic = false;
22
+ this.dragging = false;
23
+ this.dragId = null;
24
+ this.grabOffset = new Vector2d(0, 0);
25
+ this.initEvents();
26
+ }
27
+
28
+ /**
29
+ * Initializes the events the modules needs to listen to
30
+ * It translates the pointer events to me.events
31
+ * in order to make them pass through the system and to make
32
+ * this module testable. Then we subscribe this module to the
33
+ * transformed events.
34
+ * @name initEvents
35
+ * @memberof Draggable
36
+ * @private
37
+ */
38
+ initEvents() {
39
+ input.registerPointerEvent("pointerdown", this, (e) => event.emit(event.DRAGSTART, e, this));
40
+ input.registerPointerEvent("pointerup", this, (e) => event.emit(event.DRAGEND, e, this));
41
+ input.registerPointerEvent("pointercancel", this, (e) => event.emit(event.DRAGEND, e, this));
42
+ event.on(event.POINTERMOVE, (e) => this.dragMove(e));
43
+ event.on(event.DRAGSTART, (e, draggable) => {
44
+ if (draggable === this) {
45
+ this.dragStart(e);
46
+ }
47
+ });
48
+ event.on(event.DRAGEND, (e, draggable) => {
49
+ if (draggable === this) {
50
+ this.dragEnd(e);
51
+ }
52
+ });
53
+ }
54
+
55
+ /**
56
+ * Gets called when the user starts dragging the entity
57
+ * @name dragStart
58
+ * @memberof Draggable
59
+ * @param {object} e - the pointer event
60
+ * @returns {boolean} false if the object is being dragged
61
+ */
62
+ dragStart(e) {
63
+ if (this.dragging === false) {
64
+ this.dragging = true;
65
+ this.grabOffset.set(e.gameX, e.gameY);
66
+ this.grabOffset.sub(this.pos);
67
+ return false;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Gets called when the user drags this entity around
73
+ * @name dragMove
74
+ * @memberof Draggable
75
+ * @param {object} e - the pointer event
76
+ */
77
+ dragMove(e) {
78
+ if (this.dragging === true) {
79
+ this.pos.set(e.gameX, e.gameY, this.pos.z); //TODO : z ?
80
+ this.pos.sub(this.grabOffset);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Gets called when the user stops dragging the entity
86
+ * @name dragEnd
87
+ * @memberof Draggable
88
+ * @returns {boolean} false if the object stopped being dragged
89
+ */
90
+ dragEnd() {
91
+ if (this.dragging === true) {
92
+ this.dragging = false;
93
+ return false;
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Destructor
99
+ * @name destroy
100
+ * @memberof Draggable
101
+ * @ignore
102
+ */
103
+ destroy() {
104
+ event.off(event.POINTERMOVE, this.dragMove);
105
+ event.off(event.DRAGSTART, this.dragStart);
106
+ event.off(event.DRAGEND, this.dragEnd);
107
+ input.releasePointerEvent("pointerdown", this);
108
+ input.releasePointerEvent("pointerup", this);
109
+ input.releasePointerEvent("pointercancel", this);
110
+ super.destroy();
111
+ }
112
+ }
113
+
114
+
@@ -1,115 +1,6 @@
1
- import Vector2d from "./../math/vector2.js";
2
- import * as input from "./../input/input.js";
3
1
  import * as event from "./../system/event.js";
4
2
  import Renderable from "./../renderable/renderable.js";
5
3
 
6
- /**
7
- * @classdesc
8
- * A Draggable base object
9
- * @see DropTarget
10
- * @augments Renderable
11
- */
12
- export class Draggable extends Renderable {
13
- /**
14
- * @param {number} x - the x coordinates of the draggable object
15
- * @param {number} y - the y coordinates of the draggable object
16
- * @param {number} width - draggable object width
17
- * @param {number} height - draggable object height
18
- */
19
- constructor(x, y, width, height) {
20
- super(x, y, width, height);
21
- this.isKinematic = false;
22
- this.dragging = false;
23
- this.dragId = null;
24
- this.grabOffset = new Vector2d(0, 0);
25
- this.initEvents();
26
- }
27
-
28
- /**
29
- * Initializes the events the modules needs to listen to
30
- * It translates the pointer events to me.events
31
- * in order to make them pass through the system and to make
32
- * this module testable. Then we subscribe this module to the
33
- * transformed events.
34
- * @name initEvents
35
- * @memberof Draggable
36
- * @private
37
- */
38
- initEvents() {
39
- input.registerPointerEvent("pointerdown", this, (e) => event.emit(event.DRAGSTART, e, this));
40
- input.registerPointerEvent("pointerup", this, (e) => event.emit(event.DRAGEND, e, this));
41
- input.registerPointerEvent("pointercancel", this, (e) => event.emit(event.DRAGEND, e, this));
42
- event.on(event.POINTERMOVE, (e) => this.dragMove(e));
43
- event.on(event.DRAGSTART, (e, draggable) => {
44
- if (draggable === this) {
45
- this.dragStart(e);
46
- }
47
- });
48
- event.on(event.DRAGEND, (e, draggable) => {
49
- if (draggable === this) {
50
- this.dragEnd(e);
51
- }
52
- });
53
- }
54
-
55
- /**
56
- * Gets called when the user starts dragging the entity
57
- * @name dragStart
58
- * @memberof Draggable
59
- * @param {object} e - the pointer event
60
- * @returns {boolean} false if the object is being dragged
61
- */
62
- dragStart(e) {
63
- if (this.dragging === false) {
64
- this.dragging = true;
65
- this.grabOffset.set(e.gameX, e.gameY);
66
- this.grabOffset.sub(this.pos);
67
- return false;
68
- }
69
- }
70
-
71
- /**
72
- * Gets called when the user drags this entity around
73
- * @name dragMove
74
- * @memberof Draggable
75
- * @param {object} e - the pointer event
76
- */
77
- dragMove(e) {
78
- if (this.dragging === true) {
79
- this.pos.set(e.gameX, e.gameY, this.pos.z); //TODO : z ?
80
- this.pos.sub(this.grabOffset);
81
- }
82
- }
83
-
84
- /**
85
- * Gets called when the user stops dragging the entity
86
- * @name dragEnd
87
- * @memberof Draggable
88
- * @returns {boolean} false if the object stopped being dragged
89
- */
90
- dragEnd() {
91
- if (this.dragging === true) {
92
- this.dragging = false;
93
- return false;
94
- }
95
- }
96
-
97
- /**
98
- * Destructor
99
- * @name destroy
100
- * @memberof Draggable
101
- * @ignore
102
- */
103
- destroy() {
104
- event.off(event.POINTERMOVE, this.dragMove);
105
- event.off(event.DRAGSTART, this.dragStart);
106
- event.off(event.DRAGEND, this.dragEnd);
107
- input.releasePointerEvent("pointerdown", this);
108
- input.releasePointerEvent("pointerup", this);
109
- input.releasePointerEvent("pointercancel", this);
110
- super.destroy();
111
- }
112
- }
113
4
 
114
5
  /**
115
6
  * @classdesc
@@ -725,7 +725,7 @@ import Color from "./../math/color.js";
725
725
  * onCollision callback, triggered in case of collision,
726
726
  * when this renderable body is colliding with another one
727
727
  * @param {ResponseObject} response - the collision response object
728
- * @param {Renderable} other - the other renderable touching this one (a reference to response.a or response.b)
728
+ * @param {Renderable|Container|Entity|Sprite|NineSliceSprite} other - the other renderable touching this one (a reference to response.a or response.b)
729
729
  * @returns {boolean} true if the object should respond to the collision (its position and velocity will be corrected)
730
730
  * @example
731
731
  * // colision handler
@@ -136,7 +136,7 @@ import pool from "./../system/pooling.js";
136
136
  * @name onCollision
137
137
  * @memberof Trigger
138
138
  * @param {ResponseObject} response - the collision response object
139
- * @param {Renderable} other - the other renderable touching this one (a reference to response.a or response.b)
139
+ * @param {Renderable|Container|Entity|Sprite|NineSliceSprite} other - the other renderable touching this one (a reference to response.a or response.b)
140
140
  * @returns {boolean} true if the object should respond to the collision (its position and velocity will be corrected)
141
141
  */
142
142
  onCollision(response, other) { // eslint-disable-line no-unused-vars
@@ -1,4 +1,4 @@
1
- import utils from "./../utils/utils.js";
1
+ import { defer } from "./../utils/function.js";
2
2
  import * as event from "./event.js";
3
3
  import state from "./../state/state.js";
4
4
  import { clamp } from "./../math/math.js";
@@ -161,7 +161,7 @@ class Timer {
161
161
  */
162
162
  clearTimeout(timeoutID) {
163
163
  if (timeoutID > 0) {
164
- utils.function.defer(this.clearTimer.bind(this), this, timeoutID);
164
+ defer(this.clearTimer.bind(this), this, timeoutID);
165
165
  }
166
166
  }
167
167
 
@@ -171,7 +171,7 @@ class Timer {
171
171
  */
172
172
  clearInterval(intervalID) {
173
173
  if (intervalID > 0) {
174
- utils.function.defer(this.clearTimer.bind(this), this, intervalID);
174
+ defer(this.clearTimer.bind(this), this, intervalID);
175
175
  }
176
176
  }
177
177
 
@@ -1,8 +1,10 @@
1
- import * as agentUtils from "./agent.js";
2
- import * as arrayUtils from "./array.js";
3
- import * as fileUtils from "./file.js";
4
- import * as stringUtils from "./string.js";
5
- import * as fnUtils from "./function.js";
1
+ import { toHex } from "./string.js";
2
+
3
+ export * as agent from "./agent.js";
4
+ export * as array from "./array.js";
5
+ export * as file from "./file.js";
6
+ export * as string from "./string.js";
7
+ export * as function from "./function.js";
6
8
 
7
9
  /**
8
10
  * a collection of utility functions
@@ -13,124 +15,113 @@ import * as fnUtils from "./function.js";
13
15
  let GUID_base = "";
14
16
  let GUID_index = 0;
15
17
 
16
- let utils = {
17
-
18
- agent : agentUtils,
19
- array : arrayUtils,
20
- file : fileUtils,
21
- string : stringUtils,
22
- function : fnUtils,
23
-
24
- /**
25
- * Compare two version strings
26
- * @public
27
- * @memberof utils
28
- * @name checkVersion
29
- * @param {string} first - First version string to compare
30
- * @param {string} second - second version string to compare
31
- * @returns {number} comparison result <br>&lt; 0 : first &lt; second<br>
32
- * 0 : first == second<br>
33
- * &gt; 0 : first &gt; second
34
- * @example
35
- * if (me.utils.checkVersion("7.0.0") > 0) {
36
- * console.error(
37
- * "melonJS is too old. Expected: 7.0.0, Got: 6.3.0"
38
- * );
39
- * }
40
- */
41
- checkVersion : function (first, second) {
42
- let a = first.split(".");
43
- let b = second.split(".");
44
- let len = Math.min(a.length, b.length);
45
- let result = 0;
18
+ /**
19
+ * Compare two version strings
20
+ * @public
21
+ * @memberof utils
22
+ * @name checkVersion
23
+ * @param {string} first - First version string to compare
24
+ * @param {string} second - second version string to compare
25
+ * @returns {number} comparison result <br>&lt; 0 : first &lt; second<br>
26
+ * 0 : first == second<br>
27
+ * &gt; 0 : first &gt; second
28
+ * @example
29
+ * if (me.utils.checkVersion("7.0.0") > 0) {
30
+ * console.error(
31
+ * "melonJS is too old. Expected: 7.0.0, Got: 6.3.0"
32
+ * );
33
+ * }
34
+ */
35
+ export function checkVersion(first, second) {
36
+ let a = first.split(".");
37
+ let b = second.split(".");
38
+ let len = Math.min(a.length, b.length);
39
+ let result = 0;
46
40
 
47
- for (let i = 0; i < len; i++) {
48
- if ((result = +a[i] - +b[i])) {
49
- break;
50
- }
41
+ for (let i = 0; i < len; i++) {
42
+ if ((result = +a[i] - +b[i])) {
43
+ break;
51
44
  }
45
+ }
52
46
 
53
- return result ? result : a.length - b.length;
54
- },
47
+ return result ? result : a.length - b.length;
48
+ }
55
49
 
56
- /**
57
- * parse the fragment (hash) from a URL and returns them into
58
- * @public
59
- * @memberof utils
60
- * @name getUriFragment
61
- * @param {string} [url=document.location] - an optional params string or URL containing fragment (hash) params to be parsed
62
- * @returns {object} an object representing the deserialized params string.
63
- * @property {boolean} [hitbox=false] draw the hitbox in the debug panel (if enabled)
64
- * @property {boolean} [velocity=false] draw the entities velocity in the debug panel (if enabled)
65
- * @property {boolean} [quadtree=false] draw the quadtree in the debug panel (if enabled)
66
- * @property {boolean} [webgl=false] force the renderer to WebGL
67
- * @property {boolean} [debug=false] display the debug panel (if preloaded)
68
- * @property {string} [debugToggleKey="s"] show/hide the debug panel (if preloaded)
69
- * @example
70
- * // http://www.example.com/index.html#debug&hitbox=true&mytag=value
71
- * let UriFragment = me.utils.getUriFragment();
72
- * console.log(UriFragment["mytag"]); //> "value"
73
- */
74
- getUriFragment : function (url) {
75
- let hash = {};
50
+ /**
51
+ * parse the fragment (hash) from a URL and returns them into
52
+ * @public
53
+ * @memberof utils
54
+ * @name getUriFragment
55
+ * @param {string} [url=document.location] - an optional params string or URL containing fragment (hash) params to be parsed
56
+ * @returns {object} an object representing the deserialized params string.
57
+ * @property {boolean} [hitbox=false] draw the hitbox in the debug panel (if enabled)
58
+ * @property {boolean} [velocity=false] draw the entities velocity in the debug panel (if enabled)
59
+ * @property {boolean} [quadtree=false] draw the quadtree in the debug panel (if enabled)
60
+ * @property {boolean} [webgl=false] force the renderer to WebGL
61
+ * @property {boolean} [debug=false] display the debug panel (if preloaded)
62
+ * @property {string} [debugToggleKey="s"] show/hide the debug panel (if preloaded)
63
+ * @example
64
+ * // http://www.example.com/index.html#debug&hitbox=true&mytag=value
65
+ * let UriFragment = me.utils.getUriFragment();
66
+ * console.log(UriFragment["mytag"]); //> "value"
67
+ */
68
+ export function getUriFragment(url) {
69
+ let hash = {};
76
70
 
77
- if (typeof url === "undefined") {
78
- if (typeof globalThis.document !== "undefined") {
79
- let location = globalThis.document.location;
71
+ if (typeof url === "undefined") {
72
+ if (typeof globalThis.document !== "undefined") {
73
+ let location = globalThis.document.location;
80
74
 
81
- if (location && location.hash) {
82
- url = location.hash;
83
- } else {
84
- // No "document.location" exist for Wechat mini game platform.
85
- return hash;
86
- }
75
+ if (location && location.hash) {
76
+ url = location.hash;
87
77
  } else {
88
- // "document" undefined on node.js
78
+ // No "document.location" exist for Wechat mini game platform.
89
79
  return hash;
90
80
  }
91
81
  } else {
92
- // never cache if a url is passed as parameter
93
- let index = url.indexOf("#");
94
- if (index !== -1) {
95
- url = url.slice(index, url.length);
96
- } else {
97
- return hash;
98
- }
82
+ // "document" undefined on node.js
83
+ return hash;
99
84
  }
85
+ } else {
86
+ // never cache if a url is passed as parameter
87
+ let index = url.indexOf("#");
88
+ if (index !== -1) {
89
+ url = url.slice(index, url.length);
90
+ } else {
91
+ return hash;
92
+ }
93
+ }
100
94
 
101
- // parse the url
102
- url.slice(1).split("&").filter((value) => value !== "").forEach((value) => {
103
- let kv = value.split("=");
104
- let k = kv.shift();
105
- let v = kv.join("=");
106
- hash[k] = v || true;
107
- });
108
-
109
- return hash;
110
- },
95
+ // parse the url
96
+ url.slice(1).split("&").filter((value) => value !== "").forEach((value) => {
97
+ let kv = value.split("=");
98
+ let k = kv.shift();
99
+ let v = kv.join("=");
100
+ hash[k] = v || true;
101
+ });
111
102
 
112
- /**
113
- * reset the GUID Base Name
114
- * the idea here being to have a unique ID
115
- * per level / object
116
- * @ignore
117
- */
118
- resetGUID : function (base, index = 0) {
119
- // also ensure it's only 8bit ASCII characters
120
- GUID_base = stringUtils.toHex(base.toString().toUpperCase());
121
- GUID_index = index;
122
- },
103
+ return hash;
104
+ }
123
105
 
124
- /**
125
- * create and return a very simple GUID
126
- * Game Unique ID
127
- * @ignore
128
- */
129
- createGUID : function (index = 1) {
130
- // to cover the case of undefined id for groups
131
- GUID_index += index;
132
- return GUID_base + "-" + (index || GUID_index);
133
- }
134
- };
106
+ /**
107
+ * reset the GUID Base Name
108
+ * the idea here being to have a unique ID
109
+ * per level / object
110
+ * @ignore
111
+ */
112
+ export function resetGUID(base, index = 0) {
113
+ // also ensure it's only 8bit ASCII characters
114
+ GUID_base = toHex(base.toString().toUpperCase());
115
+ GUID_index = index;
116
+ }
135
117
 
136
- export default utils;
118
+ /**
119
+ * create and return a very simple GUID
120
+ * Game Unique ID
121
+ * @ignore
122
+ */
123
+ export function createGUID(index = 1) {
124
+ // to cover the case of undefined id for groups
125
+ GUID_index += index;
126
+ return GUID_base + "-" + (index || GUID_index);
127
+ }
@@ -1,7 +1,7 @@
1
1
  import * as event from "./../system/event.js";
2
2
  import { initialized, game } from "./../index.js";
3
3
  import * as device from "./../system/device.js";
4
- import utils from "./../utils/utils.js";
4
+ import { throttle } from "../utils/function.js";
5
5
  import * as vc from "../const";
6
6
 
7
7
  /**
@@ -98,7 +98,7 @@ export function init(width, height, options) {
98
98
  //add a channel for the onresize/onorientationchange event
99
99
  globalThis.addEventListener(
100
100
  "resize",
101
- utils.function.throttle(
101
+ throttle(
102
102
  (e) => {
103
103
  event.emit(event.WINDOW_ONRESIZE, e);
104
104
  }, 100
@@ -130,7 +130,7 @@ export function init(width, height, options) {
130
130
  }
131
131
 
132
132
  // Automatically update relative canvas position on scroll
133
- globalThis.addEventListener("scroll", utils.function.throttle((e) => {
133
+ globalThis.addEventListener("scroll", throttle((e) => {
134
134
  event.emit(event.WINDOW_ONSCROLL, e);
135
135
  }, 100), false);
136
136