melonjs 14.0.2 → 14.1.1

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 (219) hide show
  1. package/README.md +2 -0
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
  3. package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
  4. package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
  5. package/dist/melonjs.mjs/_virtual/howler.js +10 -0
  6. package/dist/melonjs.mjs/_virtual/index.js +10 -0
  7. package/dist/melonjs.mjs/_virtual/index2.js +10 -0
  8. package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
  9. package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
  10. package/dist/melonjs.mjs/application/application.js +238 -0
  11. package/dist/melonjs.mjs/audio/audio.js +536 -0
  12. package/dist/melonjs.mjs/camera/camera2d.js +731 -0
  13. package/dist/melonjs.mjs/entity/entity.js +247 -0
  14. package/dist/melonjs.mjs/game.js +29 -0
  15. package/dist/melonjs.mjs/geometries/ellipse.js +274 -0
  16. package/dist/melonjs.mjs/geometries/line.js +115 -0
  17. package/dist/melonjs.mjs/geometries/path2d.js +318 -0
  18. package/dist/melonjs.mjs/geometries/point.js +88 -0
  19. package/dist/melonjs.mjs/geometries/poly.js +498 -0
  20. package/dist/melonjs.mjs/geometries/rectangle.js +374 -0
  21. package/dist/melonjs.mjs/geometries/roundrect.js +167 -0
  22. package/dist/melonjs.mjs/index.js +248 -0
  23. package/dist/melonjs.mjs/input/gamepad.js +501 -0
  24. package/dist/melonjs.mjs/input/input.js +26 -0
  25. package/dist/melonjs.mjs/input/keyboard.js +470 -0
  26. package/dist/melonjs.mjs/input/pointer.js +393 -0
  27. package/dist/melonjs.mjs/input/pointerevent.js +818 -0
  28. package/dist/melonjs.mjs/lang/deprecated.js +157 -0
  29. package/dist/melonjs.mjs/level/level.js +297 -0
  30. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
  31. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +446 -0
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +193 -0
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +636 -0
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +309 -0
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +81 -0
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +504 -0
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +218 -0
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +155 -0
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +124 -0
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +107 -0
  43. package/dist/melonjs.mjs/loader/loader.js +801 -0
  44. package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
  45. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
  46. package/dist/melonjs.mjs/math/color.js +616 -0
  47. package/dist/melonjs.mjs/math/math.js +218 -0
  48. package/dist/melonjs.mjs/math/matrix2.js +501 -0
  49. package/dist/melonjs.mjs/math/matrix3.js +679 -0
  50. package/dist/melonjs.mjs/math/observable_vector2.js +469 -0
  51. package/dist/melonjs.mjs/math/observable_vector3.js +559 -0
  52. package/dist/melonjs.mjs/math/vector2.js +526 -0
  53. package/dist/melonjs.mjs/math/vector3.js +567 -0
  54. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
  55. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
  56. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
  57. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
  58. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
  59. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
  60. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
  61. package/dist/melonjs.mjs/particles/emitter.js +265 -0
  62. package/dist/melonjs.mjs/particles/particle.js +186 -0
  63. package/dist/melonjs.mjs/particles/settings.js +319 -0
  64. package/dist/melonjs.mjs/physics/body.js +702 -0
  65. package/dist/melonjs.mjs/physics/bounds.js +459 -0
  66. package/dist/melonjs.mjs/physics/collision.js +132 -0
  67. package/dist/melonjs.mjs/physics/detector.js +194 -0
  68. package/dist/melonjs.mjs/physics/quadtree.js +394 -0
  69. package/dist/melonjs.mjs/physics/response.js +57 -0
  70. package/dist/melonjs.mjs/physics/sat.js +483 -0
  71. package/dist/melonjs.mjs/physics/world.js +219 -0
  72. package/dist/melonjs.mjs/plugin/plugin.js +141 -0
  73. package/dist/melonjs.mjs/renderable/collectable.js +60 -0
  74. package/dist/melonjs.mjs/renderable/colorlayer.js +78 -0
  75. package/dist/melonjs.mjs/renderable/container.js +1016 -0
  76. package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
  77. package/dist/melonjs.mjs/renderable/imagelayer.js +305 -0
  78. package/dist/melonjs.mjs/renderable/light2d.js +155 -0
  79. package/dist/melonjs.mjs/renderable/nineslicesprite.js +246 -0
  80. package/dist/melonjs.mjs/renderable/renderable.js +781 -0
  81. package/dist/melonjs.mjs/renderable/sprite.js +653 -0
  82. package/dist/melonjs.mjs/renderable/trigger.js +156 -0
  83. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +212 -0
  84. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +225 -0
  85. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +127 -0
  86. package/dist/melonjs.mjs/state/stage.js +236 -0
  87. package/dist/melonjs.mjs/state/state.js +596 -0
  88. package/dist/melonjs.mjs/system/device.js +909 -0
  89. package/dist/melonjs.mjs/system/dom.js +78 -0
  90. package/dist/melonjs.mjs/system/event.js +537 -0
  91. package/dist/melonjs.mjs/system/platform.js +41 -0
  92. package/dist/melonjs.mjs/system/pooling.js +209 -0
  93. package/dist/melonjs.mjs/system/save.js +157 -0
  94. package/dist/melonjs.mjs/system/timer.js +286 -0
  95. package/dist/melonjs.mjs/text/bitmaptext.js +363 -0
  96. package/dist/melonjs.mjs/text/bitmaptextdata.js +198 -0
  97. package/dist/melonjs.mjs/text/glyph.js +65 -0
  98. package/dist/melonjs.mjs/text/text.js +452 -0
  99. package/dist/melonjs.mjs/text/textmetrics.js +175 -0
  100. package/dist/melonjs.mjs/text/textstyle.js +23 -0
  101. package/dist/melonjs.mjs/tweens/easing.js +336 -0
  102. package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
  103. package/dist/melonjs.mjs/tweens/tween.js +479 -0
  104. package/dist/melonjs.mjs/utils/agent.js +76 -0
  105. package/dist/melonjs.mjs/utils/array.js +63 -0
  106. package/dist/melonjs.mjs/utils/file.js +42 -0
  107. package/dist/melonjs.mjs/utils/function.js +70 -0
  108. package/dist/melonjs.mjs/utils/string.js +82 -0
  109. package/dist/melonjs.mjs/utils/utils.js +173 -0
  110. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +806 -0
  111. package/dist/melonjs.mjs/video/renderer.js +410 -0
  112. package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
  113. package/dist/melonjs.mjs/video/texture/cache.js +143 -0
  114. package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
  115. package/dist/melonjs.mjs/video/video.js +462 -0
  116. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +142 -0
  117. package/dist/melonjs.mjs/video/webgl/glshader.js +167 -0
  118. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
  119. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
  120. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
  121. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
  122. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
  123. package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
  124. package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
  125. package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
  126. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
  127. package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +494 -0
  128. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1035 -0
  129. package/dist/melonjs.module.d.ts +1298 -1359
  130. package/dist/melonjs.module.js +2072 -3520
  131. package/package.json +21 -16
  132. package/src/application/application.js +4 -5
  133. package/src/audio/audio.js +32 -32
  134. package/src/camera/camera2d.js +32 -33
  135. package/src/entity/entity.js +18 -19
  136. package/src/geometries/ellipse.js +17 -18
  137. package/src/geometries/line.js +6 -7
  138. package/src/geometries/path2d.js +33 -34
  139. package/src/geometries/point.js +1 -2
  140. package/src/geometries/poly.js +16 -18
  141. package/src/geometries/rectangle.js +19 -20
  142. package/src/geometries/roundrect.js +9 -10
  143. package/src/input/gamepad.js +15 -15
  144. package/src/input/keyboard.js +12 -12
  145. package/src/input/pointer.js +6 -6
  146. package/src/input/pointerevent.js +12 -12
  147. package/src/lang/deprecated.js +12 -12
  148. package/src/level/level.js +25 -25
  149. package/src/level/tiled/TMXLayer.js +23 -24
  150. package/src/level/tiled/TMXTile.js +6 -7
  151. package/src/level/tiled/TMXTileMap.js +8 -10
  152. package/src/level/tiled/TMXTileset.js +3 -4
  153. package/src/level/tiled/TMXTilesetGroup.js +1 -2
  154. package/src/level/tiled/TMXUtils.js +5 -5
  155. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +3 -4
  156. package/src/level/tiled/renderer/TMXIsometricRenderer.js +3 -4
  157. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +2 -3
  158. package/src/level/tiled/renderer/TMXRenderer.js +20 -21
  159. package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -2
  160. package/src/loader/loader.js +20 -20
  161. package/src/math/color.js +21 -22
  162. package/src/math/math.js +16 -16
  163. package/src/math/matrix2.js +17 -18
  164. package/src/math/matrix3.js +26 -27
  165. package/src/math/observable_vector2.js +15 -16
  166. package/src/math/observable_vector3.js +17 -18
  167. package/src/math/vector2.js +10 -11
  168. package/src/math/vector3.js +11 -12
  169. package/src/particles/emitter.js +7 -8
  170. package/src/particles/particle.js +3 -4
  171. package/src/physics/body.js +29 -30
  172. package/src/physics/bounds.js +10 -10
  173. package/src/physics/collision.js +2 -2
  174. package/src/physics/detector.js +6 -6
  175. package/src/physics/quadtree.js +18 -23
  176. package/src/physics/sat.js +31 -31
  177. package/src/physics/world.js +6 -7
  178. package/src/plugin/plugin.js +5 -5
  179. package/src/renderable/collectable.js +4 -6
  180. package/src/renderable/colorlayer.js +6 -8
  181. package/src/renderable/container.js +25 -27
  182. package/src/renderable/dragndrop.js +14 -14
  183. package/src/renderable/imagelayer.js +14 -15
  184. package/src/renderable/light2d.js +4 -5
  185. package/src/renderable/nineslicesprite.js +17 -18
  186. package/src/renderable/renderable.js +26 -28
  187. package/src/renderable/sprite.js +29 -30
  188. package/src/renderable/trigger.js +16 -17
  189. package/src/renderable/ui/uibaseelement.js +8 -9
  190. package/src/renderable/ui/uispriteelement.js +8 -8
  191. package/src/renderable/ui/uitextbutton.js +15 -15
  192. package/src/state/stage.js +8 -9
  193. package/src/state/state.js +17 -17
  194. package/src/system/device.js +11 -11
  195. package/src/system/event.js +10 -10
  196. package/src/system/pooling.js +9 -9
  197. package/src/system/save.js +2 -2
  198. package/src/system/timer.js +10 -10
  199. package/src/text/bitmaptext.js +19 -20
  200. package/src/text/bitmaptextdata.js +3 -4
  201. package/src/text/glyph.js +1 -2
  202. package/src/text/text.js +24 -25
  203. package/src/text/textmetrics.js +9 -10
  204. package/src/tweens/tween.js +20 -21
  205. package/src/utils/agent.js +5 -5
  206. package/src/utils/array.js +4 -4
  207. package/src/utils/file.js +2 -2
  208. package/src/utils/function.js +6 -6
  209. package/src/utils/string.js +5 -5
  210. package/src/utils/utils.js +4 -4
  211. package/src/video/canvas/canvas_renderer.js +72 -73
  212. package/src/video/renderer.js +27 -28
  213. package/src/video/texture/atlas.js +22 -22
  214. package/src/video/texture/canvas_texture.js +9 -9
  215. package/src/video/video.js +17 -17
  216. package/src/video/webgl/buffer/vertex.js +1 -2
  217. package/src/video/webgl/glshader.js +12 -12
  218. package/src/video/webgl/webgl_compositor.js +42 -43
  219. package/src/video/webgl/webgl_renderer.js +76 -77
