@codexo/exojs 0.6.5 → 0.6.7
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/CHANGELOG.md +88 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +28 -0
- package/dist/esm/input/GestureRecognizer.js +132 -0
- package/dist/esm/input/GestureRecognizer.js.map +1 -0
- package/dist/esm/input/InputManager.d.ts +19 -0
- package/dist/esm/input/InputManager.js +122 -12
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +89 -1
- package/dist/esm/input/Pointer.js +163 -3
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/index.d.ts +1 -1
- package/dist/esm/input/types.d.ts +80 -0
- package/dist/esm/input/types.js +84 -1
- package/dist/esm/input/types.js.map +1 -1
- package/dist/exo.esm.js +494 -15
- package/dist/exo.esm.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,94 @@ All notable changes to ExoJS are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.6.7] - 2026-05-02
|
|
8
|
+
|
|
9
|
+
Touch / multi-touch / pointer support, fully unified — no separate
|
|
10
|
+
Mouse or Touch class. All single-pointer input (mouse, touch, pen)
|
|
11
|
+
goes through the existing `Pointer` class; multi-touch is just
|
|
12
|
+
"multiple Pointers, each in its own slot". The `ChannelOffset.Pointers`
|
|
13
|
+
block (256 slots, previously reserved but unused) is now populated
|
|
14
|
+
with state for up to 16 simultaneous pointers — 16 channels per
|
|
15
|
+
slot, 16 × 16 = 256 exact fit.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **Per-pointer channel-buffer state.** Each active pointer fills 16
|
|
20
|
+
channels in its slot: `Active`, `X`, `Y`, `Pressure`, `Width`,
|
|
21
|
+
`Height`, `Twist`, `TiltX`, `TiltY`, `Left`, `Right`, `Middle`,
|
|
22
|
+
`IsMouse`, `IsTouch`, `IsPen`, `IsPrimary`. Coordinates and
|
|
23
|
+
contact-area are normalized to [0..1] against the canvas; tilt
|
|
24
|
+
is mapped from [-90..90°] to [0..1].
|
|
25
|
+
- **`Pointer` namespace export** with channel-offset constants:
|
|
26
|
+
- Primary-pointer convenience: `Pointer.Active`, `Pointer.X`,
|
|
27
|
+
`Pointer.Y`, `Pointer.Pressure`, `Pointer.Left`, `Pointer.IsTouch`,
|
|
28
|
+
etc. — these mirror slot 0.
|
|
29
|
+
- Per-slot multi-pointer access: `Pointer.Slot0Active`,
|
|
30
|
+
`Pointer.Slot0X`, ..., `Pointer.Slot15Y`. Used for pinch / multi-
|
|
31
|
+
touch bindings ("both Slot0 and Slot1 active and IsTouch").
|
|
32
|
+
- Other per-slot channels are reachable via arithmetic
|
|
33
|
+
(`Pointer.X + slotIndex * pointerSlotSize + channelOffset`).
|
|
34
|
+
- **Slot allocation.** Up to `maxPointers = 16` simultaneous
|
|
35
|
+
pointers. The 17th is silently dropped. Slots are reused on
|
|
36
|
+
pointer release in deterministic order (lowest free slot first),
|
|
37
|
+
so the primary pointer is reliably slot 0 in single-pointer
|
|
38
|
+
scenarios.
|
|
39
|
+
- **`InputManager.onPinch / onRotate / onLongPress`** gesture
|
|
40
|
+
signals. Pinch and rotate fire when at least two `isTouch=true`
|
|
41
|
+
pointers move simultaneously; long-press fires when a pointer
|
|
42
|
+
has been held for ≥ 500 ms without exceeding
|
|
43
|
+
`pointerDistanceThreshold` movement. The dispatcher is an
|
|
44
|
+
internal `GestureRecognizer` class — not part of the public API.
|
|
45
|
+
- **`maxPointers` and `pointerSlotSize`** constants exported from
|
|
46
|
+
the input module for callers that want to compute slot offsets.
|
|
47
|
+
- **`canvas.style.touchAction = 'none'`** is set automatically by
|
|
48
|
+
`InputManager` so browser-default gestures (zoom, pan, double-tap
|
|
49
|
+
zoom, swipe-to-go-back) don't interfere with the game's own input
|
|
50
|
+
handling.
|
|
51
|
+
|
|
52
|
+
### Internal / pre-existing fix
|
|
53
|
+
|
|
54
|
+
- `Pointer` constructor now takes `channels: Float32Array` and
|
|
55
|
+
`slotIndex: number` (in addition to `event` and `canvas`) so it
|
|
56
|
+
can write its slice of the channel buffer. Constructed only by
|
|
57
|
+
`InputManager`; no documented or expected user-facing
|
|
58
|
+
constructor calls. Mentioned for completeness.
|
|
59
|
+
|
|
60
|
+
## [0.6.6] - 2026-05-02
|
|
61
|
+
|
|
62
|
+
Pure bug-fix / hardening of the InputManager's event flow. No public
|
|
63
|
+
API changes.
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- **Keyboard events are now gated on canvas focus.** Previously,
|
|
68
|
+
`keydown` / `keyup` registered into the channel buffer regardless of
|
|
69
|
+
whether the canvas was the active element. Typing into an `<input>`
|
|
70
|
+
field next to the canvas would silently drive game state. The new
|
|
71
|
+
behavior matches every other 2D engine: keys only register while the
|
|
72
|
+
canvas owns focus.
|
|
73
|
+
- **Handled events no longer bubble.** Keyboard, wheel, and pointer
|
|
74
|
+
down/up events that the InputManager consumes now call
|
|
75
|
+
`stopImmediatePropagation` (via the existing `stopEvent` helper)
|
|
76
|
+
alongside `preventDefault`. Stops the host page from double-handling
|
|
77
|
+
(e.g., page-scroll on Space when a game uses Space for jump, modal
|
|
78
|
+
dismissal on canvas click).
|
|
79
|
+
- **Keyboard channels are released on blur.** When the canvas or
|
|
80
|
+
window loses focus, all currently-held keyboard channels are
|
|
81
|
+
forced back to zero and `onKeyUp` fires for each. Previously, a
|
|
82
|
+
user who alt-tabbed mid-W-press would have W register as held
|
|
83
|
+
until they manually released while focus was back — visible as
|
|
84
|
+
"stuck movement" on focus return.
|
|
85
|
+
|
|
86
|
+
### Notes
|
|
87
|
+
|
|
88
|
+
- Pointer move/over/leave/cancel are passive listeners and were
|
|
89
|
+
intentionally left untouched. Stopping propagation on every
|
|
90
|
+
pointermove would add per-event overhead with marginal benefit.
|
|
91
|
+
- Wheel events: the previous implementation already preventDefault'd
|
|
92
|
+
when focused but did not stopPropagation. Now both happen, and the
|
|
93
|
+
channel doesn't fire at all when canvas isn't focused.
|
|
94
|
+
|
|
7
95
|
## [0.6.5] - 2026-05-02
|
|
8
96
|
|
|
9
97
|
> **Heads-up — breaking change despite the patch number.** Removes
|
package/dist/esm/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export { decodeAudioData, getAudioContext, getOfflineAudioContext, isAudioContex
|
|
|
16
16
|
export { AudioAnalyser } from './audio/AudioAnalyser.js';
|
|
17
17
|
export { Music } from './audio/Music.js';
|
|
18
18
|
export { Sound } from './audio/Sound.js';
|
|
19
|
-
export { ChannelOffset, ChannelSize, Keyboard } from './input/types.js';
|
|
19
|
+
export { ChannelOffset, ChannelSize, Keyboard, maxPointers, pointerSlotSize } from './input/types.js';
|
|
20
20
|
export { GamepadChannel } from './input/GamepadChannels.js';
|
|
21
21
|
export { GamepadControl } from './input/GamepadControl.js';
|
|
22
22
|
export { GamepadMapping, GamepadMappingFamily } from './input/GamepadMapping.js';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Vector } from '@/math/Vector';
|
|
2
|
+
import type { Signal } from '@/core/Signal';
|
|
3
|
+
import type { Pointer } from './Pointer';
|
|
4
|
+
/**
|
|
5
|
+
* Internal gesture recognizer — NOT exported publicly.
|
|
6
|
+
* Receives pointer lifecycle events from InputManager and fires gesture signals.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GestureRecognizer {
|
|
9
|
+
readonly onPinch: Signal<[scale: number, center: Vector]>;
|
|
10
|
+
readonly onRotate: Signal<[angleDelta: number, center: Vector]>;
|
|
11
|
+
readonly onLongPress: Signal<[pointer: Pointer]>;
|
|
12
|
+
private readonly distanceThreshold;
|
|
13
|
+
private readonly touchPointers;
|
|
14
|
+
private readonly longPressEntries;
|
|
15
|
+
private prevDistance;
|
|
16
|
+
private prevAngle;
|
|
17
|
+
private readonly centerVec;
|
|
18
|
+
constructor(distanceThreshold: number, onPinch: Signal<[scale: number, center: Vector]>, onRotate: Signal<[angleDelta: number, center: Vector]>, onLongPress: Signal<[pointer: Pointer]>);
|
|
19
|
+
onPointerDown(pointer: Pointer): void;
|
|
20
|
+
onPointerMove(pointer: Pointer, distanceThreshold: number): void;
|
|
21
|
+
onPointerUp(pointer: Pointer): void;
|
|
22
|
+
onPointerLeave(pointer: Pointer): void;
|
|
23
|
+
onPointerCancel(pointer: Pointer): void;
|
|
24
|
+
destroy(): void;
|
|
25
|
+
private _cancelLongPress;
|
|
26
|
+
private _resetTwoTouchBaseline;
|
|
27
|
+
private _processTwoTouchGestures;
|
|
28
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Vector } from '../math/Vector.js';
|
|
2
|
+
|
|
3
|
+
/** Long-press threshold in milliseconds. */
|
|
4
|
+
const longPressMs = 500;
|
|
5
|
+
/**
|
|
6
|
+
* Internal gesture recognizer — NOT exported publicly.
|
|
7
|
+
* Receives pointer lifecycle events from InputManager and fires gesture signals.
|
|
8
|
+
*/
|
|
9
|
+
class GestureRecognizer {
|
|
10
|
+
onPinch;
|
|
11
|
+
onRotate;
|
|
12
|
+
onLongPress;
|
|
13
|
+
distanceThreshold;
|
|
14
|
+
// Active touch pointers (only touch type; index in order of arrival).
|
|
15
|
+
touchPointers = new Map();
|
|
16
|
+
// Long-press state per pointer.
|
|
17
|
+
longPressEntries = new Map();
|
|
18
|
+
// Previous two-touch distance and angle for incremental deltas.
|
|
19
|
+
prevDistance = -1;
|
|
20
|
+
prevAngle = 0;
|
|
21
|
+
// Reusable Vector for center dispatches (avoids heap churn).
|
|
22
|
+
centerVec = new Vector();
|
|
23
|
+
constructor(distanceThreshold, onPinch, onRotate, onLongPress) {
|
|
24
|
+
this.distanceThreshold = distanceThreshold;
|
|
25
|
+
this.onPinch = onPinch;
|
|
26
|
+
this.onRotate = onRotate;
|
|
27
|
+
this.onLongPress = onLongPress;
|
|
28
|
+
}
|
|
29
|
+
onPointerDown(pointer) {
|
|
30
|
+
if (pointer.type === 'touch') {
|
|
31
|
+
this.touchPointers.set(pointer.id, pointer);
|
|
32
|
+
this._resetTwoTouchBaseline();
|
|
33
|
+
}
|
|
34
|
+
// Start long-press timer for every pointer type.
|
|
35
|
+
const timerId = setTimeout(() => {
|
|
36
|
+
this.longPressEntries.delete(pointer.id);
|
|
37
|
+
this.onLongPress.dispatch(pointer);
|
|
38
|
+
}, longPressMs);
|
|
39
|
+
this.longPressEntries.set(pointer.id, {
|
|
40
|
+
pointerId: pointer.id,
|
|
41
|
+
pointer,
|
|
42
|
+
timerId,
|
|
43
|
+
startX: pointer.x,
|
|
44
|
+
startY: pointer.y,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
onPointerMove(pointer, distanceThreshold) {
|
|
48
|
+
// Cancel long-press if moved beyond threshold.
|
|
49
|
+
const entry = this.longPressEntries.get(pointer.id);
|
|
50
|
+
if (entry) {
|
|
51
|
+
const dx = pointer.x - entry.startX;
|
|
52
|
+
const dy = pointer.y - entry.startY;
|
|
53
|
+
if (Math.sqrt(dx * dx + dy * dy) > distanceThreshold) {
|
|
54
|
+
clearTimeout(entry.timerId);
|
|
55
|
+
this.longPressEntries.delete(pointer.id);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (pointer.type !== 'touch') {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Update the stored pointer reference's position via the live object.
|
|
62
|
+
// (We store the actual Pointer object so position is already updated by the caller.)
|
|
63
|
+
if (this.touchPointers.size < 2) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this._processTwoTouchGestures();
|
|
67
|
+
}
|
|
68
|
+
onPointerUp(pointer) {
|
|
69
|
+
this._cancelLongPress(pointer.id);
|
|
70
|
+
}
|
|
71
|
+
onPointerLeave(pointer) {
|
|
72
|
+
this._cancelLongPress(pointer.id);
|
|
73
|
+
if (pointer.type === 'touch') {
|
|
74
|
+
this.touchPointers.delete(pointer.id);
|
|
75
|
+
this._resetTwoTouchBaseline();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
onPointerCancel(pointer) {
|
|
79
|
+
this._cancelLongPress(pointer.id);
|
|
80
|
+
if (pointer.type === 'touch') {
|
|
81
|
+
this.touchPointers.delete(pointer.id);
|
|
82
|
+
this._resetTwoTouchBaseline();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
destroy() {
|
|
86
|
+
for (const entry of this.longPressEntries.values()) {
|
|
87
|
+
clearTimeout(entry.timerId);
|
|
88
|
+
}
|
|
89
|
+
this.longPressEntries.clear();
|
|
90
|
+
this.touchPointers.clear();
|
|
91
|
+
this.centerVec.destroy();
|
|
92
|
+
}
|
|
93
|
+
_cancelLongPress(pointerId) {
|
|
94
|
+
const entry = this.longPressEntries.get(pointerId);
|
|
95
|
+
if (entry) {
|
|
96
|
+
clearTimeout(entry.timerId);
|
|
97
|
+
this.longPressEntries.delete(pointerId);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
_resetTwoTouchBaseline() {
|
|
101
|
+
this.prevDistance = -1;
|
|
102
|
+
this.prevAngle = 0;
|
|
103
|
+
}
|
|
104
|
+
_processTwoTouchGestures() {
|
|
105
|
+
const iter = this.touchPointers.values();
|
|
106
|
+
const pA = iter.next().value;
|
|
107
|
+
const pB = iter.next().value;
|
|
108
|
+
const dx = pB.x - pA.x;
|
|
109
|
+
const dy = pB.y - pA.y;
|
|
110
|
+
const currentDistance = Math.sqrt(dx * dx + dy * dy);
|
|
111
|
+
const currentAngle = Math.atan2(dy, dx);
|
|
112
|
+
const centerX = (pA.x + pB.x) / 2;
|
|
113
|
+
const centerY = (pA.y + pB.y) / 2;
|
|
114
|
+
this.centerVec.set(centerX, centerY);
|
|
115
|
+
if (this.prevDistance > 0) {
|
|
116
|
+
const scale = currentDistance / this.prevDistance;
|
|
117
|
+
// Only fire if there's a meaningful distance change.
|
|
118
|
+
if (Math.abs(scale - 1) > 0.0001) {
|
|
119
|
+
this.onPinch.dispatch(scale, this.centerVec);
|
|
120
|
+
}
|
|
121
|
+
const angleDelta = currentAngle - this.prevAngle;
|
|
122
|
+
if (Math.abs(angleDelta) > 0.0001) {
|
|
123
|
+
this.onRotate.dispatch(angleDelta, this.centerVec);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
this.prevDistance = currentDistance;
|
|
127
|
+
this.prevAngle = currentAngle;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export { GestureRecognizer };
|
|
132
|
+
//# sourceMappingURL=GestureRecognizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GestureRecognizer.js","sources":["../../../../src/input/GestureRecognizer.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA;AACA,MAAM,WAAW,GAAG,GAAG;AAUvB;;;AAGG;MACU,iBAAiB,CAAA;AACV,IAAA,OAAO;AACP,IAAA,QAAQ;AACR,IAAA,WAAW;AAEV,IAAA,iBAAiB;;AAGjB,IAAA,aAAa,GAAyB,IAAI,GAAG,EAAE;;AAG/C,IAAA,gBAAgB,GAAgC,IAAI,GAAG,EAAE;;IAGlE,YAAY,GAAG,EAAE;IACjB,SAAS,GAAG,CAAC;;AAGJ,IAAA,SAAS,GAAG,IAAI,MAAM,EAAE;AAEzC,IAAA,WAAA,CACI,iBAAyB,EACzB,OAAgD,EAChD,QAAsD,EACtD,WAAuC,EAAA;AAEvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;AAEO,IAAA,aAAa,CAAC,OAAgB,EAAA;AACjC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;YAC3C,IAAI,CAAC,sBAAsB,EAAE;QACjC;;AAGA,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;YAC5B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,CAAC,EAAE,WAAW,CAAC;QAEf,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;YAClC,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,OAAO;YACP,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,CAAC;YACjB,MAAM,EAAE,OAAO,CAAC,CAAC;AACpB,SAAA,CAAC;IACN;IAEO,aAAa,CAAC,OAAgB,EAAE,iBAAyB,EAAA;;AAE5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAEnD,IAAI,KAAK,EAAE;YACP,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM;YACnC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM;AAEnC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,iBAAiB,EAAE;AAClD,gBAAA,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C;QACJ;AAEA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B;QACJ;;;QAIA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;YAC7B;QACJ;QAEA,IAAI,CAAC,wBAAwB,EAAE;IACnC;AAEO,IAAA,WAAW,CAAC,OAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC;AAEO,IAAA,cAAc,CAAC,OAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;AAEjC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,EAAE;QACjC;IACJ;AAEO,IAAA,eAAe,CAAC,OAAgB,EAAA;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;AAEjC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,EAAE;QACjC;IACJ;IAEO,OAAO,GAAA;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE;AAChD,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/B;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;IAC5B;AAEQ,IAAA,gBAAgB,CAAC,SAAiB,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;QAElD,IAAI,KAAK,EAAE;AACP,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;QAC3C;IACJ;IAEQ,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACtB;IAEQ,wBAAwB,GAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAgB;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAgB;QAEvC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACtB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;AAEvC,QAAA,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;AACjC,QAAA,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;QAEjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC,YAAY;;YAGjD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAChD;AAEA,YAAA,MAAM,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS;YAEhD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE;gBAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YACtD;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,eAAe;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;IACjC;AACH;;;;"}
|
|
@@ -17,6 +17,9 @@ export declare class InputManager {
|
|
|
17
17
|
private readonly channelsPressed;
|
|
18
18
|
private readonly channelsReleased;
|
|
19
19
|
private readonly gamepadDefinitions;
|
|
20
|
+
private readonly pointerSlots;
|
|
21
|
+
private readonly freeSlots;
|
|
22
|
+
private readonly gestureRecognizer;
|
|
20
23
|
private canvasFocusedValue;
|
|
21
24
|
private pointerDistanceThreshold;
|
|
22
25
|
private readonly keyDownHandler;
|
|
@@ -45,6 +48,12 @@ export declare class InputManager {
|
|
|
45
48
|
readonly onGamepadConnected: Signal<[Gamepad, Gamepad[]]>;
|
|
46
49
|
readonly onGamepadDisconnected: Signal<[Gamepad, Gamepad[]]>;
|
|
47
50
|
readonly onGamepadUpdated: Signal<[Gamepad, Gamepad[]]>;
|
|
51
|
+
/** Fires on every two-touch-pointer move where the distance between them changed. `scale` > 1 = spreading, < 1 = pinching. */
|
|
52
|
+
readonly onPinch: Signal<[scale: number, center: Vector]>;
|
|
53
|
+
/** Fires on every two-touch-pointer move where the angle between them changed. `angleDelta` is in radians. */
|
|
54
|
+
readonly onRotate: Signal<[angleDelta: number, center: Vector]>;
|
|
55
|
+
/** Fires when a pointer has been held without significant movement for ≥ 500 ms. */
|
|
56
|
+
readonly onLongPress: Signal<[pointer: Pointer]>;
|
|
48
57
|
constructor(app: Application);
|
|
49
58
|
get pointersInCanvas(): boolean;
|
|
50
59
|
get canvasFocused(): boolean;
|
|
@@ -55,6 +64,8 @@ export declare class InputManager {
|
|
|
55
64
|
clear(destroyInputs?: boolean): this;
|
|
56
65
|
update(): this;
|
|
57
66
|
destroy(): void;
|
|
67
|
+
private _assignSlot;
|
|
68
|
+
private _releaseSlot;
|
|
58
69
|
private handleKeyDown;
|
|
59
70
|
private handleKeyUp;
|
|
60
71
|
private handlePointerOver;
|
|
@@ -67,6 +78,14 @@ export declare class InputManager {
|
|
|
67
78
|
private handleCanvasFocus;
|
|
68
79
|
private handleCanvasBlur;
|
|
69
80
|
private handleWindowBlur;
|
|
81
|
+
/**
|
|
82
|
+
* Force every currently-held keyboard channel back to zero and emit
|
|
83
|
+
* onKeyUp for each. Called on canvas/window blur so keys held when
|
|
84
|
+
* focus leaves don't stay stuck "down" forever — without this, a user
|
|
85
|
+
* who alt-tabs while pressing W would have W register as held until
|
|
86
|
+
* they manually release while focus is back.
|
|
87
|
+
*/
|
|
88
|
+
private releaseAllKeyboardChannels;
|
|
70
89
|
private addEventListeners;
|
|
71
90
|
private removeEventListeners;
|
|
72
91
|
private updateGamepads;
|
|
@@ -3,9 +3,10 @@ import { Vector } from '../math/Vector.js';
|
|
|
3
3
|
import { Signal } from '../core/Signal.js';
|
|
4
4
|
import { getDistance } from '../math/utils.js';
|
|
5
5
|
import { stopEvent } from '../core/utils.js';
|
|
6
|
-
import { ChannelSize, ChannelOffset } from './types.js';
|
|
6
|
+
import { ChannelSize, maxPointers, ChannelOffset } from './types.js';
|
|
7
7
|
import { Gamepad } from './Gamepad.js';
|
|
8
8
|
import { PointerState, Pointer, PointerStateFlag } from './Pointer.js';
|
|
9
|
+
import { GestureRecognizer } from './GestureRecognizer.js';
|
|
9
10
|
import { builtInGamepadDefinitions, resolveGamepadDefinition } from './GamepadDefinitions.js';
|
|
10
11
|
|
|
11
12
|
var InputManagerFlag;
|
|
@@ -29,6 +30,10 @@ class InputManager {
|
|
|
29
30
|
channelsPressed = [];
|
|
30
31
|
channelsReleased = [];
|
|
31
32
|
gamepadDefinitions;
|
|
33
|
+
// Slot allocation for unified pointer tracking (mouse / touch / pen).
|
|
34
|
+
pointerSlots = new Map(); // pointerId → slotIndex
|
|
35
|
+
freeSlots = Array.from({ length: maxPointers }, (_, i) => i);
|
|
36
|
+
gestureRecognizer;
|
|
32
37
|
canvasFocusedValue;
|
|
33
38
|
pointerDistanceThreshold;
|
|
34
39
|
keyDownHandler = this.handleKeyDown.bind(this);
|
|
@@ -57,12 +62,23 @@ class InputManager {
|
|
|
57
62
|
onGamepadConnected = new Signal();
|
|
58
63
|
onGamepadDisconnected = new Signal();
|
|
59
64
|
onGamepadUpdated = new Signal();
|
|
65
|
+
/** Fires on every two-touch-pointer move where the distance between them changed. `scale` > 1 = spreading, < 1 = pinching. */
|
|
66
|
+
onPinch = new Signal();
|
|
67
|
+
/** Fires on every two-touch-pointer move where the angle between them changed. `angleDelta` is in radians. */
|
|
68
|
+
onRotate = new Signal();
|
|
69
|
+
/** Fires when a pointer has been held without significant movement for ≥ 500 ms. */
|
|
70
|
+
onLongPress = new Signal();
|
|
60
71
|
constructor(app) {
|
|
61
72
|
const { gamepadDefinitions = [], pointerDistanceThreshold } = app.options;
|
|
62
73
|
this.canvas = app.canvas;
|
|
63
74
|
this.canvasFocusedValue = document.activeElement === this.canvas;
|
|
64
75
|
this.pointerDistanceThreshold = pointerDistanceThreshold;
|
|
65
76
|
this.gamepadDefinitions = [...gamepadDefinitions, ...builtInGamepadDefinitions];
|
|
77
|
+
// Disable the browser's default pan/zoom/double-tap-zoom on touch devices so
|
|
78
|
+
// pointer events reach the canvas without being swallowed by the browser's
|
|
79
|
+
// native touch gestures.
|
|
80
|
+
this.canvas.style.touchAction = 'none';
|
|
81
|
+
this.gestureRecognizer = new GestureRecognizer(pointerDistanceThreshold, this.onPinch, this.onRotate, this.onLongPress);
|
|
66
82
|
this.addEventListeners();
|
|
67
83
|
}
|
|
68
84
|
get pointersInCanvas() {
|
|
@@ -115,6 +131,7 @@ class InputManager {
|
|
|
115
131
|
}
|
|
116
132
|
destroy() {
|
|
117
133
|
this.removeEventListeners();
|
|
134
|
+
this.gestureRecognizer.destroy();
|
|
118
135
|
for (const pointer of Object.values(this.pointers)) {
|
|
119
136
|
pointer.destroy();
|
|
120
137
|
}
|
|
@@ -126,6 +143,8 @@ class InputManager {
|
|
|
126
143
|
this.gamepadsValue.length = 0;
|
|
127
144
|
this.channelsPressed.length = 0;
|
|
128
145
|
this.channelsReleased.length = 0;
|
|
146
|
+
this.pointerSlots.clear();
|
|
147
|
+
this.freeSlots.length = 0;
|
|
129
148
|
this.wheelOffset.destroy();
|
|
130
149
|
this.flags.destroy();
|
|
131
150
|
this.onPointerEnter.destroy();
|
|
@@ -142,62 +161,153 @@ class InputManager {
|
|
|
142
161
|
this.onGamepadConnected.destroy();
|
|
143
162
|
this.onGamepadDisconnected.destroy();
|
|
144
163
|
this.onGamepadUpdated.destroy();
|
|
164
|
+
this.onPinch.destroy();
|
|
165
|
+
this.onRotate.destroy();
|
|
166
|
+
this.onLongPress.destroy();
|
|
167
|
+
}
|
|
168
|
+
_assignSlot(pointerId) {
|
|
169
|
+
if (this.pointerSlots.has(pointerId)) {
|
|
170
|
+
return this.pointerSlots.get(pointerId);
|
|
171
|
+
}
|
|
172
|
+
if (this.freeSlots.length === 0) {
|
|
173
|
+
return null; // All 16 slots occupied — silently drop.
|
|
174
|
+
}
|
|
175
|
+
const slot = this.freeSlots.shift();
|
|
176
|
+
this.pointerSlots.set(pointerId, slot);
|
|
177
|
+
return slot;
|
|
178
|
+
}
|
|
179
|
+
_releaseSlot(pointerId) {
|
|
180
|
+
const slot = this.pointerSlots.get(pointerId);
|
|
181
|
+
if (slot !== undefined) {
|
|
182
|
+
this.pointerSlots.delete(pointerId);
|
|
183
|
+
// Push to the front so slot 0 is recovered first, keeping allocation predictable.
|
|
184
|
+
this.freeSlots.unshift(slot);
|
|
185
|
+
}
|
|
145
186
|
}
|
|
146
187
|
handleKeyDown(event) {
|
|
188
|
+
// Game-engine convention: keys only register while the canvas
|
|
189
|
+
// owns focus. Otherwise typing into adjacent <input> fields would
|
|
190
|
+
// also drive game state, which is never what users want.
|
|
191
|
+
if (!this.canvasFocusedValue) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
147
194
|
const channel = ChannelOffset.Keyboard + event.keyCode;
|
|
148
195
|
this.channels[channel] = 1;
|
|
149
196
|
this.channelsPressed.push(channel);
|
|
150
197
|
this.flags.push(InputManagerFlag.KeyDown);
|
|
198
|
+
// Consume the event: stop default browser actions (page scroll on
|
|
199
|
+
// arrow/space, find-as-you-type on /, etc.) and stop propagation
|
|
200
|
+
// so other listeners on the page don't double-handle.
|
|
201
|
+
stopEvent(event);
|
|
151
202
|
}
|
|
152
203
|
handleKeyUp(event) {
|
|
204
|
+
if (!this.canvasFocusedValue) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
153
207
|
const channel = ChannelOffset.Keyboard + event.keyCode;
|
|
154
208
|
this.channels[channel] = 0;
|
|
155
209
|
this.channelsReleased.push(channel);
|
|
156
210
|
this.flags.push(InputManagerFlag.KeyUp);
|
|
211
|
+
stopEvent(event);
|
|
157
212
|
}
|
|
158
213
|
handlePointerOver(event) {
|
|
159
|
-
|
|
214
|
+
const slot = this._assignSlot(event.pointerId);
|
|
215
|
+
if (slot === null) {
|
|
216
|
+
return; // 17th+ simultaneous pointer — silently drop.
|
|
217
|
+
}
|
|
218
|
+
this.pointers[event.pointerId] = new Pointer(event, this.canvas, this.channels, slot);
|
|
160
219
|
this.flags.push(InputManagerFlag.PointerUpdate);
|
|
161
220
|
}
|
|
162
221
|
handlePointerLeave(event) {
|
|
163
|
-
this.pointers[event.pointerId]
|
|
222
|
+
const pointer = this.pointers[event.pointerId];
|
|
223
|
+
if (!pointer) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
pointer.handleLeave(event);
|
|
227
|
+
this.gestureRecognizer.onPointerLeave(pointer);
|
|
228
|
+
this._releaseSlot(event.pointerId);
|
|
164
229
|
this.flags.push(InputManagerFlag.PointerUpdate);
|
|
165
230
|
}
|
|
166
231
|
handlePointerDown(event) {
|
|
167
232
|
this.canvas.focus();
|
|
168
233
|
this.canvasFocusedValue = true;
|
|
169
|
-
this.pointers[event.pointerId]
|
|
234
|
+
const pointer = this.pointers[event.pointerId];
|
|
235
|
+
if (!pointer) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
pointer.handlePress(event);
|
|
239
|
+
this.gestureRecognizer.onPointerDown(pointer);
|
|
170
240
|
this.flags.push(InputManagerFlag.PointerUpdate);
|
|
171
|
-
|
|
241
|
+
// preventDefault stops native drag / text-selection;
|
|
242
|
+
// stopImmediatePropagation prevents bubbling to host-page click
|
|
243
|
+
// handlers so an embedded canvas doesn't accidentally trigger UI
|
|
244
|
+
// outside its bounds.
|
|
245
|
+
stopEvent(event);
|
|
172
246
|
}
|
|
173
247
|
handlePointerMove(event) {
|
|
174
|
-
this.pointers[event.pointerId]
|
|
248
|
+
const pointer = this.pointers[event.pointerId];
|
|
249
|
+
if (!pointer) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
pointer.handleMove(event);
|
|
253
|
+
this.gestureRecognizer.onPointerMove(pointer, this.pointerDistanceThreshold);
|
|
175
254
|
this.flags.push(InputManagerFlag.PointerUpdate);
|
|
176
255
|
}
|
|
177
256
|
handlePointerUp(event) {
|
|
178
|
-
this.pointers[event.pointerId]
|
|
257
|
+
const pointer = this.pointers[event.pointerId];
|
|
258
|
+
if (!pointer) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
pointer.handleRelease(event);
|
|
262
|
+
this.gestureRecognizer.onPointerUp(pointer);
|
|
179
263
|
this.flags.push(InputManagerFlag.PointerUpdate);
|
|
180
|
-
event
|
|
264
|
+
stopEvent(event);
|
|
181
265
|
}
|
|
182
266
|
handlePointerCancel(event) {
|
|
183
|
-
this.pointers[event.pointerId]
|
|
267
|
+
const pointer = this.pointers[event.pointerId];
|
|
268
|
+
if (!pointer) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
pointer.handleCancel(event);
|
|
272
|
+
this.gestureRecognizer.onPointerCancel(pointer);
|
|
273
|
+
this._releaseSlot(event.pointerId);
|
|
184
274
|
this.flags.push(InputManagerFlag.PointerUpdate);
|
|
185
275
|
}
|
|
186
276
|
handleMouseWheel(event) {
|
|
277
|
+
if (!this.canvasFocusedValue) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
187
280
|
this.wheelOffset.set(event.deltaX, event.deltaY);
|
|
188
281
|
this.flags.push(InputManagerFlag.MouseWheel);
|
|
189
|
-
|
|
190
|
-
event.preventDefault();
|
|
191
|
-
}
|
|
282
|
+
stopEvent(event);
|
|
192
283
|
}
|
|
193
284
|
handleCanvasFocus() {
|
|
194
285
|
this.canvasFocusedValue = true;
|
|
195
286
|
}
|
|
196
287
|
handleCanvasBlur() {
|
|
197
288
|
this.canvasFocusedValue = false;
|
|
289
|
+
this.releaseAllKeyboardChannels();
|
|
198
290
|
}
|
|
199
291
|
handleWindowBlur() {
|
|
200
292
|
this.canvasFocusedValue = false;
|
|
293
|
+
this.releaseAllKeyboardChannels();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Force every currently-held keyboard channel back to zero and emit
|
|
297
|
+
* onKeyUp for each. Called on canvas/window blur so keys held when
|
|
298
|
+
* focus leaves don't stay stuck "down" forever — without this, a user
|
|
299
|
+
* who alt-tabs while pressing W would have W register as held until
|
|
300
|
+
* they manually release while focus is back.
|
|
301
|
+
*/
|
|
302
|
+
releaseAllKeyboardChannels() {
|
|
303
|
+
for (let offset = 0; offset < ChannelSize.Category; offset++) {
|
|
304
|
+
const channel = ChannelOffset.Keyboard + offset;
|
|
305
|
+
if (this.channels[channel] !== 0) {
|
|
306
|
+
this.channels[channel] = 0;
|
|
307
|
+
this.channelsReleased.push(channel);
|
|
308
|
+
this.flags.push(InputManagerFlag.KeyUp);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
201
311
|
}
|
|
202
312
|
addEventListeners() {
|
|
203
313
|
const activeWindow = window;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputManager.js","sources":["../../../../src/input/InputManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputManager.js","sources":["../../../../src/input/InputManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|