@codexo/exojs 0.6.6 → 0.6.8

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 CHANGED
@@ -4,6 +4,110 @@ 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.8] - 2026-05-02
8
+
9
+ > **Heads-up — breaking change despite the patch number.** Removes
10
+ > the optional Rapier physics integration in its entirety. Pre-1.0
11
+ > SemVer permits breaking changes within the 0.x.y line; we kept
12
+ > the minor digit unchanged because the integration was opt-in and
13
+ > usage outside the engine is presumed minimal.
14
+
15
+ ### Removed
16
+
17
+ - **`createRapierPhysicsWorld` factory and the `RapierPhysicsWorld`
18
+ / `RapierPhysicsBinding` classes.** Plus the entire associated
19
+ type surface (`PhysicsBodyOptions`, `PhysicsBodyType`,
20
+ `PhysicsBoxShape`, `PhysicsCircleShape`, `PhysicsColliderShape`,
21
+ `PhysicsCollisionFilter`, `PhysicsSyncMode`, `RapierModuleLoader`,
22
+ `RapierPhysicsDebugDrawOptions`, `RapierPhysicsEvent`,
23
+ `RapierPhysicsWorldOptions`).
24
+ - **`@dimforge/rapier2d-compat` peerDependency.** Removed from
25
+ `package.json` along with the `peerDependenciesMeta` entry that
26
+ marked it optional.
27
+ - **README's "Optional Rapier Physics" section** and the
28
+ feature-list bullets that mentioned it.
29
+ - **`src/physics/`** and **`test/physics/`** directories deleted.
30
+
31
+ ### Migration
32
+
33
+ Apps that depended on `createRapierPhysicsWorld` need to integrate
34
+ Rapier (or any other physics library) directly in their own code
35
+ without library involvement. The adapter was always intentionally
36
+ narrow — it bound Rapier bodies to scene nodes from the outside,
37
+ no rendering / application / core scene code referenced physics.
38
+ Removing it is therefore mechanical for downstream consumers:
39
+
40
+ ```ts
41
+ // Before (≤ 0.6.7)
42
+ import { createRapierPhysicsWorld } from '@codexo/exojs';
43
+ const physics = await createRapierPhysicsWorld({ gravityY: 9.81 });
44
+
45
+ // After (0.6.8+) — pull Rapier directly:
46
+ import RAPIER from '@dimforge/rapier2d-compat';
47
+ await RAPIER.init();
48
+ const physics = new RAPIER.World({ x: 0, y: 9.81 });
49
+ // Sync bodies to your scene-node positions in your app's update loop.
50
+ ```
51
+
52
+ The motivation: ExoJS doesn't want to be a thin wrapper around
53
+ Rapier's API, and keeping the integration around tied the library
54
+ to a specific physics library forever. Removing it cleans the
55
+ boundary — ExoJS is rendering + scene + input; physics is the
56
+ user's choice.
57
+
58
+ ## [0.6.7] - 2026-05-02
59
+
60
+ Touch / multi-touch / pointer support, fully unified — no separate
61
+ Mouse or Touch class. All single-pointer input (mouse, touch, pen)
62
+ goes through the existing `Pointer` class; multi-touch is just
63
+ "multiple Pointers, each in its own slot". The `ChannelOffset.Pointers`
64
+ block (256 slots, previously reserved but unused) is now populated
65
+ with state for up to 16 simultaneous pointers — 16 channels per
66
+ slot, 16 × 16 = 256 exact fit.
67
+
68
+ ### Added
69
+
70
+ - **Per-pointer channel-buffer state.** Each active pointer fills 16
71
+ channels in its slot: `Active`, `X`, `Y`, `Pressure`, `Width`,
72
+ `Height`, `Twist`, `TiltX`, `TiltY`, `Left`, `Right`, `Middle`,
73
+ `IsMouse`, `IsTouch`, `IsPen`, `IsPrimary`. Coordinates and
74
+ contact-area are normalized to [0..1] against the canvas; tilt
75
+ is mapped from [-90..90°] to [0..1].
76
+ - **`Pointer` namespace export** with channel-offset constants:
77
+ - Primary-pointer convenience: `Pointer.Active`, `Pointer.X`,
78
+ `Pointer.Y`, `Pointer.Pressure`, `Pointer.Left`, `Pointer.IsTouch`,
79
+ etc. — these mirror slot 0.
80
+ - Per-slot multi-pointer access: `Pointer.Slot0Active`,
81
+ `Pointer.Slot0X`, ..., `Pointer.Slot15Y`. Used for pinch / multi-
82
+ touch bindings ("both Slot0 and Slot1 active and IsTouch").
83
+ - Other per-slot channels are reachable via arithmetic
84
+ (`Pointer.X + slotIndex * pointerSlotSize + channelOffset`).
85
+ - **Slot allocation.** Up to `maxPointers = 16` simultaneous
86
+ pointers. The 17th is silently dropped. Slots are reused on
87
+ pointer release in deterministic order (lowest free slot first),
88
+ so the primary pointer is reliably slot 0 in single-pointer
89
+ scenarios.
90
+ - **`InputManager.onPinch / onRotate / onLongPress`** gesture
91
+ signals. Pinch and rotate fire when at least two `isTouch=true`
92
+ pointers move simultaneously; long-press fires when a pointer
93
+ has been held for ≥ 500 ms without exceeding
94
+ `pointerDistanceThreshold` movement. The dispatcher is an
95
+ internal `GestureRecognizer` class — not part of the public API.
96
+ - **`maxPointers` and `pointerSlotSize`** constants exported from
97
+ the input module for callers that want to compute slot offsets.
98
+ - **`canvas.style.touchAction = 'none'`** is set automatically by
99
+ `InputManager` so browser-default gestures (zoom, pan, double-tap
100
+ zoom, swipe-to-go-back) don't interfere with the game's own input
101
+ handling.
102
+
103
+ ### Internal / pre-existing fix
104
+
105
+ - `Pointer` constructor now takes `channels: Float32Array` and
106
+ `slotIndex: number` (in addition to `event` and `canvas`) so it
107
+ can write its slice of the channel buffer. Constructed only by
108
+ `InputManager`; no documented or expected user-facing
109
+ constructor calls. Mentioned for completeness.
110
+
7
111
  ## [0.6.6] - 2026-05-02