@@ -0,0 +1,156 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.1
3
+ * http://www.melonjs.org
4
+ * melonjs is licensed under the MIT License.
5
+ * http://www.opensource.org/licenses/mit-license
6
+ * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
+ */
8
+ import Renderable from './renderable.js';
9
+ import collision from '../physics/collision.js';
10
+ import Body from '../physics/body.js';
11
+ import level from '../level/level.js';
12
+ import game from '../game.js';
13
+ import pool from '../system/pooling.js';
14
+
15
+ /**
16
+ * @classdesc
17
+ * trigger an event when colliding with another object
18
+ * @augments Renderable
19
+ */
20
+ class Trigger extends Renderable {
21
+ /**
22
+ * @param {number} x - the x coordinates of the trigger area
23
+ * @param {number} y - the y coordinates of the trigger area
24
+ * @param {number} [settings.width] - width of the trigger area
25
+ * @param {number} [settings.height] - height of the trigger area
26
+ * @param {Rect[]|Polygon[]|Line[]|Ellipse[]} [settings.shapes] - collision shape(s) that will trigger the event
27
+ * @param {string} [settings.duration] - Fade duration (in ms)
28
+ * @param {string|Color} [settings.color] - Fade color
29
+ * @param {string} [settings.event="level"] - the type of event to trigger (only "level" supported for now)
30
+ * @param {string} [settings.to] - level to load if level trigger
31
+ * @param {string|Container} [settings.container] - Target container. See {@link level.load}
32
+ * @param {Function} [settings.onLoaded] - Level loaded callback. See {@link level.load}
33
+ * @param {boolean} [settings.flatten] - Flatten all objects into the target container. See {@link level.load}
34
+ * @param {boolean} [settings.setViewportBounds] - Resize the viewport to match the level. See {@link level.load}
35
+ * @example
36
+ * me.game.world.addChild(new me.Trigger(
37
+ * x, y, {
38
+ * shapes: [new me.Rect(0, 0, 100, 100)],
39
+ * "duration" : 250,
40
+ * "color" : "#000",
41
+ * "to" : "mymap2"
42
+ * }
43
+ * ));
44
+ */
45
+ constructor(x, y, settings) {
46
+ // call the parent constructor
47
+ super(x, y, settings.width || 0, settings.height || 0);
48
+
49
+ // for backward compatibility
50
+ this.anchorPoint.set(0, 0);
51
+
52
+ this.fade = settings.fade;
53
+ this.duration = settings.duration;
54
+ this.fading = false;
55
+
56
+ // Tiled Settings
57
+ this.name = "Trigger";
58
+ this.type = settings.type;
59
+ this.id = settings.id;
60
+
61
+ // a temp variable
62
+ this.gotolevel = settings.to;
63
+
64
+ // Collect the defined trigger settings
65
+ this.triggerSettings = {
66
+ // the default (and only for now) action
67
+ event: "level"
68
+ };
69
+
70
+ [ "type", "container", "onLoaded", "flatten", "setViewportBounds", "to" ].forEach((property) => {
71
+ if (typeof settings[property] !== "undefined") {
72
+ this.triggerSettings[property] = settings[property];
73
+ }
74
+ });
75
+
76
+ // add and configure the physic body
77
+ var shape = settings.shapes;
78
+ if (typeof shape === "undefined") {
79
+ shape = pool.pull("Polygon", 0, 0, [
80
+ pool.pull("Vector2d", 0, 0),
81
+ pool.pull("Vector2d", this.width, 0),
82
+ pool.pull("Vector2d", this.width, this.height)
83
+ ]);
84
+ }
85
+ this.body = new Body(this, shape);
86
+ this.body.collisionType = collision.types.ACTION_OBJECT;
87
+ // by default only collides with PLAYER_OBJECT
88
+ this.body.setCollisionMask(collision.types.PLAYER_OBJECT);
89
+ this.body.setStatic(true);
90
+ this.resize(this.body.getBounds().width, this.body.getBounds().height);
91
+ }
92
+
93
+ /**
94
+ * @ignore
95
+ */
96
+ getTriggerSettings() {
97
+ // Lookup for the container instance
98
+ if (typeof(this.triggerSettings.container) === "string") {
99
+ this.triggerSettings.container = game.world.getChildByName(this.triggerSettings.container)[0];
100
+ }
101
+ return this.triggerSettings;
102
+ }
103
+
104
+ /**
105
+ * @ignore
106
+ */
107
+ onFadeComplete() {
108
+ level.load(this.gotolevel, this.getTriggerSettings());
109
+ game.viewport.fadeOut(this.fade, this.duration);
110
+ }
111
+
112
+ /**
113
+ * trigger this event
114
+ * @name triggerEvent
115
+ * @memberof Trigger
116
+ * @protected
117
+ */
118
+ triggerEvent() {
119
+ var triggerSettings = this.getTriggerSettings();
120
+
121
+ if (triggerSettings.event === "level") {
122
+ this.gotolevel = triggerSettings.to;
123
+ // load a level
124
+ //console.log("going to : ", to);
125
+ if (this.fade && this.duration) {
126
+ if (!this.fading) {
127
+ this.fading = true;
128
+ game.viewport.fadeIn(this.fade, this.duration,
129
+ this.onFadeComplete.bind(this));
130
+ }
131
+ } else {
132
+ level.load(this.gotolevel, triggerSettings);
133
+ }
134
+ } else {
135
+ throw new Error("Trigger invalid type");
136
+ }
137
+ }
138
+
139
+ /**
140
+ * onCollision callback, triggered in case of collision with this trigger
141
+ * @name onCollision
142
+ * @memberof Trigger
143
+ * @param {ResponseObject} response - the collision response object
144
+ * @param {Renderable} other - the other renderable touching this one (a reference to response.a or response.b)
145
+ * @returns {boolean} true if the object should respond to the collision (its position and velocity will be corrected)
146
+ */
147
+ onCollision(response, other) { // eslint-disable-line no-unused-vars
148
+ if (this.name === "Trigger") {
149
+ this.triggerEvent.apply(this);
150
+ }
151
+ return false;
152
+ }
153
+
154
+ }
155
+
156
+ export { Trigger as default };
@@ -0,0 +1,212 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.1
3
+ * http://www.melonjs.org
4
+ * melonjs is licensed under the MIT License.
5
+ * http://www.opensource.org/licenses/mit-license
6
+ * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
+ */
8
+ import Container from '../container.js';
9
+ import timer from '../../system/timer.js';
10
+ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerevent.js';
11
+
12
+ /**
13
+ * @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.
17
+ * @augments Container
18
+ */
19
+ class UIBaseElement extends Container {
20
+ /**
21
+ *
22
+ * @param {number} x - The x position of the container
23
+ * @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)
26
+ */
27
+ constructor(x, y, w, h) {
28
+ super(x, y, w, h);
29
+ /**
30
+ * object can be clicked or not
31
+ * @type {boolean}
32
+ */
33
+ this.isClickable = true;
34
+
35
+ /**
36
+ * Tap and hold threshold timeout in ms
37
+ * @type {number}
38
+ * @default 250
39
+ */
40
+ this.holdThreshold = 250;
41
+
42
+ /**
43
+ * object can be tap and hold
44
+ * @type {boolean}
45
+ * @default false
46
+ */
47
+ this.isHoldable = false;
48
+
49
+ /**
50
+ * true if the pointer is over the object
51
+ * @type {boolean}
52
+ * @default false
53
+ */
54
+ this.hover = false;
55
+
56
+ // object has been updated (clicked,etc..)
57
+ this.holdTimeout = null;
58
+ this.released = true;
59
+
60
+ // GUI items use screen coordinates
61
+ this.floating = true;
62
+
63
+ // enable event detection
64
+ this.isKinematic = false;
65
+ }
66
+
67
+ /**
68
+ * function callback for the pointerdown event
69
+ * @ignore
70
+ */
71
+ clicked(event) {
72
+ // Check if left mouse button is pressed
73
+ if (event.button === 0 && this.isClickable) {
74
+ this.dirty = true;
75
+ this.released = false;
76
+ if (this.isHoldable) {
77
+ if (this.holdTimeout !== null) {
78
+ timer.clearTimeout(this.holdTimeout);
79
+ }
80
+ this.holdTimeout = timer.setTimeout(
81
+ this.hold.bind(this),
82
+ this.holdThreshold,
83
+ false
84
+ );
85
+ this.released = false;
86
+ }
87
+ return this.onClick(event);
88
+ }
89
+ }
90
+
91
+ /**
92
+ * function called when the object is pressed (to be extended)
93
+ * @param {Pointer} event - the event object
94
+ * @returns {boolean} return false if we need to stop propagating the event
95
+ */
96
+ onClick(event) { // eslint-disable-line no-unused-vars
97
+ return false;
98
+ }
99
+
100
+ /**
101
+ * function callback for the pointerEnter event
102
+ * @ignore
103
+ */
104
+ enter(event) {
105
+ this.hover = true;
106
+ this.dirty = true;
107
+ return this.onOver(event);
108
+ }
109
+
110
+ /**
111
+ * function called when the pointer is over the object
112
+ * @param {Pointer} event - the event object
113
+ */
114
+ onOver(event) { // eslint-disable-line no-unused-vars
115
+ // to be extended
116
+ }
117
+
118
+ /**
119
+ * function callback for the pointerLeave event
120
+ * @ignore
121
+ */
122
+ leave(event) {
123
+ this.hover = false;
124
+ this.dirty = true;
125
+ this.release(event);
126
+ return this.onOut(event);
127
+ }
128
+
129
+ /**
130
+ * function called when the pointer is leaving the object area
131
+ * @param {Pointer} event - the event object
132
+ */
133
+ onOut(event) { // eslint-disable-line no-unused-vars
134
+ // to be extended
135
+ }
136
+
137
+ /**
138
+ * function callback for the pointerup event
139
+ * @ignore
140
+ */
141
+ release(event) {
142
+ if (this.released === false) {
143
+ this.released = true;
144
+ this.dirty = true;
145
+ timer.clearTimeout(this.holdTimeout);
146
+ return this.onRelease(event);
147
+ }
148
+ }
149
+
150
+ /**
151
+ * function called when the object is pressed and released (to be extended)
152
+ * @returns {boolean} return false if we need to stop propagating the event
153
+ */
154
+ onRelease() {
155
+ return false;
156
+ }
157
+
158
+ /**
159
+ * function callback for the tap and hold timer event
160
+ * @ignore
161
+ */
162
+ hold() {
163
+ timer.clearTimeout(this.holdTimeout);
164
+ this.dirty = true;
165
+ if (!this.released) {
166
+ this.onHold();
167
+ }
168
+ }
169
+
170
+ /**
171
+ * function called when the object is pressed and held<br>
172
+ * to be extended <br>
173
+ */
174
+ onHold() {}
175
+
176
+ /**
177
+ * function called when added to the game world or a container
178
+ * @ignore
179
+ */
180
+ onActivateEvent() {
181
+ // 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));
195
+ }
196
+
197
+ /**
198
+ * function called when removed from the game world or a container
199
+ * @ignore
200
+ */
201
+ onDeactivateEvent() {
202
+ // release pointer events
203
+ releasePointerEvent("pointerdown", this.hitbox);
204
+ releasePointerEvent("pointerup", this);
205
+ releasePointerEvent("pointercancel", this);
206
+ releasePointerEvent("pointerenter", this);
207
+ releasePointerEvent("pointerleave", this);
208
+ timer.clearTimeout(this.holdTimeout);
209
+ }
210
+ }
211
+
212
+ export { UIBaseElement as default };
@@ -0,0 +1,225 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.1
3
+ * http://www.melonjs.org
4
+ * melonjs is licensed under the MIT License.
5
+ * http://www.opensource.org/licenses/mit-license
6
+ * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
+ */
8
+ import timer from '../../system/timer.js';
9
+ import Sprite from '../sprite.js';
10
+ import { registerPointerEvent, releasePointerEvent } from '../../input/pointerevent.js';
11
+
12
+ /**
13
+ * @classdesc
14
+ * This is a basic sprite based button which you can use in your Game UI.
15
+ * @augments Sprite
16
+ */
17
+ class UISpriteElement extends Sprite {
18
+ /**
19
+ * @param {number} x - the x coordinate of the GUI Object
20
+ * @param {number} y - the y coordinate of the GUI Object
21
+ * @param {object} settings - See {@link Sprite}
22
+ * @example
23
+ * // create a basic GUI Object
24
+ * class myButton extends UISpriteElement {
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;
34
+ * }
35
+ *
36
+ * // output something in the console
37
+ * // when the object is clicked
38
+ * onClick:function (event) {
39
+ * console.log("clicked!");
40
+ * // don't propagate the event
41
+ * return false;
42
+ * }
43
+ * });
44
+ *
45
+ * // add the object at pos (10,10)
46
+ * me.game.world.addChild(new myButton(10,10));
47
+ */
48
+ constructor(x, y, settings) {
49
+
50
+ // call the parent constructor
51
+ super(x, y, settings);
52
+
53
+ /**
54
+ * object can be clicked or not
55
+ * @type {boolean}
56
+ * @default true
57
+ */
58
+ this.isClickable = true;
59
+
60
+ /**
61
+ * Tap and hold threshold timeout in ms
62
+ * @type {number}
63
+ * @default 250
64
+ */
65
+ this.holdThreshold = 250;
66
+
67
+ /**
68
+ * object can be tap and hold
69
+ * @type {boolean}
70
+ * @default false
71
+ */
72
+ this.isHoldable = false;
73
+
74
+ /**
75
+ * true if the pointer is over the object
76
+ * @type {boolean}
77
+ * @default false
78
+ */
79
+ this.hover = false;
80
+
81
+ // object has been updated (clicked,etc..)
82
+ this.holdTimeout = null;
83
+ this.released = true;
84
+
85
+ // GUI items use screen coordinates
86
+ this.floating = true;
87
+
88
+ // enable event detection
89
+ this.isKinematic = false;
90
+ }
91
+
92
+ /**
93
+ * function callback for the pointerdown event
94
+ * @ignore
95
+ */
96
+ clicked(event) {
97
+ // Check if left mouse button is pressed
98
+ if (event.button === 0 && this.isClickable) {
99
+ this.dirty = true;
100
+ this.released = false;
101
+ 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);
106
+ this.released = false;
107
+ }
108
+ return this.onClick(event);
109
+ }
110
+ }
111
+
112
+ /**
113
+ * function called when the object is pressed (to be extended)
114
+ * @param {Pointer} event - the event object
115
+ * @returns {boolean} return false if we need to stop propagating the event
116
+ */
117
+ onClick(event) { // eslint-disable-line no-unused-vars
118
+ return false;
119
+ }
120
+
121
+ /**
122
+ * function callback for the pointerEnter event
123
+ * @ignore
124
+ */
125
+ enter(event) {
126
+ this.hover = true;
127
+ this.dirty = true;
128
+ return this.onOver(event);
129
+ }
130
+
131
+ /**
132
+ * function called when the pointer is over the object
133
+ * @param {Pointer} event - the event object
134
+ */
135
+ onOver(event) { // eslint-disable-line no-unused-vars
136
+ // to be extended
137
+ }
138
+
139
+ /**
140
+ * function callback for the pointerLeave event
141
+ * @ignore
142
+ */
143
+ leave(event) {
144
+ this.hover = false;
145
+ this.dirty = true;
146
+ this.release(event);
147
+ return this.onOut(event);
148
+ }
149
+
150
+ /**
151
+ * function called when the pointer is leaving the object area
152
+ * @param {Pointer} event - the event object
153
+ */
154
+ onOut(event) { // eslint-disable-line no-unused-vars
155
+ // to be extended
156
+ }
157
+
158
+ /**
159
+ * function callback for the pointerup event
160
+ * @ignore
161
+ */
162
+ release(event) {
163
+ if (this.released === false) {
164
+ this.released = true;
165
+ this.dirty = true;
166
+ timer.clearTimeout(this.holdTimeout);
167
+ return this.onRelease(event);
168
+ }
169
+ }
170
+
171
+ /**
172
+ * function called when the object is pressed and released (to be extended)
173
+ * @returns {boolean} return false if we need to stop propagating the event
174
+ */
175
+ onRelease() {
176
+ return false;
177
+ }
178
+
179
+ /**
180
+ * function callback for the tap and hold timer event
181
+ * @ignore
182
+ */
183
+ hold() {
184
+ timer.clearTimeout(this.holdTimeout);
185
+ this.dirty = true;
186
+ if (!this.released) {
187
+ this.onHold();
188
+ }
189
+ }
190
+
191
+ /**
192
+ * function called when the object is pressed and held<br>
193
+ * to be extended <br>
194
+ */
195
+ onHold() {}
196
+
197
+ /**
198
+ * function called when added to the game world or a container
199
+ * @ignore
200
+ */
201
+ onActivateEvent() {
202
+ // 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));
208
+ }
209
+
210
+ /**
211
+ * function called when removed from the game world or a container
212
+ * @ignore
213
+ */
214
+ onDeactivateEvent() {
215
+ // release pointer events
216
+ releasePointerEvent("pointerdown", this);
217
+ releasePointerEvent("pointerup", this);
218
+ releasePointerEvent("pointercancel", this);
219
+ releasePointerEvent("pointerenter", this);
220
+ releasePointerEvent("pointerleave", this);
221
+ timer.clearTimeout(this.holdTimeout);
222
+ }
223
+ }
224
+
225
+ export { UISpriteElement as default };