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.
- package/README.md +2 -0
- package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
- package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
- package/dist/melonjs.mjs/_virtual/howler.js +10 -0
- package/dist/melonjs.mjs/_virtual/index.js +10 -0
- package/dist/melonjs.mjs/_virtual/index2.js +10 -0
- package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
- package/dist/melonjs.mjs/application/application.js +238 -0
- package/dist/melonjs.mjs/audio/audio.js +536 -0
- package/dist/melonjs.mjs/camera/camera2d.js +731 -0
- package/dist/melonjs.mjs/entity/entity.js +247 -0
- package/dist/melonjs.mjs/game.js +29 -0
- package/dist/melonjs.mjs/geometries/ellipse.js +274 -0
- package/dist/melonjs.mjs/geometries/line.js +115 -0
- package/dist/melonjs.mjs/geometries/path2d.js +318 -0
- package/dist/melonjs.mjs/geometries/point.js +88 -0
- package/dist/melonjs.mjs/geometries/poly.js +498 -0
- package/dist/melonjs.mjs/geometries/rectangle.js +374 -0
- package/dist/melonjs.mjs/geometries/roundrect.js +167 -0
- package/dist/melonjs.mjs/index.js +248 -0
- package/dist/melonjs.mjs/input/gamepad.js +501 -0
- package/dist/melonjs.mjs/input/input.js +26 -0
- package/dist/melonjs.mjs/input/keyboard.js +470 -0
- package/dist/melonjs.mjs/input/pointer.js +393 -0
- package/dist/melonjs.mjs/input/pointerevent.js +818 -0
- package/dist/melonjs.mjs/lang/deprecated.js +157 -0
- package/dist/melonjs.mjs/level/level.js +297 -0
- package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
- package/dist/melonjs.mjs/level/tiled/TMXLayer.js +446 -0
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +193 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +636 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +309 -0
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +81 -0
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +504 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +218 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +155 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +124 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +107 -0
- package/dist/melonjs.mjs/loader/loader.js +801 -0
- package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
- package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
- package/dist/melonjs.mjs/math/color.js +616 -0
- package/dist/melonjs.mjs/math/math.js +218 -0
- package/dist/melonjs.mjs/math/matrix2.js +501 -0
- package/dist/melonjs.mjs/math/matrix3.js +679 -0
- package/dist/melonjs.mjs/math/observable_vector2.js +469 -0
- package/dist/melonjs.mjs/math/observable_vector3.js +559 -0
- package/dist/melonjs.mjs/math/vector2.js +526 -0
- package/dist/melonjs.mjs/math/vector3.js +567 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
- package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
- package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
- package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
- package/dist/melonjs.mjs/particles/emitter.js +265 -0
- package/dist/melonjs.mjs/particles/particle.js +186 -0
- package/dist/melonjs.mjs/particles/settings.js +319 -0
- package/dist/melonjs.mjs/physics/body.js +702 -0
- package/dist/melonjs.mjs/physics/bounds.js +459 -0
- package/dist/melonjs.mjs/physics/collision.js +132 -0
- package/dist/melonjs.mjs/physics/detector.js +194 -0
- package/dist/melonjs.mjs/physics/quadtree.js +394 -0
- package/dist/melonjs.mjs/physics/response.js +57 -0
- package/dist/melonjs.mjs/physics/sat.js +483 -0
- package/dist/melonjs.mjs/physics/world.js +219 -0
- package/dist/melonjs.mjs/plugin/plugin.js +141 -0
- package/dist/melonjs.mjs/renderable/collectable.js +60 -0
- package/dist/melonjs.mjs/renderable/colorlayer.js +78 -0
- package/dist/melonjs.mjs/renderable/container.js +1016 -0
- package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
- package/dist/melonjs.mjs/renderable/imagelayer.js +305 -0
- package/dist/melonjs.mjs/renderable/light2d.js +155 -0
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +246 -0
- package/dist/melonjs.mjs/renderable/renderable.js +781 -0
- package/dist/melonjs.mjs/renderable/sprite.js +653 -0
- package/dist/melonjs.mjs/renderable/trigger.js +156 -0
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +212 -0
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +225 -0
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +127 -0
- package/dist/melonjs.mjs/state/stage.js +236 -0
- package/dist/melonjs.mjs/state/state.js +596 -0
- package/dist/melonjs.mjs/system/device.js +909 -0
- package/dist/melonjs.mjs/system/dom.js +78 -0
- package/dist/melonjs.mjs/system/event.js +537 -0
- package/dist/melonjs.mjs/system/platform.js +41 -0
- package/dist/melonjs.mjs/system/pooling.js +209 -0
- package/dist/melonjs.mjs/system/save.js +157 -0
- package/dist/melonjs.mjs/system/timer.js +286 -0
- package/dist/melonjs.mjs/text/bitmaptext.js +363 -0
- package/dist/melonjs.mjs/text/bitmaptextdata.js +198 -0
- package/dist/melonjs.mjs/text/glyph.js +65 -0
- package/dist/melonjs.mjs/text/text.js +452 -0
- package/dist/melonjs.mjs/text/textmetrics.js +175 -0
- package/dist/melonjs.mjs/text/textstyle.js +23 -0
- package/dist/melonjs.mjs/tweens/easing.js +336 -0
- package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
- package/dist/melonjs.mjs/tweens/tween.js +479 -0
- package/dist/melonjs.mjs/utils/agent.js +76 -0
- package/dist/melonjs.mjs/utils/array.js +63 -0
- package/dist/melonjs.mjs/utils/file.js +42 -0
- package/dist/melonjs.mjs/utils/function.js +70 -0
- package/dist/melonjs.mjs/utils/string.js +82 -0
- package/dist/melonjs.mjs/utils/utils.js +173 -0
- package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +806 -0
- package/dist/melonjs.mjs/video/renderer.js +410 -0
- package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
- package/dist/melonjs.mjs/video/texture/cache.js +143 -0
- package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
- package/dist/melonjs.mjs/video/video.js +462 -0
- package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +142 -0
- package/dist/melonjs.mjs/video/webgl/glshader.js +167 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
- package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
- package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
- package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +494 -0
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1035 -0
- package/dist/melonjs.module.d.ts +1298 -1359
- package/dist/melonjs.module.js +2072 -3520
- package/package.json +21 -16
- package/src/application/application.js +4 -5
- package/src/audio/audio.js +32 -32
- package/src/camera/camera2d.js +32 -33
- package/src/entity/entity.js +18 -19
- package/src/geometries/ellipse.js +17 -18
- package/src/geometries/line.js +6 -7
- package/src/geometries/path2d.js +33 -34
- package/src/geometries/point.js +1 -2
- package/src/geometries/poly.js +16 -18
- package/src/geometries/rectangle.js +19 -20
- package/src/geometries/roundrect.js +9 -10
- package/src/input/gamepad.js +15 -15
- package/src/input/keyboard.js +12 -12
- package/src/input/pointer.js +6 -6
- package/src/input/pointerevent.js +12 -12
- package/src/lang/deprecated.js +12 -12
- package/src/level/level.js +25 -25
- package/src/level/tiled/TMXLayer.js +23 -24
- package/src/level/tiled/TMXTile.js +6 -7
- package/src/level/tiled/TMXTileMap.js +8 -10
- package/src/level/tiled/TMXTileset.js +3 -4
- package/src/level/tiled/TMXTilesetGroup.js +1 -2
- package/src/level/tiled/TMXUtils.js +5 -5
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +3 -4
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +3 -4
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +2 -3
- package/src/level/tiled/renderer/TMXRenderer.js +20 -21
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -2
- package/src/loader/loader.js +20 -20
- package/src/math/color.js +21 -22
- package/src/math/math.js +16 -16
- package/src/math/matrix2.js +17 -18
- package/src/math/matrix3.js +26 -27
- package/src/math/observable_vector2.js +15 -16
- package/src/math/observable_vector3.js +17 -18
- package/src/math/vector2.js +10 -11
- package/src/math/vector3.js +11 -12
- package/src/particles/emitter.js +7 -8
- package/src/particles/particle.js +3 -4
- package/src/physics/body.js +29 -30
- package/src/physics/bounds.js +10 -10
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +6 -6
- package/src/physics/quadtree.js +18 -23
- package/src/physics/sat.js +31 -31
- package/src/physics/world.js +6 -7
- package/src/plugin/plugin.js +5 -5
- package/src/renderable/collectable.js +4 -6
- package/src/renderable/colorlayer.js +6 -8
- package/src/renderable/container.js +25 -27
- package/src/renderable/dragndrop.js +14 -14
- package/src/renderable/imagelayer.js +14 -15
- package/src/renderable/light2d.js +4 -5
- package/src/renderable/nineslicesprite.js +17 -18
- package/src/renderable/renderable.js +26 -28
- package/src/renderable/sprite.js +29 -30
- package/src/renderable/trigger.js +16 -17
- package/src/renderable/ui/uibaseelement.js +8 -9
- package/src/renderable/ui/uispriteelement.js +8 -8
- package/src/renderable/ui/uitextbutton.js +15 -15
- package/src/state/stage.js +8 -9
- package/src/state/state.js +17 -17
- package/src/system/device.js +11 -11
- package/src/system/event.js +10 -10
- package/src/system/pooling.js +9 -9
- package/src/system/save.js +2 -2
- package/src/system/timer.js +10 -10
- package/src/text/bitmaptext.js +19 -20
- package/src/text/bitmaptextdata.js +3 -4
- package/src/text/glyph.js +1 -2
- package/src/text/text.js +24 -25
- package/src/text/textmetrics.js +9 -10
- package/src/tweens/tween.js +20 -21
- package/src/utils/agent.js +5 -5
- package/src/utils/array.js +4 -4
- package/src/utils/file.js +2 -2
- package/src/utils/function.js +6 -6
- package/src/utils/string.js +5 -5
- package/src/utils/utils.js +4 -4
- package/src/video/canvas/canvas_renderer.js +72 -73
- package/src/video/renderer.js +27 -28
- package/src/video/texture/atlas.js +22 -22
- package/src/video/texture/canvas_texture.js +9 -9
- package/src/video/video.js +17 -17
- package/src/video/webgl/buffer/vertex.js +1 -2
- package/src/video/webgl/glshader.js +12 -12
- package/src/video/webgl/webgl_compositor.js +42 -43
- 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 };
|