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.
- package/README.md +4 -4
- package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
- package/dist/melonjs.mjs/_virtual/arraymultimap.js +1 -1
- package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
- package/dist/melonjs.mjs/_virtual/howler.js +1 -1
- package/dist/melonjs.mjs/_virtual/index.js +7 -3
- package/dist/melonjs.mjs/_virtual/index2.js +1 -1
- package/dist/melonjs.mjs/_virtual/multimap.js +1 -1
- package/dist/melonjs.mjs/_virtual/setmultimap.js +1 -1
- package/dist/melonjs.mjs/application/application.js +27 -17
- package/dist/melonjs.mjs/application/header.js +6 -5
- package/dist/melonjs.mjs/application/resize.js +20 -20
- package/dist/melonjs.mjs/application/settings.js +1 -1
- package/dist/melonjs.mjs/audio/audio.js +17 -17
- package/dist/melonjs.mjs/camera/camera2d.js +10 -10
- package/dist/melonjs.mjs/const.js +1 -1
- package/dist/melonjs.mjs/entity/entity.js +4 -4
- package/dist/melonjs.mjs/geometries/ellipse.js +6 -6
- package/dist/melonjs.mjs/geometries/line.js +9 -9
- package/dist/melonjs.mjs/geometries/path2d.js +53 -53
- package/dist/melonjs.mjs/geometries/point.js +2 -2
- package/dist/melonjs.mjs/geometries/poly.js +29 -29
- package/dist/melonjs.mjs/geometries/rectangle.js +8 -8
- package/dist/melonjs.mjs/geometries/roundrect.js +6 -6
- package/dist/melonjs.mjs/index.js +5 -5
- package/dist/melonjs.mjs/input/gamepad.js +30 -30
- package/dist/melonjs.mjs/input/input.js +2 -2
- package/dist/melonjs.mjs/input/keyboard.js +15 -15
- package/dist/melonjs.mjs/input/pointer.js +2 -2
- package/dist/melonjs.mjs/input/pointerevent.js +58 -58
- package/dist/melonjs.mjs/lang/console.js +3 -3
- package/dist/melonjs.mjs/lang/deprecated.js +2 -2
- package/dist/melonjs.mjs/level/level.js +9 -9
- package/dist/melonjs.mjs/level/tiled/TMXGroup.js +3 -3
- package/dist/melonjs.mjs/level/tiled/TMXLayer.js +31 -31
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +8 -8
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +8 -8
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +19 -19
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +15 -15
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +3 -3
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +46 -41
- package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +30 -30
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +21 -21
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +10 -10
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +2 -2
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +6 -6
- package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
- package/dist/melonjs.mjs/loader/cache.js +1 -1
- package/dist/melonjs.mjs/loader/loader.js +7 -7
- package/dist/melonjs.mjs/loader/loadingscreen.js +2 -2
- package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
- package/dist/melonjs.mjs/loader/parser.js +13 -13
- package/dist/melonjs.mjs/loader/settings.js +3 -3
- package/dist/melonjs.mjs/math/color.js +21 -21
- package/dist/melonjs.mjs/math/math.js +2 -2
- package/dist/melonjs.mjs/math/matrix2.js +22 -22
- package/dist/melonjs.mjs/math/matrix3.js +52 -52
- package/dist/melonjs.mjs/math/observable_vector2.js +12 -12
- package/dist/melonjs.mjs/math/observable_vector3.js +22 -22
- package/dist/melonjs.mjs/math/vector2.js +11 -11
- package/dist/melonjs.mjs/math/vector3.js +21 -21
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +45 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +130 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +1 -1
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +1 -1
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +1 -1
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +1 -1
- package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
- package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +2 -2
- package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
- package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
- package/dist/melonjs.mjs/particles/emitter.js +5 -5
- package/dist/melonjs.mjs/particles/particle.js +8 -8
- package/dist/melonjs.mjs/particles/settings.js +3 -3
- package/dist/melonjs.mjs/physics/body.js +17 -17
- package/dist/melonjs.mjs/physics/bounds.js +12 -12
- package/dist/melonjs.mjs/physics/collision.js +3 -3
- package/dist/melonjs.mjs/physics/detector.js +14 -14
- package/dist/melonjs.mjs/physics/quadtree.js +19 -19
- package/dist/melonjs.mjs/physics/response.js +1 -1
- package/dist/melonjs.mjs/physics/sat.js +60 -60
- package/dist/melonjs.mjs/physics/world.js +4 -4
- package/dist/melonjs.mjs/plugin/plugin.js +11 -11
- package/dist/melonjs.mjs/renderable/collectable.js +2 -2
- package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
- package/dist/melonjs.mjs/renderable/container.js +77 -59
- package/dist/melonjs.mjs/renderable/dragndrop.js +5 -5
- package/dist/melonjs.mjs/renderable/imagelayer.js +7 -6
- package/dist/melonjs.mjs/renderable/light2d.js +6 -6
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +12 -12
- package/dist/melonjs.mjs/renderable/renderable.js +11 -11
- package/dist/melonjs.mjs/renderable/sprite.js +25 -25
- package/dist/melonjs.mjs/renderable/trigger.js +11 -9
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +97 -27
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +25 -25
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +83 -63
- package/dist/melonjs.mjs/state/stage.js +7 -7
- package/dist/melonjs.mjs/state/state.js +15 -15
- package/dist/melonjs.mjs/system/device.js +2 -2
- package/dist/melonjs.mjs/system/dom.js +1 -1
- package/dist/melonjs.mjs/system/event.js +2 -2
- package/dist/melonjs.mjs/system/platform.js +1 -1
- package/dist/melonjs.mjs/system/pooling.js +9 -9
- package/dist/melonjs.mjs/system/save.js +6 -6
- package/dist/melonjs.mjs/system/timer.js +16 -12
- package/dist/melonjs.mjs/text/bitmaptext.js +20 -20
- package/dist/melonjs.mjs/text/bitmaptextdata.js +22 -22
- package/dist/melonjs.mjs/text/glyph.js +3 -3
- package/dist/melonjs.mjs/text/text.js +10 -9
- package/dist/melonjs.mjs/text/textmetrics.js +15 -15
- package/dist/melonjs.mjs/text/textstyle.js +1 -1
- package/dist/melonjs.mjs/tweens/easing.js +4 -4
- package/dist/melonjs.mjs/tweens/interpolation.js +8 -8
- package/dist/melonjs.mjs/tweens/tween.js +11 -11
- package/dist/melonjs.mjs/utils/agent.js +6 -6
- package/dist/melonjs.mjs/utils/array.js +4 -4
- package/dist/melonjs.mjs/utils/file.js +1 -1
- package/dist/melonjs.mjs/utils/function.js +5 -5
- package/dist/melonjs.mjs/utils/string.js +3 -3
- package/dist/melonjs.mjs/utils/utils.js +16 -16
- package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +35 -109
- package/dist/melonjs.mjs/video/renderer.js +74 -7
- package/dist/melonjs.mjs/video/texture/atlas.js +37 -37
- package/dist/melonjs.mjs/video/texture/cache.js +9 -10
- package/dist/melonjs.mjs/video/texture/canvas_texture.js +63 -3
- package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
- package/dist/melonjs.mjs/video/video.js +2 -2
- package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +3 -3
- package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +5 -5
- package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +5 -5
- package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +18 -15
- package/dist/melonjs.mjs/video/webgl/glshader.js +7 -7
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
- package/dist/melonjs.mjs/video/webgl/utils/attributes.js +2 -2
- package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
- package/dist/melonjs.mjs/video/webgl/utils/program.js +7 -7
- package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
- package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +4 -4
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +55 -38
- package/dist/melonjs.module.js +1747 -1809
- package/dist/types/application/application.d.ts +11 -8
- package/dist/types/audio/audio.d.ts +3 -3
- package/dist/types/index.d.ts +4 -3
- package/dist/types/input/input.d.ts +1 -1
- package/dist/types/input/keyboard.d.ts +1 -1
- package/dist/types/input/pointerevent.d.ts +6 -6
- package/dist/types/level/level.d.ts +2 -2
- package/dist/types/level/tiled/TMXLayer.d.ts +4 -4
- package/dist/types/level/tiled/TMXTileMap.d.ts +2 -2
- package/dist/types/level/tiled/TMXUtils.d.ts +5 -4
- package/dist/types/loader/loader.d.ts +2 -2
- package/dist/types/loader/settings.d.ts +2 -2
- package/dist/types/particles/emitter.d.ts +1 -1
- package/dist/types/physics/collision.d.ts +1 -1
- package/dist/types/physics/detector.d.ts +1 -1
- package/dist/types/plugin/plugin.d.ts +2 -2
- package/dist/types/renderable/container.d.ts +21 -17
- package/dist/types/renderable/sprite.d.ts +11 -11
- package/dist/types/renderable/trigger.d.ts +1 -1
- package/dist/types/renderable/ui/uibaseelement.d.ts +28 -6
- package/dist/types/renderable/ui/uispriteelement.d.ts +12 -14
- package/dist/types/renderable/ui/uitextbutton.d.ts +52 -11
- package/dist/types/state/stage.d.ts +1 -1
- package/dist/types/system/device.d.ts +1 -1
- package/dist/types/system/pooling.d.ts +3 -3
- package/dist/types/system/timer.d.ts +5 -5
- package/dist/types/text/bitmaptext.d.ts +1 -1
- package/dist/types/text/text.d.ts +1 -1
- package/dist/types/utils/array.d.ts +2 -2
- package/dist/types/video/canvas/canvas_renderer.d.ts +8 -76
- package/dist/types/video/renderer.d.ts +48 -0
- package/dist/types/video/texture/atlas.d.ts +3 -3
- package/dist/types/video/texture/canvas_texture.d.ts +40 -0
- package/dist/types/video/webgl/glshader.d.ts +1 -1
- package/dist/types/video/webgl/webgl_renderer.d.ts +13 -9
- package/package.json +14 -14
- package/src/application/application.js +26 -16
- package/src/application/header.js +5 -4
- package/src/application/resize.js +19 -19
- package/src/audio/audio.js +16 -16
- package/src/camera/camera2d.js +9 -9
- package/src/entity/entity.js +3 -3
- package/src/geometries/ellipse.js +5 -5
- package/src/geometries/line.js +8 -8
- package/src/geometries/path2d.js +52 -52
- package/src/geometries/point.js +1 -1
- package/src/geometries/poly.js +28 -28
- package/src/geometries/rectangle.js +7 -7
- package/src/geometries/roundrect.js +5 -5
- package/src/index.js +3 -2
- package/src/input/gamepad.js +29 -29
- package/src/input/input.js +1 -1
- package/src/input/keyboard.js +14 -14
- package/src/input/pointer.js +1 -1
- package/src/input/pointerevent.js +52 -52
- package/src/lang/console.js +2 -2
- package/src/lang/deprecated.js +1 -1
- package/src/level/level.js +8 -8
- package/src/level/tiled/TMXGroup.js +2 -2
- package/src/level/tiled/TMXLayer.js +30 -30
- package/src/level/tiled/TMXObject.js +7 -7
- package/src/level/tiled/TMXTile.js +7 -7
- package/src/level/tiled/TMXTileMap.js +18 -18
- package/src/level/tiled/TMXTileset.js +14 -14
- package/src/level/tiled/TMXTilesetGroup.js +2 -2
- package/src/level/tiled/TMXUtils.js +45 -40
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +29 -29
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +20 -20
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +9 -9
- package/src/level/tiled/renderer/TMXRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +5 -5
- package/src/loader/loader.js +6 -6
- package/src/loader/loadingscreen.js +1 -1
- package/src/loader/parser.js +12 -12
- package/src/loader/settings.js +2 -2
- package/src/math/color.js +20 -20
- package/src/math/math.js +1 -1
- package/src/math/matrix2.js +21 -21
- package/src/math/matrix3.js +51 -51
- package/src/math/observable_vector2.js +11 -11
- package/src/math/observable_vector3.js +21 -21
- package/src/math/vector2.js +10 -10
- package/src/math/vector3.js +20 -20
- package/src/particles/emitter.js +4 -4
- package/src/particles/particle.js +7 -7
- package/src/particles/settings.js +2 -2
- package/src/physics/body.js +16 -16
- package/src/physics/bounds.js +11 -11
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +13 -13
- package/src/physics/quadtree.js +18 -18
- package/src/physics/sat.js +59 -59
- package/src/physics/world.js +3 -3
- package/src/plugin/plugin.js +8 -8
- package/src/renderable/collectable.js +1 -1
- package/src/renderable/container.js +76 -58
- package/src/renderable/dragndrop.js +4 -4
- package/src/renderable/imagelayer.js +6 -5
- package/src/renderable/light2d.js +5 -5
- package/src/renderable/nineslicesprite.js +11 -11
- package/src/renderable/renderable.js +10 -10
- package/src/renderable/sprite.js +24 -24
- package/src/renderable/trigger.js +10 -8
- package/src/renderable/ui/uibaseelement.js +96 -26
- package/src/renderable/ui/uispriteelement.js +24 -24
- package/src/renderable/ui/uitextbutton.js +85 -65
- package/src/state/stage.js +6 -6
- package/src/state/state.js +14 -14
- package/src/system/device.js +1 -1
- package/src/system/event.js +1 -1
- package/src/system/pooling.js +8 -8
- package/src/system/save.js +5 -5
- package/src/system/timer.js +15 -11
- package/src/text/bitmaptext.js +19 -19
- package/src/text/bitmaptextdata.js +21 -21
- package/src/text/glyph.js +2 -2
- package/src/text/text.js +9 -8
- package/src/text/textmetrics.js +14 -14
- package/src/tweens/easing.js +3 -3
- package/src/tweens/interpolation.js +7 -7
- package/src/tweens/tween.js +10 -10
- package/src/utils/agent.js +5 -5
- package/src/utils/array.js +3 -3
- package/src/utils/function.js +4 -4
- package/src/utils/string.js +2 -2
- package/src/utils/utils.js +15 -15
- package/src/video/canvas/canvas_renderer.js +34 -108
- package/src/video/renderer.js +72 -5
- package/src/video/texture/atlas.js +36 -36
- package/src/video/texture/cache.js +6 -6
- package/src/video/texture/canvas_texture.js +62 -2
- package/src/video/video.js +1 -1
- package/src/video/webgl/buffer/vertex.js +2 -2
- package/src/video/webgl/compositors/compositor.js +4 -4
- package/src/video/webgl/compositors/primitive_compositor.js +4 -4
- package/src/video/webgl/compositors/quad_compositor.js +17 -14
- package/src/video/webgl/glshader.js +6 -6
- package/src/video/webgl/utils/attributes.js +1 -1
- package/src/video/webgl/utils/program.js +6 -6
- package/src/video/webgl/utils/uniforms.js +3 -3
- package/src/video/webgl/webgl_renderer.js +54 -37
package/src/renderable/sprite.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
37
|
+
* mytexture = new me.TextureAtlas(
|
|
38
38
|
* me.loader.getJSON("texture"),
|
|
39
39
|
* me.loader.getImage("texture")
|
|
40
40
|
* );
|
|
41
|
-
*
|
|
42
|
-
* image :
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
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 (
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
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", (
|
|
366
|
-
*
|
|
365
|
+
* this.setCurrentAnimation("die", () => {
|
|
366
|
+
* world.removeChild(this);
|
|
367
367
|
* return false; // do not reset to first frame
|
|
368
|
-
* })
|
|
368
|
+
* });
|
|
369
369
|
*
|
|
370
370
|
* // set "attack" animation, and pause for a short duration
|
|
371
|
-
* this.setCurrentAnimation("die", (
|
|
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
|
-
* })
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
591
|
+
let frame = this.current;
|
|
592
592
|
|
|
593
593
|
// cache the current position and size
|
|
594
|
-
|
|
594
|
+
let xpos = this.pos.x,
|
|
595
595
|
ypos = this.pos.y;
|
|
596
596
|
|
|
597
|
-
|
|
597
|
+
let w = frame.width,
|
|
598
598
|
h = frame.height;
|
|
599
599
|
|
|
600
600
|
// frame offset in the texture/atlas
|
|
601
|
-
|
|
602
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
122
|
-
this.onFadeComplete
|
|
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
|
|
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
|
|
18
|
-
* @param {number} h - height of the container
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
71
|
-
timer.clearTimeout(this.holdTimeout);
|
|
72
|
-
}
|
|
91
|
+
timer.clearTimeout(this.holdTimeout);
|
|
73
92
|
this.holdTimeout = timer.setTimeout(
|
|
74
|
-
this.hold
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
|
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
|
-
*
|
|
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
|
|
13
|
-
* @param {number} y - the y coordinate of the
|
|
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
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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 =
|
|
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
|
-
|
|
96
|
-
|
|
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
|
|
197
|
-
registerPointerEvent("pointerup", this, this.release
|
|
198
|
-
registerPointerEvent("pointercancel", this, this.release
|
|
199
|
-
registerPointerEvent("pointerenter", this, this.enter
|
|
200
|
-
registerPointerEvent("pointerleave", this, this.leave
|
|
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
|
|