8
112
 
9
113
  Pure bug-fix / hardening of the InputManager's event flow. No public
package/README.md CHANGED
@@ -14,7 +14,6 @@ ExoJS is **pre-1.0**. The public API is still under active design — scene grap
14
14
  - Practical visuals: filters, masks, render passes, cache-as-bitmap
15
15
  - Gameplay tools: animated sprites, scene stacking, camera helpers, audio sprites
16
16
  - Performance visibility with built-in render stats and benchmark harness
17
- - Optional Rapier physics integration without forcing physics on every app
18
17
 
19
18
  ## What Is Shipped Today
20
19
 
@@ -25,7 +24,6 @@ ExoJS is **pre-1.0**. The public API is still under active design — scene grap
25
24
  - View/camera helpers (`follow`, bounds clamp, shake, zoom)
26
25
  - Rendering composition primitives (`RenderTexture`, `RenderTargetPass`, filter chains, visual masks, cache-as-bitmap)
27
26
  - Render stats (`submittedNodes`, `culledNodes`, `drawCalls`, `batches`, `renderPasses`, ...)
28
- - Optional Rapier adapter (`createRapierPhysicsWorld`)
29
27
 
30
28
  ## Installation
31
29
 
@@ -98,40 +96,6 @@ new Application({ backend: { type: 'webgl2' } });
98
96
  new Application({ backend: { type: 'auto' } });
