@vpmedia/phaser 1.113.0 → 1.115.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/dist/index.js +402 -379
- package/dist/index.js.map +1 -1
- package/dist/phaser/core/animation_manager.d.ts +2 -1
- package/dist/phaser/core/animation_manager.d.ts.map +1 -1
- package/dist/phaser/core/array_set.d.ts +1 -1
- package/dist/phaser/core/array_set.d.ts.map +1 -1
- package/dist/phaser/core/cache.d.ts +1 -1
- package/dist/phaser/core/cache.d.ts.map +1 -1
- package/dist/phaser/core/factory.d.ts +1 -1
- package/dist/phaser/core/factory.d.ts.map +1 -1
- package/dist/phaser/core/game.d.ts +2 -0
- package/dist/phaser/core/game.d.ts.map +1 -1
- package/dist/phaser/core/input.d.ts +5 -5
- package/dist/phaser/core/input.d.ts.map +1 -1
- package/dist/phaser/core/input_event.d.ts +35 -0
- package/dist/phaser/core/input_event.d.ts.map +1 -0
- package/dist/phaser/core/input_handler.d.ts +2 -2
- package/dist/phaser/core/input_handler.d.ts.map +1 -1
- package/dist/phaser/core/input_mouse.d.ts +27 -26
- package/dist/phaser/core/input_mouse.d.ts.map +1 -1
- package/dist/phaser/core/input_mspointer.d.ts +16 -15
- package/dist/phaser/core/input_mspointer.d.ts.map +1 -1
- package/dist/phaser/core/input_pointer.d.ts +9 -8
- package/dist/phaser/core/input_pointer.d.ts.map +1 -1
- package/dist/phaser/core/input_touch.d.ts +18 -17
- package/dist/phaser/core/input_touch.d.ts.map +1 -1
- package/dist/phaser/core/loader.d.ts +64 -30
- package/dist/phaser/core/loader.d.ts.map +1 -1
- package/dist/phaser/core/scale_manager.d.ts +1 -1
- package/dist/phaser/core/scale_manager.d.ts.map +1 -1
- package/dist/phaser/core/scene_manager.d.ts +14 -4
- package/dist/phaser/core/scene_manager.d.ts.map +1 -1
- package/dist/phaser/core/signal.d.ts +8 -8
- package/dist/phaser/core/signal.d.ts.map +1 -1
- package/dist/phaser/core/signal_binding.d.ts +2 -2
- package/dist/phaser/core/signal_binding.d.ts.map +1 -1
- package/dist/phaser/core/sound.d.ts +1 -1
- package/dist/phaser/core/sound.d.ts.map +1 -1
- package/dist/phaser/core/sound_manager.d.ts +3 -3
- package/dist/phaser/core/sound_manager.d.ts.map +1 -1
- package/dist/phaser/core/sound_sprite.d.ts +1 -1
- package/dist/phaser/core/sound_sprite.d.ts.map +1 -1
- package/dist/phaser/core/timer.d.ts +5 -5
- package/dist/phaser/core/timer.d.ts.map +1 -1
- package/dist/phaser/core/timer_event.d.ts +2 -2
- package/dist/phaser/core/timer_event.d.ts.map +1 -1
- package/dist/phaser/core/tween.d.ts +4 -4
- package/dist/phaser/core/tween.d.ts.map +1 -1
- package/dist/phaser/core/tween_data.d.ts +2 -1
- package/dist/phaser/core/tween_data.d.ts.map +1 -1
- package/dist/phaser/core/tween_manager.d.ts +1 -1
- package/dist/phaser/core/tween_manager.d.ts.map +1 -1
- package/dist/phaser/display/button.d.ts +1 -1
- package/dist/phaser/display/button.d.ts.map +1 -1
- package/dist/phaser/display/canvas/buffer.d.ts +3 -3
- package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
- package/dist/phaser/display/canvas/graphics.d.ts +2 -2
- package/dist/phaser/display/canvas/graphics.d.ts.map +1 -1
- package/dist/phaser/display/canvas/masker.d.ts +5 -2
- package/dist/phaser/display/canvas/masker.d.ts.map +1 -1
- package/dist/phaser/display/canvas/renderer.d.ts +6 -5
- package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
- package/dist/phaser/display/canvas/tinter.d.ts +2 -1
- package/dist/phaser/display/canvas/tinter.d.ts.map +1 -1
- package/dist/phaser/display/canvas/util.d.ts +11 -4
- package/dist/phaser/display/canvas/util.d.ts.map +1 -1
- package/dist/phaser/display/display_object.d.ts +4 -3
- package/dist/phaser/display/display_object.d.ts.map +1 -1
- package/dist/phaser/display/graphics.d.ts +47 -27
- package/dist/phaser/display/graphics.d.ts.map +1 -1
- package/dist/phaser/display/graphics_data.d.ts +20 -11
- package/dist/phaser/display/graphics_data.d.ts.map +1 -1
- package/dist/phaser/display/image.d.ts +4 -3
- package/dist/phaser/display/image.d.ts.map +1 -1
- package/dist/phaser/display/render_session.d.ts +44 -0
- package/dist/phaser/display/render_session.d.ts.map +1 -0
- package/dist/phaser/display/sprite_util.d.ts +4 -3
- package/dist/phaser/display/sprite_util.d.ts.map +1 -1
- package/dist/phaser/display/text.d.ts +65 -31
- package/dist/phaser/display/text.d.ts.map +1 -1
- package/dist/phaser/display/webgl/base_texture.d.ts +3 -3
- package/dist/phaser/display/webgl/base_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/earcut.d.ts +25 -25
- package/dist/phaser/display/webgl/earcut.d.ts.map +1 -1
- package/dist/phaser/display/webgl/earcut_node.d.ts +2 -2
- package/dist/phaser/display/webgl/earcut_node.d.ts.map +1 -1
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +3 -2
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_manager.d.ts +1 -1
- package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/graphics.d.ts +2 -1
- package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
- package/dist/phaser/display/webgl/graphics_data.d.ts +9 -9
- package/dist/phaser/display/webgl/graphics_data.d.ts.map +1 -1
- package/dist/phaser/display/webgl/mask_manager.d.ts +3 -2
- package/dist/phaser/display/webgl/mask_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/render_texture.d.ts +3 -3
- package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/renderer.d.ts +5 -4
- package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/normal.d.ts +3 -1
- package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader_manager.d.ts +10 -4
- package/dist/phaser/display/webgl/shader_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/sprite_batch.d.ts +4 -3
- package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/stencil_manager.d.ts +4 -3
- package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/texture.d.ts +6 -6
- package/dist/phaser/display/webgl/texture.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/phaser/core/animation_manager.ts +2 -2
- package/src/phaser/core/array_set.ts +1 -1
- package/src/phaser/core/cache.ts +1 -1
- package/src/phaser/core/factory.ts +1 -1
- package/src/phaser/core/game.ts +2 -0
- package/src/phaser/core/input.ts +7 -6
- package/src/phaser/core/input_event.ts +34 -0
- package/src/phaser/core/input_handler.ts +2 -11
- package/src/phaser/core/input_mouse.ts +53 -36
- package/src/phaser/core/input_mspointer.ts +54 -29
- package/src/phaser/core/input_pointer.test.ts +149 -0
- package/src/phaser/core/input_pointer.ts +20 -21
- package/src/phaser/core/input_touch.ts +48 -31
- package/src/phaser/core/loader.test.ts +139 -0
- package/src/phaser/core/loader.ts +146 -83
- package/src/phaser/core/scale_manager.ts +1 -1
- package/src/phaser/core/scene_manager.ts +16 -8
- package/src/phaser/core/signal.ts +8 -8
- package/src/phaser/core/signal_binding.ts +2 -2
- package/src/phaser/core/sound.ts +4 -4
- package/src/phaser/core/sound_manager.ts +17 -19
- package/src/phaser/core/sound_sprite.ts +2 -2
- package/src/phaser/core/timer.ts +6 -6
- package/src/phaser/core/timer_event.ts +2 -2
- package/src/phaser/core/tween.ts +6 -6
- package/src/phaser/core/tween_data.ts +2 -1
- package/src/phaser/core/tween_manager.ts +1 -1
- package/src/phaser/display/button.ts +1 -1
- package/src/phaser/display/canvas/buffer.ts +3 -3
- package/src/phaser/display/canvas/graphics.ts +24 -20
- package/src/phaser/display/canvas/masker.ts +5 -2
- package/src/phaser/display/canvas/renderer.ts +10 -11
- package/src/phaser/display/canvas/tinter.ts +4 -3
- package/src/phaser/display/canvas/util.ts +15 -5
- package/src/phaser/display/display_object.ts +6 -5
- package/src/phaser/display/graphics.test.ts +122 -0
- package/src/phaser/display/graphics.ts +73 -64
- package/src/phaser/display/graphics_data.ts +22 -12
- package/src/phaser/display/image.ts +4 -3
- package/src/phaser/display/render_session.ts +45 -0
- package/src/phaser/display/sprite_util.ts +10 -8
- package/src/phaser/display/text.test.ts +136 -0
- package/src/phaser/display/text.ts +183 -119
- package/src/phaser/display/webgl/base_texture.ts +3 -3
- package/src/phaser/display/webgl/earcut.test.ts +132 -0
- package/src/phaser/display/webgl/earcut.ts +84 -74
- package/src/phaser/display/webgl/earcut_node.ts +5 -5
- package/src/phaser/display/webgl/fast_sprite_batch.ts +4 -4
- package/src/phaser/display/webgl/filter_manager.ts +1 -1
- package/src/phaser/display/webgl/graphics.ts +26 -17
- package/src/phaser/display/webgl/graphics_data.ts +9 -9
- package/src/phaser/display/webgl/mask_manager.ts +3 -2
- package/src/phaser/display/webgl/render_texture.ts +3 -3
- package/src/phaser/display/webgl/renderer.ts +7 -6
- package/src/phaser/display/webgl/shader/normal.ts +23 -6
- package/src/phaser/display/webgl/shader_manager.ts +15 -6
- package/src/phaser/display/webgl/sprite_batch.ts +4 -3
- package/src/phaser/display/webgl/stencil_manager.ts +10 -3
- package/src/phaser/display/webgl/texture.ts +6 -6
|
@@ -1,31 +1,32 @@
|
|
|
1
|
+
import type { InputEvent } from './input_event.js';
|
|
1
2
|
import type { Input } from './input.js';
|
|
2
3
|
import type { Game } from './game.js';
|
|
3
4
|
|
|
4
5
|
export class Mouse {
|
|
5
|
-
public game!:
|
|
6
|
+
public game!: Game;
|
|
6
7
|
public input!: Input;
|
|
7
|
-
public callbackContext!:
|
|
8
|
-
public mouseDownCallback:
|
|
9
|
-
public mouseUpCallback:
|
|
10
|
-
public mouseOutCallback:
|
|
11
|
-
public mouseOverCallback:
|
|
12
|
-
public mouseWheelCallback:
|
|
13
|
-
public mouseMoveCallback:
|
|
8
|
+
public callbackContext!: unknown;
|
|
9
|
+
public mouseDownCallback: EventListener | null;
|
|
10
|
+
public mouseUpCallback: EventListener | null;
|
|
11
|
+
public mouseOutCallback: EventListener | null;
|
|
12
|
+
public mouseOverCallback: EventListener | null;
|
|
13
|
+
public mouseWheelCallback: EventListener | null;
|
|
14
|
+
public mouseMoveCallback: EventListener | null;
|
|
14
15
|
public capture!: boolean;
|
|
15
16
|
public button!: number;
|
|
16
17
|
public wheelDelta!: number;
|
|
17
18
|
public enabled!: boolean;
|
|
18
19
|
public locked!: boolean;
|
|
19
20
|
public stopOnGameOut!: boolean;
|
|
20
|
-
public event!:
|
|
21
|
-
public _onMouseDown:
|
|
22
|
-
public _onMouseMove:
|
|
23
|
-
public _onMouseUp:
|
|
24
|
-
public _onMouseOut:
|
|
25
|
-
public _onMouseOver:
|
|
26
|
-
public _onMouseWheel:
|
|
27
|
-
public _onMouseUpGlobal!:
|
|
28
|
-
public _onMouseOutGlobal!:
|
|
21
|
+
public event!: InputEvent | null;
|
|
22
|
+
public _onMouseDown: EventListener | null;
|
|
23
|
+
public _onMouseMove: EventListener | null;
|
|
24
|
+
public _onMouseUp: EventListener | null;
|
|
25
|
+
public _onMouseOut: EventListener | null;
|
|
26
|
+
public _onMouseOver: EventListener | null;
|
|
27
|
+
public _onMouseWheel: EventListener | null;
|
|
28
|
+
public _onMouseUpGlobal!: EventListener;
|
|
29
|
+
public _onMouseOutGlobal!: EventListener;
|
|
29
30
|
public _wheelEvent!: any;
|
|
30
31
|
/**
|
|
31
32
|
* TBD.
|
|
@@ -61,7 +62,7 @@ export class Mouse {
|
|
|
61
62
|
* TBD.
|
|
62
63
|
*/
|
|
63
64
|
public start() {
|
|
64
|
-
if (this.game.device.android && this.game.device.chrome
|
|
65
|
+
if (this.game.device.android && !this.game.device.chrome) {
|
|
65
66
|
// Android stock browser fires mouse events even if you preventDefault on the touchStart, so ...
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
@@ -113,24 +114,40 @@ export class Mouse {
|
|
|
113
114
|
*/
|
|
114
115
|
public stop() {
|
|
115
116
|
const { canvas } = this.game;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
if (this._onMouseDown) {
|
|
118
|
+
canvas.removeEventListener('mousedown', this._onMouseDown, true);
|
|
119
|
+
}
|
|
120
|
+
if (this._onMouseMove) {
|
|
121
|
+
canvas.removeEventListener('mousemove', this._onMouseMove, true);
|
|
122
|
+
}
|
|
123
|
+
if (this._onMouseUp) {
|
|
124
|
+
canvas.removeEventListener('mouseup', this._onMouseUp, true);
|
|
125
|
+
}
|
|
126
|
+
if (this._onMouseOver) {
|
|
127
|
+
canvas.removeEventListener('mouseover', this._onMouseOver, true);
|
|
128
|
+
}
|
|
129
|
+
if (this._onMouseOut) {
|
|
130
|
+
canvas.removeEventListener('mouseout', this._onMouseOut, true);
|
|
131
|
+
}
|
|
121
132
|
const { wheelEvent } = this.game.device;
|
|
122
133
|
if (wheelEvent) {
|
|
123
|
-
|
|
134
|
+
if (this._onMouseWheel) {
|
|
135
|
+
canvas.removeEventListener(wheelEvent, this._onMouseWheel, true);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (this._onMouseUpGlobal) {
|
|
139
|
+
globalThis.removeEventListener('mouseup', this._onMouseUpGlobal, true);
|
|
140
|
+
}
|
|
141
|
+
if (this._onMouseOutGlobal) {
|
|
142
|
+
globalThis.removeEventListener('mouseout', this._onMouseOutGlobal, true);
|
|
124
143
|
}
|
|
125
|
-
globalThis.removeEventListener('mouseup', this._onMouseUpGlobal, true);
|
|
126
|
-
globalThis.removeEventListener('mouseout', this._onMouseOutGlobal, true);
|
|
127
144
|
}
|
|
128
145
|
|
|
129
146
|
/**
|
|
130
147
|
* TBD.
|
|
131
148
|
* @param {MouseEvent} event - TBD.
|
|
132
149
|
*/
|
|
133
|
-
public onMouseDown(event:
|
|
150
|
+
public onMouseDown(event: InputEvent) {
|
|
134
151
|
this.event = event;
|
|
135
152
|
this.eventPreventDefault(event);
|
|
136
153
|
if (this.mouseDownCallback) {
|
|
@@ -147,7 +164,7 @@ export class Mouse {
|
|
|
147
164
|
* TBD.
|
|
148
165
|
* @param {MouseEvent} event - TBD.
|
|
149
166
|
*/
|
|
150
|
-
public onMouseMove(event:
|
|
167
|
+
public onMouseMove(event: InputEvent) {
|
|
151
168
|
this.event = event;
|
|
152
169
|
this.eventPreventDefault(event);
|
|
153
170
|
if (this.mouseMoveCallback) {
|
|
@@ -164,7 +181,7 @@ export class Mouse {
|
|
|
164
181
|
* TBD.
|
|
165
182
|
* @param {MouseEvent} event - TBD.
|
|
166
183
|
*/
|
|
167
|
-
public onMouseUp(event:
|
|
184
|
+
public onMouseUp(event: InputEvent) {
|
|
168
185
|
this.event = event;
|
|
169
186
|
this.eventPreventDefault(event);
|
|
170
187
|
if (this.mouseUpCallback) {
|
|
@@ -181,7 +198,7 @@ export class Mouse {
|
|
|
181
198
|
* TBD.
|
|
182
199
|
* @param {MouseEvent} event - TBD.
|
|
183
200
|
*/
|
|
184
|
-
public onMouseUpGlobal(event:
|
|
201
|
+
public onMouseUpGlobal(event: InputEvent) {
|
|
185
202
|
if (!this.input.mousePointer.withinGame) {
|
|
186
203
|
if (this.mouseUpCallback) {
|
|
187
204
|
this.mouseUpCallback.call(this.callbackContext, event);
|
|
@@ -195,7 +212,7 @@ export class Mouse {
|
|
|
195
212
|
* TBD.
|
|
196
213
|
* @param {MouseEvent} event - TBD.
|
|
197
214
|
*/
|
|
198
|
-
public onMouseOutGlobal(event:
|
|
215
|
+
public onMouseOutGlobal(event: InputEvent) {
|
|
199
216
|
this.event = event;
|
|
200
217
|
this.eventPreventDefault(event);
|
|
201
218
|
this.input.mousePointer.withinGame = false;
|
|
@@ -214,7 +231,7 @@ export class Mouse {
|
|
|
214
231
|
* TBD.
|
|
215
232
|
* @param {MouseEvent} event - TBD.
|
|
216
233
|
*/
|
|
217
|
-
public onMouseOut(event:
|
|
234
|
+
public onMouseOut(event: InputEvent) {
|
|
218
235
|
this.event = event;
|
|
219
236
|
this.eventPreventDefault(event);
|
|
220
237
|
this.input.mousePointer.withinGame = false;
|
|
@@ -234,7 +251,7 @@ export class Mouse {
|
|
|
234
251
|
* TBD.
|
|
235
252
|
* @param {MouseEvent} event - TBD.
|
|
236
253
|
*/
|
|
237
|
-
public onMouseOver(event:
|
|
254
|
+
public onMouseOver(event: InputEvent) {
|
|
238
255
|
this.event = event;
|
|
239
256
|
this.eventPreventDefault(event);
|
|
240
257
|
this.input.mousePointer.withinGame = true;
|
|
@@ -247,14 +264,14 @@ export class Mouse {
|
|
|
247
264
|
* TBD.
|
|
248
265
|
* @param {WheelEvent} event - TBD.
|
|
249
266
|
*/
|
|
250
|
-
public onMouseWheel(event:
|
|
267
|
+
public onMouseWheel(event: InputEvent) {
|
|
251
268
|
if (this._wheelEvent) {
|
|
252
269
|
event = this._wheelEvent.bindEvent(event);
|
|
253
270
|
}
|
|
254
271
|
this.event = event;
|
|
255
272
|
this.eventPreventDefault(event);
|
|
256
273
|
// reverse detail for firefox
|
|
257
|
-
this.wheelDelta = Math.max(-1, Math.min(1, -event.deltaY));
|
|
274
|
+
this.wheelDelta = Math.max(-1, Math.min(1, -(event.deltaY ?? 0)));
|
|
258
275
|
if (this.mouseWheelCallback) {
|
|
259
276
|
this.mouseWheelCallback.call(this.callbackContext, event);
|
|
260
277
|
}
|
|
@@ -264,7 +281,7 @@ export class Mouse {
|
|
|
264
281
|
* TBD.
|
|
265
282
|
* @param {MouseEvent} event - TBD.
|
|
266
283
|
*/
|
|
267
|
-
public eventPreventDefault(event:
|
|
284
|
+
public eventPreventDefault(event: Event) {
|
|
268
285
|
if (this.capture) {
|
|
269
286
|
if (typeof event.cancelable !== 'boolean' || event.cancelable) {
|
|
270
287
|
event.preventDefault();
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import type { Game } from './game.js';
|
|
2
|
+
import type { InputEvent } from './input_event.js';
|
|
2
3
|
export class MSPointer {
|
|
3
|
-
public game!:
|
|
4
|
+
public game!: Game;
|
|
4
5
|
public input!: any;
|
|
5
|
-
public callbackContext!:
|
|
6
|
+
public callbackContext!: unknown;
|
|
6
7
|
public pointerDownCallback!: any;
|
|
7
8
|
public pointerMoveCallback!: any;
|
|
8
9
|
public pointerUpCallback!: any;
|
|
9
10
|
public capture!: any;
|
|
10
11
|
public button!: any;
|
|
11
|
-
public event!:
|
|
12
|
+
public event!: InputEvent | null;
|
|
12
13
|
public enabled!: any;
|
|
13
|
-
public _onMSPointerDown:
|
|
14
|
-
public _onMSPointerMove:
|
|
15
|
-
public _onMSPointerUp:
|
|
16
|
-
public _onMSPointerUpGlobal:
|
|
17
|
-
public _onMSPointerOut:
|
|
18
|
-
public _onMSPointerOver:
|
|
14
|
+
public _onMSPointerDown: EventListener | null;
|
|
15
|
+
public _onMSPointerMove: EventListener | null;
|
|
16
|
+
public _onMSPointerUp: EventListener | null;
|
|
17
|
+
public _onMSPointerUpGlobal: EventListener | null;
|
|
18
|
+
public _onMSPointerOut: EventListener | null;
|
|
19
|
+
public _onMSPointerOver: EventListener | null;
|
|
19
20
|
/**
|
|
20
21
|
* TBD.
|
|
21
22
|
* @param {Game} game - TBD.
|
|
@@ -73,8 +74,8 @@ export class MSPointer {
|
|
|
73
74
|
canvas.addEventListener('pointerdown', this._onMSPointerDown, false);
|
|
74
75
|
canvas.addEventListener('pointermove', this._onMSPointerMove, false);
|
|
75
76
|
canvas.addEventListener('pointerup', this._onMSPointerUp, false);
|
|
76
|
-
canvas.style
|
|
77
|
-
canvas.style
|
|
77
|
+
canvas.style.setProperty('-ms-content-zooming', 'none');
|
|
78
|
+
canvas.style.setProperty('-ms-touch-action', 'none');
|
|
78
79
|
globalThis.addEventListener('MSPointerUp', this._onMSPointerUpGlobal, true);
|
|
79
80
|
canvas.addEventListener('MSPointerOver', this._onMSPointerOver, true);
|
|
80
81
|
canvas.addEventListener('MSPointerOut', this._onMSPointerOut, true);
|
|
@@ -92,31 +93,55 @@ export class MSPointer {
|
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
95
|
const { canvas } = this.game;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
if (this._onMSPointerDown) {
|
|
97
|
+
canvas.removeEventListener('MSPointerDown', this._onMSPointerDown, false);
|
|
98
|
+
}
|
|
99
|
+
if (this._onMSPointerMove) {
|
|
100
|
+
canvas.removeEventListener('MSPointerMove', this._onMSPointerMove, false);
|
|
101
|
+
}
|
|
102
|
+
if (this._onMSPointerUp) {
|
|
103
|
+
canvas.removeEventListener('MSPointerUp', this._onMSPointerUp, false);
|
|
104
|
+
}
|
|
98
105
|
// IE11+ uses non-prefix events
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
if (this._onMSPointerDown) {
|
|
107
|
+
canvas.removeEventListener('pointerdown', this._onMSPointerDown, false);
|
|
108
|
+
}
|
|
109
|
+
if (this._onMSPointerMove) {
|
|
110
|
+
canvas.removeEventListener('pointermove', this._onMSPointerMove, false);
|
|
111
|
+
}
|
|
112
|
+
if (this._onMSPointerUp) {
|
|
113
|
+
canvas.removeEventListener('pointerup', this._onMSPointerUp, false);
|
|
114
|
+
}
|
|
102
115
|
if (this._onMSPointerUpGlobal) {
|
|
103
|
-
|
|
116
|
+
if (this._onMSPointerUpGlobal) {
|
|
117
|
+
globalThis.removeEventListener('MSPointerUp', this._onMSPointerUpGlobal, true);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (this._onMSPointerOver) {
|
|
121
|
+
canvas.removeEventListener('MSPointerOver', this._onMSPointerOver, true);
|
|
122
|
+
}
|
|
123
|
+
if (this._onMSPointerOut) {
|
|
124
|
+
canvas.removeEventListener('MSPointerOut', this._onMSPointerOut, true);
|
|
104
125
|
}
|
|
105
|
-
canvas.removeEventListener('MSPointerOver', this._onMSPointerOver, true);
|
|
106
|
-
canvas.removeEventListener('MSPointerOut', this._onMSPointerOut, true);
|
|
107
126
|
// IE11+ uses non-prefix events
|
|
108
127
|
if (this._onMSPointerUpGlobal) {
|
|
109
|
-
|
|
128
|
+
if (this._onMSPointerUpGlobal) {
|
|
129
|
+
globalThis.removeEventListener('pointerup', this._onMSPointerUpGlobal, true);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (this._onMSPointerOver) {
|
|
133
|
+
canvas.removeEventListener('pointerover', this._onMSPointerOver, true);
|
|
134
|
+
}
|
|
135
|
+
if (this._onMSPointerOut) {
|
|
136
|
+
canvas.removeEventListener('pointerout', this._onMSPointerOut, true);
|
|
110
137
|
}
|
|
111
|
-
canvas.removeEventListener('pointerover', this._onMSPointerOver, true);
|
|
112
|
-
canvas.removeEventListener('pointerout', this._onMSPointerOut, true);
|
|
113
138
|
}
|
|
114
139
|
|
|
115
140
|
/**
|
|
116
141
|
* TBD.
|
|
117
142
|
* @param {PointerEvent} event - TBD.
|
|
118
143
|
*/
|
|
119
|
-
public onPointerDown(event:
|
|
144
|
+
public onPointerDown(event: InputEvent) {
|
|
120
145
|
this.event = event;
|
|
121
146
|
this.eventPreventDefault(event);
|
|
122
147
|
if (this.pointerDownCallback) {
|
|
@@ -137,7 +162,7 @@ export class MSPointer {
|
|
|
137
162
|
* TBD.
|
|
138
163
|
* @param {PointerEvent} event - TBD.
|
|
139
164
|
*/
|
|
140
|
-
public onPointerMove(event:
|
|
165
|
+
public onPointerMove(event: InputEvent) {
|
|
141
166
|
this.event = event;
|
|
142
167
|
this.eventPreventDefault(event);
|
|
143
168
|
if (this.pointerMoveCallback) {
|
|
@@ -158,7 +183,7 @@ export class MSPointer {
|
|
|
158
183
|
* TBD.
|
|
159
184
|
* @param {PointerEvent} event - TBD.
|
|
160
185
|
*/
|
|
161
|
-
public onPointerUp(event:
|
|
186
|
+
public onPointerUp(event: InputEvent) {
|
|
162
187
|
this.event = event;
|
|
163
188
|
this.eventPreventDefault(event);
|
|
164
189
|
if (this.pointerUpCallback) {
|
|
@@ -179,7 +204,7 @@ export class MSPointer {
|
|
|
179
204
|
* TBD.
|
|
180
205
|
* @param {PointerEvent} event - TBD.
|
|
181
206
|
*/
|
|
182
|
-
public onPointerUpGlobal(event:
|
|
207
|
+
public onPointerUpGlobal(event: InputEvent) {
|
|
183
208
|
if ((event.pointerType === 'mouse' || event.pointerType === 0x00000004) && !this.input.mousePointer.withinGame) {
|
|
184
209
|
this.onPointerUp(event);
|
|
185
210
|
} else {
|
|
@@ -194,7 +219,7 @@ export class MSPointer {
|
|
|
194
219
|
* TBD.
|
|
195
220
|
* @param {PointerEvent} event - TBD.
|
|
196
221
|
*/
|
|
197
|
-
public onPointerOut(event:
|
|
222
|
+
public onPointerOut(event: InputEvent) {
|
|
198
223
|
this.event = event;
|
|
199
224
|
this.eventPreventDefault(event);
|
|
200
225
|
let pointer;
|
|
@@ -226,7 +251,7 @@ export class MSPointer {
|
|
|
226
251
|
* TBD.
|
|
227
252
|
* @param {PointerEvent} event - TBD.
|
|
228
253
|
*/
|
|
229
|
-
public onPointerOver(event:
|
|
254
|
+
public onPointerOver(event: InputEvent) {
|
|
230
255
|
this.event = event;
|
|
231
256
|
this.eventPreventDefault(event);
|
|
232
257
|
if (event.pointerType === 'mouse' || event.pointerType === 0x00000004) {
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { Circle } from '../geom/circle.js';
|
|
3
|
+
import { Point } from '../geom/point.js';
|
|
4
|
+
import { POINTER_CURSOR } from './const.js';
|
|
5
|
+
import type { Game } from './game.js';
|
|
6
|
+
import type { InputEvent } from './input_event.js';
|
|
7
|
+
import { Pointer } from './input_pointer.js';
|
|
8
|
+
|
|
9
|
+
const createGame = (): Game =>
|
|
10
|
+
({
|
|
11
|
+
time: { time: 0 },
|
|
12
|
+
scale: { bounds: { contains: () => true }, offset: { x: 0, y: 0 } },
|
|
13
|
+
input: {
|
|
14
|
+
enabled: true,
|
|
15
|
+
multiInputOverride: 0,
|
|
16
|
+
moveCallbacks: [],
|
|
17
|
+
interactiveItems: { total: 0, callAll: () => undefined },
|
|
18
|
+
mouse: { locked: false },
|
|
19
|
+
scale: new Point(1, 1),
|
|
20
|
+
position: new Point(),
|
|
21
|
+
circle: new Circle(),
|
|
22
|
+
speed: new Point(),
|
|
23
|
+
activePointer: null,
|
|
24
|
+
onDown: { dispatch: () => undefined },
|
|
25
|
+
onUp: { dispatch: () => undefined },
|
|
26
|
+
onHold: { dispatch: () => undefined },
|
|
27
|
+
onTap: { dispatch: () => undefined },
|
|
28
|
+
x: 0,
|
|
29
|
+
y: 0,
|
|
30
|
+
resetSpeed: () => undefined,
|
|
31
|
+
},
|
|
32
|
+
}) as unknown as Game;
|
|
33
|
+
|
|
34
|
+
const createPointer = (id = 1): Pointer => new Pointer(createGame(), id, POINTER_CURSOR);
|
|
35
|
+
|
|
36
|
+
const event = (fields: Partial<InputEvent> = {}): InputEvent =>
|
|
37
|
+
({ type: 'pointerdown', target: null, preventDefault: () => undefined, ...fields }) as InputEvent;
|
|
38
|
+
|
|
39
|
+
describe('Pointer', () => {
|
|
40
|
+
describe('updateButtons', () => {
|
|
41
|
+
it('reads a down event as pressed', () => {
|
|
42
|
+
const pointer = createPointer();
|
|
43
|
+
pointer.updateButtons(event({ type: 'pointerdown' }));
|
|
44
|
+
expect(pointer.isDown).toBe(true);
|
|
45
|
+
expect(pointer.isUp).toBe(false);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('reads an up event as released', () => {
|
|
49
|
+
const pointer = createPointer();
|
|
50
|
+
pointer.updateButtons(event({ type: 'pointerup' }));
|
|
51
|
+
expect(pointer.isDown).toBe(false);
|
|
52
|
+
expect(pointer.isUp).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('matches the suffix case insensitively, as the legacy events are capitalised', () => {
|
|
56
|
+
const pointer = createPointer();
|
|
57
|
+
pointer.updateButtons(event({ type: 'MSPointerDown' }));
|
|
58
|
+
expect(pointer.isDown).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('treats a move event as not pressed', () => {
|
|
62
|
+
const pointer = createPointer();
|
|
63
|
+
pointer.updateButtons(event({ type: 'pointermove' }));
|
|
64
|
+
expect(pointer.isUp).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('start', () => {
|
|
69
|
+
it('records the identifier the event carries', () => {
|
|
70
|
+
const pointer = createPointer();
|
|
71
|
+
pointer.start(event({ identifier: 7 }));
|
|
72
|
+
expect(pointer.identifier).toBe(7);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('records a null identifier when the event has none', () => {
|
|
76
|
+
const pointer = createPointer();
|
|
77
|
+
pointer.start(event({}));
|
|
78
|
+
expect(pointer.identifier).toBeNull();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('records the pointerId when the event carries one', () => {
|
|
82
|
+
const pointer = createPointer();
|
|
83
|
+
pointer.start(event({ pointerId: 3 }));
|
|
84
|
+
expect(pointer.pointerId).toBe(3);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('marks the pointer active and down', () => {
|
|
88
|
+
const pointer = createPointer();
|
|
89
|
+
pointer.start(event({ identifier: 1 }));
|
|
90
|
+
expect(pointer.active).toBe(true);
|
|
91
|
+
expect(pointer.isDown).toBe(true);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
describe('move', () => {
|
|
96
|
+
it('copies the coordinate set off the event', () => {
|
|
97
|
+
const pointer = createPointer();
|
|
98
|
+
pointer.start(event({ identifier: 1 }));
|
|
99
|
+
pointer.move(
|
|
100
|
+
event({
|
|
101
|
+
type: 'pointermove',
|
|
102
|
+
clientX: 11,
|
|
103
|
+
clientY: 22,
|
|
104
|
+
pageX: 33,
|
|
105
|
+
pageY: 44,
|
|
106
|
+
screenX: 55,
|
|
107
|
+
screenY: 66,
|
|
108
|
+
})
|
|
109
|
+
);
|
|
110
|
+
expect(pointer.clientX).toBe(11);
|
|
111
|
+
expect(pointer.clientY).toBe(22);
|
|
112
|
+
expect(pointer.pageX).toBe(33);
|
|
113
|
+
expect(pointer.pageY).toBe(44);
|
|
114
|
+
expect(pointer.screenX).toBe(55);
|
|
115
|
+
expect(pointer.screenY).toBe(66);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('falls back to zero for coordinates the event omits', () => {
|
|
119
|
+
const pointer = createPointer();
|
|
120
|
+
pointer.start(event({ identifier: 1 }));
|
|
121
|
+
pointer.move(event({ type: 'pointermove' }));
|
|
122
|
+
expect(pointer.clientX).toBe(0);
|
|
123
|
+
expect(pointer.pageY).toBe(0);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
describe('stop', () => {
|
|
128
|
+
it('clears the identifiers it recorded', () => {
|
|
129
|
+
const pointer = createPointer();
|
|
130
|
+
pointer.start(event({ identifier: 5, pointerId: 5 }));
|
|
131
|
+
pointer.stop(event({ type: 'pointerup' }));
|
|
132
|
+
expect(pointer.identifier).toBeNull();
|
|
133
|
+
expect(pointer.pointerId).toBeNull();
|
|
134
|
+
expect(pointer.isDown).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
describe('reset', () => {
|
|
139
|
+
it('returns the pointer to its resting state', () => {
|
|
140
|
+
const pointer = createPointer();
|
|
141
|
+
pointer.start(event({ identifier: 5 }));
|
|
142
|
+
pointer.reset();
|
|
143
|
+
expect(pointer.identifier).toBeNull();
|
|
144
|
+
expect(pointer.pointerId).toBeNull();
|
|
145
|
+
expect(pointer.isDown).toBe(false);
|
|
146
|
+
expect(pointer.isUp).toBe(true);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InputEvent } from './input_event.js';
|
|
1
2
|
import type { Game } from './game.js';
|
|
2
3
|
import type { InputHandler } from './input_handler.js';
|
|
3
4
|
import { Circle } from '../geom/circle.js';
|
|
@@ -12,14 +13,14 @@ import {
|
|
|
12
13
|
} from './const.js';
|
|
13
14
|
|
|
14
15
|
export class Pointer {
|
|
15
|
-
public game!:
|
|
16
|
+
public game!: Game;
|
|
16
17
|
public id!: number;
|
|
17
18
|
public type!: number;
|
|
18
19
|
public exists!: boolean;
|
|
19
20
|
public identifier!: number | null;
|
|
20
21
|
public pointerId!: any;
|
|
21
22
|
public pointerMode!: number;
|
|
22
|
-
public target!:
|
|
23
|
+
public target!: EventTarget | null;
|
|
23
24
|
public button!: any;
|
|
24
25
|
public _holdSent!: boolean;
|
|
25
26
|
public _history!: any;
|
|
@@ -121,8 +122,8 @@ export class Pointer {
|
|
|
121
122
|
* TBD.
|
|
122
123
|
* @param {MouseEvent|PointerEvent} event - TBD.
|
|
123
124
|
*/
|
|
124
|
-
public updateButtons(event:
|
|
125
|
-
if (event.type.toLowerCase().
|
|
125
|
+
public updateButtons(event: InputEvent) {
|
|
126
|
+
if (event.type.toLowerCase().endsWith('down')) {
|
|
126
127
|
this.isUp = false;
|
|
127
128
|
this.isDown = true;
|
|
128
129
|
} else {
|
|
@@ -136,12 +137,12 @@ export class Pointer {
|
|
|
136
137
|
* @param {PointerEvent} event - TBD.
|
|
137
138
|
* @returns {Pointer} TBD.
|
|
138
139
|
*/
|
|
139
|
-
public start(event:
|
|
140
|
+
public start(event: InputEvent) {
|
|
140
141
|
const { input } = this.game;
|
|
141
142
|
if (event.pointerId) {
|
|
142
143
|
this.pointerId = event.pointerId;
|
|
143
144
|
}
|
|
144
|
-
this.identifier = event.identifier;
|
|
145
|
+
this.identifier = event.identifier ?? null;
|
|
145
146
|
this.target = event.target;
|
|
146
147
|
if (this.isMouse) {
|
|
147
148
|
this.updateButtons(event);
|
|
@@ -225,7 +226,7 @@ export class Pointer {
|
|
|
225
226
|
* @param {boolean} fromClick - TBD.
|
|
226
227
|
* @returns {Pointer} TBD.
|
|
227
228
|
*/
|
|
228
|
-
public move(event:
|
|
229
|
+
public move(event: InputEvent, fromClick = false) {
|
|
229
230
|
const { input } = this.game;
|
|
230
231
|
if (input.pollLocked) {
|
|
231
232
|
return null;
|
|
@@ -233,12 +234,12 @@ export class Pointer {
|
|
|
233
234
|
if (fromClick && this.isMouse) {
|
|
234
235
|
this.updateButtons(event);
|
|
235
236
|
}
|
|
236
|
-
this.clientX = event.clientX;
|
|
237
|
-
this.clientY = event.clientY;
|
|
238
|
-
this.pageX = event.pageX;
|
|
239
|
-
this.pageY = event.pageY;
|
|
240
|
-
this.screenX = event.screenX;
|
|
241
|
-
this.screenY = event.screenY;
|
|
237
|
+
this.clientX = event.clientX ?? 0;
|
|
238
|
+
this.clientY = event.clientY ?? 0;
|
|
239
|
+
this.pageX = event.pageX ?? 0;
|
|
240
|
+
this.pageY = event.pageY ?? 0;
|
|
241
|
+
this.screenX = event.screenX ?? 0;
|
|
242
|
+
this.screenY = event.screenY ?? 0;
|
|
242
243
|
if (this.isMouse && input.mouse.locked && !fromClick) {
|
|
243
244
|
this.rawMovementX = event.movementX ?? event.mozMovementX ?? event.webkitMovementX ?? 0;
|
|
244
245
|
this.rawMovementY = event.movementY ?? event.mozMovementY ?? event.webkitMovementY ?? 0;
|
|
@@ -270,7 +271,8 @@ export class Pointer {
|
|
|
270
271
|
let i = input.moveCallbacks.length;
|
|
271
272
|
while (i) {
|
|
272
273
|
i -= 1;
|
|
273
|
-
input.moveCallbacks[i]
|
|
274
|
+
const moveCallback = input.moveCallbacks[i]!;
|
|
275
|
+
moveCallback.callback.call(moveCallback.context, this, this.x, this.y, fromClick);
|
|
274
276
|
}
|
|
275
277
|
// Easy out if we're dragging something and it still exists
|
|
276
278
|
if (this.targetObject !== null && this.targetObject.isDragged === true) {
|
|
@@ -381,7 +383,7 @@ export class Pointer {
|
|
|
381
383
|
* TBD.
|
|
382
384
|
* @param {MouseEvent|PointerEvent} event - TBD.
|
|
383
385
|
*/
|
|
384
|
-
public leave(event:
|
|
386
|
+
public leave(event: InputEvent) {
|
|
385
387
|
this.withinGame = false;
|
|
386
388
|
this.move(event, false);
|
|
387
389
|
}
|
|
@@ -391,7 +393,7 @@ export class Pointer {
|
|
|
391
393
|
* @param {MouseEvent|PointerEvent} event - TBD.
|
|
392
394
|
* @returns {Pointer} TBD.
|
|
393
395
|
*/
|
|
394
|
-
public stop(event:
|
|
396
|
+
public stop(event: InputEvent) {
|
|
395
397
|
const { input } = this.game;
|
|
396
398
|
if (this._stateReset && this.withinGame) {
|
|
397
399
|
event.preventDefault();
|
|
@@ -427,13 +429,10 @@ export class Pointer {
|
|
|
427
429
|
if (this.id > 0) {
|
|
428
430
|
this.active = false;
|
|
429
431
|
}
|
|
430
|
-
this.withinGame = this.game.scale.bounds.contains(event.pageX, event.pageY);
|
|
432
|
+
this.withinGame = this.game.scale.bounds.contains(event.pageX ?? 0, event.pageY ?? 0);
|
|
431
433
|
this.pointerId = null;
|
|
432
434
|
this.identifier = null;
|
|
433
435
|
this.positionUp.setTo(this.x, this.y);
|
|
434
|
-
if (!this.isMouse) {
|
|
435
|
-
input.currentPointers -= 1;
|
|
436
|
-
}
|
|
437
436
|
input.interactiveItems.callAll('_releasedHandler', this);
|
|
438
437
|
if (this._clickTrampolines) {
|
|
439
438
|
this._trampolineTargetObject = this.targetObject;
|
|
@@ -469,7 +468,7 @@ export class Pointer {
|
|
|
469
468
|
* @param {object} callbackContext - TBD.
|
|
470
469
|
* @param {...any} callbackArgs - TBD.
|
|
471
470
|
*/
|
|
472
|
-
public addClickTrampoline(name: string, callback: Function, callbackContext:
|
|
471
|
+
public addClickTrampoline(name: string, callback: Function, callbackContext: unknown, callbackArgs: any) {
|
|
473
472
|
if (!this.isDown) {
|
|
474
473
|
return;
|
|
475
474
|
}
|