99
97
  ```
100
98
 
101
- ## Optional Rapier Physics
102
-
103
- Rapier integration is opt-in and loaded only when you use it.
104
-
105
- ```ts
106
- import { createRapierPhysicsWorld } from '@codexo/exojs';
107
-
108
- const physics = await createRapierPhysicsWorld({ gravityY: 9.81 });
109
- ```
110
-
111
- If Rapier is unavailable, creation fails with a clear setup error.
112
-
113
- ### Physics scope policy
114
-
115
- ExoJS ships **one** physics adapter: Rapier. The integration is intentionally
116
- narrow:
117
-
118
- - Physics is **optional**. `@dimforge/rapier2d-compat` is a peer dependency
119
- marked `optional`. Apps that do not call `createRapierPhysicsWorld` never
120
- load it and never pay for it at runtime.
121
- - Rendering, application, and core scene code **do not** depend on physics.
122
- The adapter binds Rapier bodies to scene nodes from the outside; the core
123
- has no knowledge of physics.
124
- - ExoJS is **not** a physics-engine abstraction layer. There is no
125
- `PhysicsWorld` interface that spans multiple backends, and no plan to
126
- add one. If you need a different physics library, integrate it directly
127
- in your app code without library involvement.
128
- - A second physics adapter (Box2D, Matter.js, Planck, etc.) is **not** on
129
- the 1.0 roadmap and will not be accepted as a contribution. The honesty
130
- rule that applies to rendering backends applies here too: one chosen
131
- physics, not a fake-universal physics layer.
132
-
133
- For full integration details see [docs/physics/rapier-integration.md](docs/physics/rapier-integration.md).
134
-
135
99
  ## Examples
136
100
 
137
101
  The runnable live site (Astro + Lit + Monaco preview) lives in [`examples/`](examples/README.md) and is deployed as the repository's GitHub Pages site at <https://exoridus.github.io/ExoJS/>.
@@ -5,4 +5,3 @@ export * from './math/index';
5
5
  export * from './particles/index';
6
6
  export * from './rendering/index';
7
7
  export * from './resources/index';
8
- export * from './physics/index';
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';
@@ -129,5 +129,4 @@ export { VideoFactory } from './resources/factories/VideoFactory.js';
129
129
  export { BinaryFactory } from './resources/factories/BinaryFactory.js';
130
130
  export { VttFactory } from './resources/factories/VttFactory.js';
131
131
  export { WasmFactory } from './resources/factories/WasmFactory.js';
132
- export { RapierPhysicsBinding, RapierPhysicsWorld, createRapierPhysicsWorld } from './physics/RapierPhysicsWorld.js';
133
132
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -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":"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"}
@@ -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;
@@ -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,6 +161,28 @@ 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) {
147
188
  // Game-engine convention: keys only register while the canvas
@@ -170,17 +211,32 @@ class InputManager {
170
211
  stopEvent(event);
171
212
  }
172
213
  handlePointerOver(event) {
173
- this.pointers[event.pointerId] = new Pointer(event, this.canvas);
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);
174
219
  this.flags.push(InputManagerFlag.PointerUpdate);
175
220
  }
176
221
  handlePointerLeave(event) {
177
- this.pointers[event.pointerId].handleLeave(event);
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);
178
229
  this.flags.push(InputManagerFlag.PointerUpdate);
179
230
  }
180
231
  handlePointerDown(event) {
181
232
  this.canvas.focus();
182
233
  this.canvasFocusedValue = true;
183
- this.pointers[event.pointerId].handlePress(event);
234
+ const pointer = this.pointers[event.pointerId];
235
+ if (!pointer) {
236
+ return;
237
+ }
238
+ pointer.handlePress(event);
239
+ this.gestureRecognizer.onPointerDown(pointer);
184
240
  this.flags.push(InputManagerFlag.PointerUpdate);
185
241
  // preventDefault stops native drag / text-selection;
186
242
  // stopImmediatePropagation prevents bubbling to host-page click
@@ -189,16 +245,32 @@ class InputManager {
189
245
  stopEvent(event);
190
246
  }
191
247
  handlePointerMove(event) {
192
- this.pointers[event.pointerId].handleMove(event);
248
+ const pointer = this.pointers[event.pointerId];
249
+ if (!pointer) {
250
+ return;
251
+ }
252
+ pointer.handleMove(event);
253
+ this.gestureRecognizer.onPointerMove(pointer, this.pointerDistanceThreshold);
193
254
  this.flags.push(InputManagerFlag.PointerUpdate);
194
255
  }
195
256
  handlePointerUp(event) {
196
- this.pointers[event.pointerId].handleRelease(event);
257
+ const pointer = this.pointers[event.pointerId];
258
+ if (!pointer) {
259
+ return;
260
+ }
261
+ pointer.handleRelease(event);
262
+ this.gestureRecognizer.onPointerUp(pointer);
197
263
  this.flags.push(InputManagerFlag.PointerUpdate);
198
264
  stopEvent(event);
199
265
  }
200
266
  handlePointerCancel(event) {
201
- this.pointers[event.pointerId].handleCancel(event);
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);
202
274
  this.flags.push(InputManagerFlag.PointerUpdate);
203
275
  }
204
276
  handleMouseWheel(event) {
@@ -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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"}