@aura3d/input 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/dist/ActionMap.d.ts +44 -0
- package/dist/ActionMap.d.ts.map +1 -0
- package/dist/ActionMap.js +74 -0
- package/dist/ActionMap.js.map +1 -0
- package/dist/GamepadDevice.d.ts +17 -0
- package/dist/GamepadDevice.d.ts.map +1 -0
- package/dist/GamepadDevice.js +27 -0
- package/dist/GamepadDevice.js.map +1 -0
- package/dist/GamepadInput.d.ts +3 -0
- package/dist/GamepadInput.d.ts.map +1 -0
- package/dist/GamepadInput.js +2 -0
- package/dist/GamepadInput.js.map +1 -0
- package/dist/GestureControls.d.ts +3 -0
- package/dist/GestureControls.d.ts.map +1 -0
- package/dist/GestureControls.js +2 -0
- package/dist/GestureControls.js.map +1 -0
- package/dist/GestureHapticsFixtures.d.ts +57 -0
- package/dist/GestureHapticsFixtures.d.ts.map +1 -0
- package/dist/GestureHapticsFixtures.js +115 -0
- package/dist/GestureHapticsFixtures.js.map +1 -0
- package/dist/GestureRecognizer.d.ts +19 -0
- package/dist/GestureRecognizer.d.ts.map +1 -0
- package/dist/GestureRecognizer.js +32 -0
- package/dist/GestureRecognizer.js.map +1 -0
- package/dist/InputActionBindingFixtures.d.ts +44 -0
- package/dist/InputActionBindingFixtures.d.ts.map +1 -0
- package/dist/InputActionBindingFixtures.js +86 -0
- package/dist/InputActionBindingFixtures.js.map +1 -0
- package/dist/InputReplay.d.ts +97 -0
- package/dist/InputReplay.d.ts.map +1 -0
- package/dist/InputReplay.js +189 -0
- package/dist/InputReplay.js.map +1 -0
- package/dist/InputSnapshot.d.ts +44 -0
- package/dist/InputSnapshot.d.ts.map +1 -0
- package/dist/InputSnapshot.js +44 -0
- package/dist/InputSnapshot.js.map +1 -0
- package/dist/InputSystem.d.ts +24 -0
- package/dist/InputSystem.d.ts.map +1 -0
- package/dist/InputSystem.js +77 -0
- package/dist/InputSystem.js.map +1 -0
- package/dist/InteractionSystem.d.ts +42 -0
- package/dist/InteractionSystem.d.ts.map +1 -0
- package/dist/InteractionSystem.js +80 -0
- package/dist/InteractionSystem.js.map +1 -0
- package/dist/KeyboardDevice.d.ts +18 -0
- package/dist/KeyboardDevice.d.ts.map +1 -0
- package/dist/KeyboardDevice.js +22 -0
- package/dist/KeyboardDevice.js.map +1 -0
- package/dist/PickingRay.d.ts +10 -0
- package/dist/PickingRay.d.ts.map +1 -0
- package/dist/PickingRay.js +27 -0
- package/dist/PickingRay.js.map +1 -0
- package/dist/PointerDevice.d.ts +51 -0
- package/dist/PointerDevice.d.ts.map +1 -0
- package/dist/PointerDevice.js +75 -0
- package/dist/PointerDevice.js.map +1 -0
- package/dist/VirtualTouchControls.d.ts +57 -0
- package/dist/VirtualTouchControls.d.ts.map +1 -0
- package/dist/VirtualTouchControls.js +127 -0
- package/dist/VirtualTouchControls.js.map +1 -0
- package/dist/WebXRSessionController.d.ts +108 -0
- package/dist/WebXRSessionController.d.ts.map +1 -0
- package/dist/WebXRSessionController.js +143 -0
- package/dist/WebXRSessionController.js.map +1 -0
- package/dist/XRFixtures.d.ts +65 -0
- package/dist/XRFixtures.d.ts.map +1 -0
- package/dist/XRFixtures.js +136 -0
- package/dist/XRFixtures.js.map +1 -0
- package/dist/controls/CameraRig.d.ts +12 -0
- package/dist/controls/CameraRig.d.ts.map +1 -0
- package/dist/controls/CameraRig.js +32 -0
- package/dist/controls/CameraRig.js.map +1 -0
- package/dist/controls/ControlTypes.d.ts +17 -0
- package/dist/controls/ControlTypes.d.ts.map +1 -0
- package/dist/controls/ControlTypes.js +4 -0
- package/dist/controls/ControlTypes.js.map +1 -0
- package/dist/controls/EditorFlyControls.d.ts +20 -0
- package/dist/controls/EditorFlyControls.d.ts.map +1 -0
- package/dist/controls/EditorFlyControls.js +44 -0
- package/dist/controls/EditorFlyControls.js.map +1 -0
- package/dist/controls/FirstPersonControls.d.ts +22 -0
- package/dist/controls/FirstPersonControls.d.ts.map +1 -0
- package/dist/controls/FirstPersonControls.js +44 -0
- package/dist/controls/FirstPersonControls.js.map +1 -0
- package/dist/controls/OrbitControls.d.ts +49 -0
- package/dist/controls/OrbitControls.d.ts.map +1 -0
- package/dist/controls/OrbitControls.js +131 -0
- package/dist/controls/OrbitControls.js.map +1 -0
- package/dist/controls/PointerLockControls.d.ts +11 -0
- package/dist/controls/PointerLockControls.d.ts.map +1 -0
- package/dist/controls/PointerLockControls.js +19 -0
- package/dist/controls/PointerLockControls.js.map +1 -0
- package/dist/controls/SceneCameraAdapter.d.ts +10 -0
- package/dist/controls/SceneCameraAdapter.d.ts.map +1 -0
- package/dist/controls/SceneCameraAdapter.js +90 -0
- package/dist/controls/SceneCameraAdapter.js.map +1 -0
- package/dist/controls/ThirdPersonFollowControls.d.ts +20 -0
- package/dist/controls/ThirdPersonFollowControls.d.ts.map +1 -0
- package/dist/controls/ThirdPersonFollowControls.js +33 -0
- package/dist/controls/ThirdPersonFollowControls.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/package.json +17 -0
- package/src/ActionMap.ts +94 -0
- package/src/GamepadDevice.ts +48 -0
- package/src/GamepadInput.ts +2 -0
- package/src/GestureControls.ts +2 -0
- package/src/GestureHapticsFixtures.ts +179 -0
- package/src/GestureRecognizer.ts +43 -0
- package/src/InputActionBindingFixtures.ts +121 -0
- package/src/InputReplay.ts +275 -0
- package/src/InputSnapshot.ts +92 -0
- package/src/InputSystem.ts +92 -0
- package/src/InteractionSystem.ts +119 -0
- package/src/KeyboardDevice.ts +32 -0
- package/src/PickingRay.ts +49 -0
- package/src/PointerDevice.ts +102 -0
- package/src/VirtualTouchControls.ts +169 -0
- package/src/WebXRSessionController.ts +248 -0
- package/src/XRFixtures.ts +203 -0
- package/src/controls/CameraRig.ts +38 -0
- package/src/controls/ControlTypes.ts +21 -0
- package/src/controls/EditorFlyControls.ts +55 -0
- package/src/controls/FirstPersonControls.ts +60 -0
- package/src/controls/OrbitControls.ts +168 -0
- package/src/controls/PointerLockControls.ts +24 -0
- package/src/controls/SceneCameraAdapter.ts +100 -0
- package/src/controls/ThirdPersonFollowControls.ts +42 -0
- package/src/index.ts +72 -0
- package/tests/input.test.ts +69 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export class InteractionSystem {
|
|
2
|
+
rayProvider;
|
|
3
|
+
targetProvider;
|
|
4
|
+
listeners = new Set();
|
|
5
|
+
hovered;
|
|
6
|
+
pressed;
|
|
7
|
+
dragging = false;
|
|
8
|
+
constructor(rayProvider, targetProvider) {
|
|
9
|
+
this.rayProvider = rayProvider;
|
|
10
|
+
this.targetProvider = targetProvider;
|
|
11
|
+
}
|
|
12
|
+
subscribe(listener) {
|
|
13
|
+
this.listeners.add(listener);
|
|
14
|
+
return () => this.listeners.delete(listener);
|
|
15
|
+
}
|
|
16
|
+
update(snapshot) {
|
|
17
|
+
const hit = this.pick(this.rayProvider(snapshot));
|
|
18
|
+
const target = hit?.target;
|
|
19
|
+
if (this.hovered?.id !== target?.id) {
|
|
20
|
+
if (this.hovered)
|
|
21
|
+
this.emit({ type: "hover-exit", target: this.hovered, snapshot });
|
|
22
|
+
if (target)
|
|
23
|
+
this.emit({ type: "hover-enter", hit, target, snapshot });
|
|
24
|
+
this.hovered = target;
|
|
25
|
+
}
|
|
26
|
+
if (snapshot.button(0).pressed && target) {
|
|
27
|
+
this.pressed = target;
|
|
28
|
+
this.dragging = false;
|
|
29
|
+
this.emit({ type: "pointer-down", hit, target, snapshot });
|
|
30
|
+
}
|
|
31
|
+
if (this.pressed && snapshot.button(0).down && (snapshot.pointer.deltaX !== 0 || snapshot.pointer.deltaY !== 0)) {
|
|
32
|
+
this.emit({ type: this.dragging ? "drag" : "drag-start", hit, target: this.pressed, snapshot });
|
|
33
|
+
this.dragging = true;
|
|
34
|
+
}
|
|
35
|
+
if (this.pressed && snapshot.button(0).released) {
|
|
36
|
+
this.emit({ type: this.dragging ? "drag-end" : "click", hit, target: this.pressed, snapshot });
|
|
37
|
+
this.pressed = undefined;
|
|
38
|
+
this.dragging = false;
|
|
39
|
+
}
|
|
40
|
+
return hit;
|
|
41
|
+
}
|
|
42
|
+
pick(ray) {
|
|
43
|
+
const hits = this.targetProvider()
|
|
44
|
+
.map((target) => ({ target, distance: intersectBounds(ray, target.bounds) }))
|
|
45
|
+
.filter((hit) => hit.distance !== undefined)
|
|
46
|
+
.sort((a, b) => a.distance - b.distance);
|
|
47
|
+
return hits[0];
|
|
48
|
+
}
|
|
49
|
+
emit(event) {
|
|
50
|
+
for (const listener of [...this.listeners])
|
|
51
|
+
listener(event);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function intersectBounds(ray, bounds) {
|
|
55
|
+
let tmin = Number.NEGATIVE_INFINITY;
|
|
56
|
+
let tmax = Number.POSITIVE_INFINITY;
|
|
57
|
+
for (const axis of [0, 1, 2]) {
|
|
58
|
+
const origin = axis === 0 ? ray.origin.x : axis === 1 ? ray.origin.y : ray.origin.z;
|
|
59
|
+
const direction = axis === 0 ? ray.direction.x : axis === 1 ? ray.direction.y : ray.direction.z;
|
|
60
|
+
const min = bounds.min[axis];
|
|
61
|
+
const max = bounds.max[axis];
|
|
62
|
+
if (Math.abs(direction) < 1e-8) {
|
|
63
|
+
if (origin < min || origin > max)
|
|
64
|
+
return undefined;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const invD = 1 / direction;
|
|
68
|
+
let near = (min - origin) * invD;
|
|
69
|
+
let far = (max - origin) * invD;
|
|
70
|
+
if (near > far)
|
|
71
|
+
[near, far] = [far, near];
|
|
72
|
+
tmin = Math.max(tmin, near);
|
|
73
|
+
tmax = Math.min(tmax, far);
|
|
74
|
+
if (tmin > tmax)
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const distance = tmin >= 0 ? tmin : tmax;
|
|
78
|
+
return distance >= 0 ? distance : undefined;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=InteractionSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractionSystem.js","sourceRoot":"","sources":["../../../../packages/input/src/InteractionSystem.ts"],"names":[],"mappings":"AAmCA,MAAM,OAAO,iBAAiB;IAOT;IACA;IAPF,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,OAAO,CAAqB;IAC5B,OAAO,CAAqB;IAC5B,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACmB,WAAmC,EACnC,cAAyC;QADzC,gBAAW,GAAX,WAAW,CAAwB;QACnC,mBAAc,GAAd,cAAc,CAA2B;IACzD,CAAC;IAEJ,SAAS,CAAC,QAA6B;QACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,QAAuB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC;QAE3B,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,MAAM,EAAE,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpF,IAAI,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAChH,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/F,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,CAAC,GAAQ;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;aAC/B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAC5E,MAAM,CAAC,CAAC,GAAG,EAAyB,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC;aAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAEO,IAAI,CAAC,KAAuB;QAClC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,SAAS,eAAe,CAAC,GAAQ,EAAE,MAAyB;IAC1D,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAChG,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG;gBAAE,OAAO,SAAS,CAAC;YACnD,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC;QAC3B,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;QACjC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;QAChC,IAAI,IAAI,GAAG,GAAG;YAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,SAAS,CAAC;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface KeyboardEventLike {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly repeat?: boolean;
|
|
4
|
+
preventDefault?(): void;
|
|
5
|
+
}
|
|
6
|
+
export declare class KeyboardDevice {
|
|
7
|
+
private current;
|
|
8
|
+
private previous;
|
|
9
|
+
keyDown(event: KeyboardEventLike): void;
|
|
10
|
+
keyUp(event: KeyboardEventLike): void;
|
|
11
|
+
blur(): void;
|
|
12
|
+
snapshotSets(): {
|
|
13
|
+
readonly keys: ReadonlySet<string>;
|
|
14
|
+
readonly previousKeys: ReadonlySet<string>;
|
|
15
|
+
};
|
|
16
|
+
endFrame(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=KeyboardDevice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyboardDevice.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/KeyboardDevice.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,IAAI,IAAI,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAqB;IAErC,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAMvC,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAIrC,IAAI,IAAI,IAAI;IAIZ,YAAY,IAAI;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE;IAIlG,QAAQ,IAAI,IAAI;CAGjB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class KeyboardDevice {
|
|
2
|
+
current = new Set();
|
|
3
|
+
previous = new Set();
|
|
4
|
+
keyDown(event) {
|
|
5
|
+
if (!event.repeat) {
|
|
6
|
+
this.current.add(event.code);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
keyUp(event) {
|
|
10
|
+
this.current.delete(event.code);
|
|
11
|
+
}
|
|
12
|
+
blur() {
|
|
13
|
+
this.current.clear();
|
|
14
|
+
}
|
|
15
|
+
snapshotSets() {
|
|
16
|
+
return { keys: new Set(this.current), previousKeys: new Set(this.previous) };
|
|
17
|
+
}
|
|
18
|
+
endFrame() {
|
|
19
|
+
this.previous = new Set(this.current);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=KeyboardDevice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyboardDevice.js","sourceRoot":"","sources":["../../../../packages/input/src/KeyboardDevice.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,cAAc;IACjB,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,OAAO,CAAC,KAAwB;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAwB;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,YAAY;QACV,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Ray } from "@aura3d/math";
|
|
2
|
+
import { type Camera } from "@aura3d/scene";
|
|
3
|
+
export interface PickingRayViewport {
|
|
4
|
+
readonly x: number;
|
|
5
|
+
readonly y: number;
|
|
6
|
+
readonly width: number;
|
|
7
|
+
readonly height: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function pickingRayFromCamera(camera: Camera, screenX: number, screenY: number, viewport?: PickingRayViewport): Ray;
|
|
10
|
+
//# sourceMappingURL=PickingRay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickingRay.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/PickingRay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAUxD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,kBAAoC,GAC7C,GAAG,CAQL"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Ray, Vector3 } from "@aura3d/math";
|
|
2
|
+
import { invertMat4 } from "@aura3d/scene";
|
|
3
|
+
export function pickingRayFromCamera(camera, screenX, screenY, viewport = camera.viewport) {
|
|
4
|
+
camera.updateCameraMatrices();
|
|
5
|
+
const ndcX = ((screenX - viewport.x) / viewport.width) * 2 - 1;
|
|
6
|
+
const ndcY = 1 - ((screenY - viewport.y) / viewport.height) * 2;
|
|
7
|
+
const inverseViewProjection = invertMat4(camera.viewProjectionMatrix);
|
|
8
|
+
const near = transformClip(inverseViewProjection, [ndcX, ndcY, -1]);
|
|
9
|
+
const far = transformClip(inverseViewProjection, [ndcX, ndcY, 1]);
|
|
10
|
+
return new Ray(toVector3(near), toVector3(far).subtract(toVector3(near)));
|
|
11
|
+
}
|
|
12
|
+
function transformClip(matrix, point) {
|
|
13
|
+
const x = point[0];
|
|
14
|
+
const y = point[1];
|
|
15
|
+
const z = point[2];
|
|
16
|
+
const w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15];
|
|
17
|
+
const invW = Math.abs(w) <= 1e-8 ? 1 : 1 / w;
|
|
18
|
+
return [
|
|
19
|
+
(matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) * invW,
|
|
20
|
+
(matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) * invW,
|
|
21
|
+
(matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) * invW
|
|
22
|
+
];
|
|
23
|
+
}
|
|
24
|
+
function toVector3(value) {
|
|
25
|
+
return new Vector3(value[0], value[1], value[2]);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=PickingRay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickingRay.js","sourceRoot":"","sources":["../../../../packages/input/src/PickingRay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAiBxD,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,OAAe,EACf,OAAe,EACf,WAA+B,MAAM,CAAC,QAAQ;IAE9C,MAAM,CAAC,oBAAoB,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAc,CAAC;IACnF,MAAM,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,KAAa;IACrD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;QACnE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;QACnE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { PointerTouch } from "./InputSnapshot";
|
|
2
|
+
export interface PointerEventLike {
|
|
3
|
+
readonly clientX: number;
|
|
4
|
+
readonly clientY: number;
|
|
5
|
+
readonly button?: number;
|
|
6
|
+
readonly buttons?: number;
|
|
7
|
+
readonly pointerId?: number;
|
|
8
|
+
preventDefault?(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface WheelEventLike {
|
|
11
|
+
readonly deltaX: number;
|
|
12
|
+
readonly deltaY: number;
|
|
13
|
+
preventDefault?(): void;
|
|
14
|
+
}
|
|
15
|
+
export declare class PointerDevice {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
deltaX: number;
|
|
19
|
+
deltaY: number;
|
|
20
|
+
wheelX: number;
|
|
21
|
+
wheelY: number;
|
|
22
|
+
private readonly buttons;
|
|
23
|
+
private previousButtons;
|
|
24
|
+
private readonly touches;
|
|
25
|
+
private pixelRatio;
|
|
26
|
+
setDevicePixelRatio(value: number): void;
|
|
27
|
+
move(event: PointerEventLike): void;
|
|
28
|
+
down(event: PointerEventLike): void;
|
|
29
|
+
up(event: PointerEventLike): void;
|
|
30
|
+
wheel(event: WheelEventLike): void;
|
|
31
|
+
blur(): void;
|
|
32
|
+
snapshotData(): {
|
|
33
|
+
pointer: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
deltaX: number;
|
|
37
|
+
deltaY: number;
|
|
38
|
+
wheelX: number;
|
|
39
|
+
wheelY: number;
|
|
40
|
+
buttons: Map<number, {
|
|
41
|
+
down: boolean;
|
|
42
|
+
pressed: boolean;
|
|
43
|
+
released: boolean;
|
|
44
|
+
}>;
|
|
45
|
+
touches: PointerTouch[];
|
|
46
|
+
};
|
|
47
|
+
previousPointerButtons: Set<number>;
|
|
48
|
+
};
|
|
49
|
+
endFrame(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=PointerDevice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PointerDevice.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/PointerDevice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,IAAI,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,IAAI,IAAI,CAAC;CACzB;AAED,qBAAa,aAAa;IACxB,CAAC,SAAK;IACN,CAAC,SAAK;IACN,MAAM,SAAK;IACX,MAAM,SAAK;IACX,MAAM,SAAK;IACX,MAAM,SAAK;IAEX,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,UAAU,CAAK;IAEvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOxC,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAanC,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAKnC,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAQjC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKlC,IAAI,IAAI,IAAI;IAKZ,YAAY;;;;;;;;;sBACgC,OAAO;yBAAW,OAAO;0BAAY,OAAO;;;;;;IAoBxF,QAAQ,IAAI,IAAI;CAOjB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class PointerDevice {
|
|
2
|
+
x = 0;
|
|
3
|
+
y = 0;
|
|
4
|
+
deltaX = 0;
|
|
5
|
+
deltaY = 0;
|
|
6
|
+
wheelX = 0;
|
|
7
|
+
wheelY = 0;
|
|
8
|
+
buttons = new Set();
|
|
9
|
+
previousButtons = new Set();
|
|
10
|
+
touches = new Map();
|
|
11
|
+
pixelRatio = 1;
|
|
12
|
+
setDevicePixelRatio(value) {
|
|
13
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
14
|
+
throw new Error("Device pixel ratio must be positive");
|
|
15
|
+
}
|
|
16
|
+
this.pixelRatio = value;
|
|
17
|
+
}
|
|
18
|
+
move(event) {
|
|
19
|
+
const nextX = event.clientX * this.pixelRatio;
|
|
20
|
+
const nextY = event.clientY * this.pixelRatio;
|
|
21
|
+
this.deltaX += nextX - this.x;
|
|
22
|
+
this.deltaY += nextY - this.y;
|
|
23
|
+
this.x = nextX;
|
|
24
|
+
this.y = nextY;
|
|
25
|
+
if (event.pointerId !== undefined) {
|
|
26
|
+
this.touches.set(event.pointerId, { id: event.pointerId, x: this.x, y: this.y });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
down(event) {
|
|
30
|
+
this.move(event);
|
|
31
|
+
this.buttons.add(event.button ?? 0);
|
|
32
|
+
}
|
|
33
|
+
up(event) {
|
|
34
|
+
this.move(event);
|
|
35
|
+
this.buttons.delete(event.button ?? 0);
|
|
36
|
+
if (event.pointerId !== undefined) {
|
|
37
|
+
this.touches.delete(event.pointerId);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
wheel(event) {
|
|
41
|
+
this.wheelX += event.deltaX;
|
|
42
|
+
this.wheelY += event.deltaY;
|
|
43
|
+
}
|
|
44
|
+
blur() {
|
|
45
|
+
this.buttons.clear();
|
|
46
|
+
this.touches.clear();
|
|
47
|
+
}
|
|
48
|
+
snapshotData() {
|
|
49
|
+
const buttonMap = new Map();
|
|
50
|
+
for (const button of this.buttons) {
|
|
51
|
+
buttonMap.set(button, { down: true, pressed: false, released: false });
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
pointer: {
|
|
55
|
+
x: this.x,
|
|
56
|
+
y: this.y,
|
|
57
|
+
deltaX: this.deltaX,
|
|
58
|
+
deltaY: this.deltaY,
|
|
59
|
+
wheelX: this.wheelX,
|
|
60
|
+
wheelY: this.wheelY,
|
|
61
|
+
buttons: buttonMap,
|
|
62
|
+
touches: [...this.touches.values()]
|
|
63
|
+
},
|
|
64
|
+
previousPointerButtons: new Set(this.previousButtons)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
endFrame() {
|
|
68
|
+
this.previousButtons = new Set(this.buttons);
|
|
69
|
+
this.deltaX = 0;
|
|
70
|
+
this.deltaY = 0;
|
|
71
|
+
this.wheelX = 0;
|
|
72
|
+
this.wheelY = 0;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=PointerDevice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PointerDevice.js","sourceRoot":"","sources":["../../../../packages/input/src/PointerDevice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface VirtualJoystickConfig {
|
|
2
|
+
readonly center: readonly [number, number];
|
|
3
|
+
readonly radius: number;
|
|
4
|
+
readonly deadZone?: number;
|
|
5
|
+
readonly maxDistance?: number;
|
|
6
|
+
readonly fixed?: boolean;
|
|
7
|
+
readonly returnToCenter?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface VirtualTouchPoint {
|
|
10
|
+
readonly id: number;
|
|
11
|
+
readonly x: number;
|
|
12
|
+
readonly y: number;
|
|
13
|
+
}
|
|
14
|
+
export interface VirtualTouchJoystickSnapshot {
|
|
15
|
+
readonly source: "origin-master-touch-joystick-virtual-input-adapted";
|
|
16
|
+
readonly active: boolean;
|
|
17
|
+
readonly activeTouchId: number | null;
|
|
18
|
+
readonly center: readonly [number, number];
|
|
19
|
+
readonly stick: readonly [number, number];
|
|
20
|
+
readonly value: readonly [number, number];
|
|
21
|
+
readonly magnitude: number;
|
|
22
|
+
readonly deadZone: number;
|
|
23
|
+
readonly consumedTouches: number;
|
|
24
|
+
readonly evidence: {
|
|
25
|
+
readonly oldCodebasePort: true;
|
|
26
|
+
readonly virtualJoystick: boolean;
|
|
27
|
+
readonly deadZone: boolean;
|
|
28
|
+
readonly clampedMagnitude: boolean;
|
|
29
|
+
readonly returnToCenter: boolean;
|
|
30
|
+
readonly floatingCenter: boolean;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare class VirtualTouchJoystick {
|
|
34
|
+
private readonly initialCenter;
|
|
35
|
+
private readonly radius;
|
|
36
|
+
private readonly deadZone;
|
|
37
|
+
private readonly maxDistance;
|
|
38
|
+
private readonly fixed;
|
|
39
|
+
private readonly returnToCenter;
|
|
40
|
+
private centerRef;
|
|
41
|
+
private stickRef;
|
|
42
|
+
private valueRef;
|
|
43
|
+
private activeTouchId;
|
|
44
|
+
private active;
|
|
45
|
+
private consumedTouches;
|
|
46
|
+
constructor(config: VirtualJoystickConfig);
|
|
47
|
+
touchStart(touch: VirtualTouchPoint): boolean;
|
|
48
|
+
touchMove(touch: VirtualTouchPoint): boolean;
|
|
49
|
+
touchEnd(touch: VirtualTouchPoint): boolean;
|
|
50
|
+
snapshot(): VirtualTouchJoystickSnapshot;
|
|
51
|
+
private updateStick;
|
|
52
|
+
}
|
|
53
|
+
export declare function sampleVirtualTouchJoystickFixture(): {
|
|
54
|
+
readonly active: VirtualTouchJoystickSnapshot;
|
|
55
|
+
readonly released: VirtualTouchJoystickSnapshot;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=VirtualTouchControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualTouchControls.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/VirtualTouchControls.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,oDAAoD,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;QAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;QAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;QACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;KAClC,CAAC;CACH;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,EAAE,qBAAqB;IAWzC,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO;IAW7C,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO;IAM5C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO;IAY3C,QAAQ,IAAI,4BAA4B;IAsBxC,OAAO,CAAC,WAAW;CAqBpB;AAED,wBAAgB,iCAAiC,IAAI;IACnD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;CACjD,CAcA"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
export class VirtualTouchJoystick {
|
|
2
|
+
initialCenter;
|
|
3
|
+
radius;
|
|
4
|
+
deadZone;
|
|
5
|
+
maxDistance;
|
|
6
|
+
fixed;
|
|
7
|
+
returnToCenter;
|
|
8
|
+
centerRef;
|
|
9
|
+
stickRef;
|
|
10
|
+
valueRef = [0, 0];
|
|
11
|
+
activeTouchId = null;
|
|
12
|
+
active = false;
|
|
13
|
+
consumedTouches = 0;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.initialCenter = config.center;
|
|
16
|
+
this.centerRef = config.center;
|
|
17
|
+
this.stickRef = config.center;
|
|
18
|
+
this.radius = positive(config.radius, 64);
|
|
19
|
+
this.deadZone = clamp(config.deadZone ?? 0.15, 0, 0.95);
|
|
20
|
+
this.maxDistance = positive(config.maxDistance, this.radius * 0.8);
|
|
21
|
+
this.fixed = config.fixed ?? true;
|
|
22
|
+
this.returnToCenter = config.returnToCenter ?? true;
|
|
23
|
+
}
|
|
24
|
+
touchStart(touch) {
|
|
25
|
+
if (this.activeTouchId !== null)
|
|
26
|
+
return false;
|
|
27
|
+
if (distance([touch.x, touch.y], this.centerRef) > this.radius)
|
|
28
|
+
return false;
|
|
29
|
+
this.activeTouchId = touch.id;
|
|
30
|
+
this.active = true;
|
|
31
|
+
this.consumedTouches += 1;
|
|
32
|
+
if (!this.fixed)
|
|
33
|
+
this.centerRef = [touch.x, touch.y];
|
|
34
|
+
this.updateStick([touch.x, touch.y]);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
touchMove(touch) {
|
|
38
|
+
if (touch.id !== this.activeTouchId)
|
|
39
|
+
return false;
|
|
40
|
+
this.updateStick([touch.x, touch.y]);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
touchEnd(touch) {
|
|
44
|
+
if (touch.id !== this.activeTouchId)
|
|
45
|
+
return false;
|
|
46
|
+
this.activeTouchId = null;
|
|
47
|
+
this.active = false;
|
|
48
|
+
if (this.returnToCenter) {
|
|
49
|
+
this.stickRef = this.centerRef;
|
|
50
|
+
this.valueRef = [0, 0];
|
|
51
|
+
}
|
|
52
|
+
if (!this.fixed)
|
|
53
|
+
this.centerRef = this.initialCenter;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
snapshot() {
|
|
57
|
+
return {
|
|
58
|
+
source: "origin-master-touch-joystick-virtual-input-adapted",
|
|
59
|
+
active: this.active,
|
|
60
|
+
activeTouchId: this.activeTouchId,
|
|
61
|
+
center: [round(this.centerRef[0]), round(this.centerRef[1])],
|
|
62
|
+
stick: [round(this.stickRef[0]), round(this.stickRef[1])],
|
|
63
|
+
value: [round(this.valueRef[0]), round(this.valueRef[1])],
|
|
64
|
+
magnitude: round(Math.hypot(this.valueRef[0], this.valueRef[1])),
|
|
65
|
+
deadZone: this.deadZone,
|
|
66
|
+
consumedTouches: this.consumedTouches,
|
|
67
|
+
evidence: {
|
|
68
|
+
oldCodebasePort: true,
|
|
69
|
+
virtualJoystick: true,
|
|
70
|
+
deadZone: true,
|
|
71
|
+
clampedMagnitude: Math.hypot(this.valueRef[0], this.valueRef[1]) <= 1.0001,
|
|
72
|
+
returnToCenter: this.returnToCenter,
|
|
73
|
+
floatingCenter: !this.fixed
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
updateStick(touch) {
|
|
78
|
+
const dx = touch[0] - this.centerRef[0];
|
|
79
|
+
const dy = touch[1] - this.centerRef[1];
|
|
80
|
+
const rawDistance = Math.hypot(dx, dy);
|
|
81
|
+
if (rawDistance === 0) {
|
|
82
|
+
this.stickRef = this.centerRef;
|
|
83
|
+
this.valueRef = [0, 0];
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const clampedDistance = Math.min(rawDistance, this.maxDistance);
|
|
87
|
+
const nx = dx / rawDistance;
|
|
88
|
+
const ny = dy / rawDistance;
|
|
89
|
+
this.stickRef = [this.centerRef[0] + nx * clampedDistance, this.centerRef[1] + ny * clampedDistance];
|
|
90
|
+
const normalized = clampedDistance / this.maxDistance;
|
|
91
|
+
if (normalized < this.deadZone) {
|
|
92
|
+
this.valueRef = [0, 0];
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const remapped = Math.min(1, (normalized - this.deadZone) / (1 - this.deadZone));
|
|
96
|
+
this.valueRef = [nx * remapped, ny * remapped];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function sampleVirtualTouchJoystickFixture() {
|
|
100
|
+
const joystick = new VirtualTouchJoystick({
|
|
101
|
+
center: [96, 420],
|
|
102
|
+
radius: 72,
|
|
103
|
+
deadZone: 0.2,
|
|
104
|
+
maxDistance: 56,
|
|
105
|
+
fixed: false,
|
|
106
|
+
returnToCenter: true
|
|
107
|
+
});
|
|
108
|
+
joystick.touchStart({ id: 7, x: 90, y: 416 });
|
|
109
|
+
joystick.touchMove({ id: 7, x: 154, y: 376 });
|
|
110
|
+
const active = joystick.snapshot();
|
|
111
|
+
joystick.touchEnd({ id: 7, x: 154, y: 376 });
|
|
112
|
+
return { active, released: joystick.snapshot() };
|
|
113
|
+
}
|
|
114
|
+
function positive(value, fallback) {
|
|
115
|
+
const number = Number(value);
|
|
116
|
+
return Number.isFinite(number) && number > 0 ? number : fallback;
|
|
117
|
+
}
|
|
118
|
+
function distance(a, b) {
|
|
119
|
+
return Math.hypot(a[0] - b[0], a[1] - b[1]);
|
|
120
|
+
}
|
|
121
|
+
function clamp(value, min, max) {
|
|
122
|
+
return Math.max(min, Math.min(max, value));
|
|
123
|
+
}
|
|
124
|
+
function round(value) {
|
|
125
|
+
return Number(value.toFixed(4));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=VirtualTouchControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualTouchControls.js","sourceRoot":"","sources":["../../../../packages/input/src/VirtualTouchControls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export type A3DXRSessionMode = "inline" | "immersive-vr" | "immersive-ar";
|
|
2
|
+
export type A3DXRReferenceSpaceType = "viewer" | "local" | "local-floor" | "bounded-floor" | "unbounded";
|
|
3
|
+
export type A3DXRHandedness = "none" | "left" | "right";
|
|
4
|
+
export interface A3DXRSystemLike {
|
|
5
|
+
isSessionSupported?(mode: A3DXRSessionMode): Promise<boolean>;
|
|
6
|
+
requestSession(mode: A3DXRSessionMode, options?: A3DXRSessionInit): Promise<A3DXRSessionLike>;
|
|
7
|
+
}
|
|
8
|
+
export interface A3DXRSessionInit {
|
|
9
|
+
readonly requiredFeatures?: readonly string[];
|
|
10
|
+
readonly optionalFeatures?: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export interface A3DXRSessionLike {
|
|
13
|
+
readonly inputSources?: readonly A3DXRInputSourceLike[];
|
|
14
|
+
requestReferenceSpace?(type: A3DXRReferenceSpaceType): Promise<A3DXRReferenceSpaceLike>;
|
|
15
|
+
requestAnimationFrame?(callback: (time: number, frame: A3DXRFrameLike) => void): number;
|
|
16
|
+
end?(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export interface A3DXRInputSourceLike {
|
|
19
|
+
readonly handedness?: A3DXRHandedness;
|
|
20
|
+
readonly targetRayMode?: "gaze" | "tracked-pointer" | "screen";
|
|
21
|
+
readonly profiles?: readonly string[];
|
|
22
|
+
readonly targetRaySpace?: unknown;
|
|
23
|
+
readonly gripSpace?: unknown;
|
|
24
|
+
readonly gamepad?: {
|
|
25
|
+
readonly buttons?: readonly {
|
|
26
|
+
readonly pressed?: boolean;
|
|
27
|
+
readonly touched?: boolean;
|
|
28
|
+
readonly value?: number;
|
|
29
|
+
}[];
|
|
30
|
+
readonly axes?: readonly number[];
|
|
31
|
+
readonly hapticActuators?: readonly {
|
|
32
|
+
pulse?(intensity: number, duration: number): Promise<boolean> | boolean;
|
|
33
|
+
}[];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export interface A3DXRFrameLike {
|
|
37
|
+
getHitTestResults?(source: unknown): readonly A3DXRHitTestResultLike[];
|
|
38
|
+
getPose?(space: unknown, baseSpace: A3DXRReferenceSpaceLike): A3DXRPoseLike | undefined;
|
|
39
|
+
}
|
|
40
|
+
export interface A3DXRReferenceSpaceLike {
|
|
41
|
+
readonly type?: A3DXRReferenceSpaceType;
|
|
42
|
+
}
|
|
43
|
+
export interface A3DXRHitTestResultLike {
|
|
44
|
+
readonly position?: readonly [number, number, number];
|
|
45
|
+
readonly normal?: readonly [number, number, number];
|
|
46
|
+
}
|
|
47
|
+
export interface A3DXRPoseLike {
|
|
48
|
+
readonly transform?: {
|
|
49
|
+
readonly matrix?: readonly number[];
|
|
50
|
+
readonly position?: readonly [number, number, number];
|
|
51
|
+
readonly orientation?: readonly [number, number, number, number];
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface WebXRSessionControllerOptions {
|
|
55
|
+
readonly xr?: A3DXRSystemLike;
|
|
56
|
+
readonly mode?: A3DXRSessionMode;
|
|
57
|
+
readonly requiredFeatures?: readonly string[];
|
|
58
|
+
readonly optionalFeatures?: readonly string[];
|
|
59
|
+
readonly referenceSpace?: A3DXRReferenceSpaceType;
|
|
60
|
+
}
|
|
61
|
+
export interface WebXRControllerSample {
|
|
62
|
+
readonly handedness: A3DXRHandedness;
|
|
63
|
+
readonly targetRayMode: "gaze" | "tracked-pointer" | "screen";
|
|
64
|
+
readonly profiles: readonly string[];
|
|
65
|
+
readonly triggerPressed: boolean;
|
|
66
|
+
readonly squeezePressed: boolean;
|
|
67
|
+
readonly primaryValue: number;
|
|
68
|
+
readonly axes: readonly number[];
|
|
69
|
+
readonly targetRayMatrix: readonly number[] | null;
|
|
70
|
+
readonly gripMatrix: readonly number[] | null;
|
|
71
|
+
readonly hapticActuatorCount: number;
|
|
72
|
+
}
|
|
73
|
+
export interface WebXRHitTestSample {
|
|
74
|
+
readonly position: readonly [number, number, number];
|
|
75
|
+
readonly normal: readonly [number, number, number];
|
|
76
|
+
}
|
|
77
|
+
export interface WebXRFrameSample {
|
|
78
|
+
readonly mode: A3DXRSessionMode;
|
|
79
|
+
readonly referenceSpace: A3DXRReferenceSpaceType;
|
|
80
|
+
readonly active: boolean;
|
|
81
|
+
readonly controllerCount: number;
|
|
82
|
+
readonly controllers: readonly WebXRControllerSample[];
|
|
83
|
+
readonly hitTestCount: number;
|
|
84
|
+
readonly hitTests: readonly WebXRHitTestSample[];
|
|
85
|
+
}
|
|
86
|
+
export interface WebXRSessionStartResult {
|
|
87
|
+
readonly mode: A3DXRSessionMode;
|
|
88
|
+
readonly referenceSpace: A3DXRReferenceSpaceType;
|
|
89
|
+
readonly supported: boolean;
|
|
90
|
+
readonly started: boolean;
|
|
91
|
+
}
|
|
92
|
+
export declare class WebXRSessionController {
|
|
93
|
+
readonly mode: A3DXRSessionMode;
|
|
94
|
+
readonly requiredFeatures: readonly string[];
|
|
95
|
+
readonly optionalFeatures: readonly string[];
|
|
96
|
+
readonly referenceSpaceType: A3DXRReferenceSpaceType;
|
|
97
|
+
private readonly xr?;
|
|
98
|
+
private session;
|
|
99
|
+
private referenceSpace;
|
|
100
|
+
constructor(options?: WebXRSessionControllerOptions);
|
|
101
|
+
get active(): boolean;
|
|
102
|
+
isSupported(): Promise<boolean>;
|
|
103
|
+
start(): Promise<WebXRSessionStartResult>;
|
|
104
|
+
sampleFrame(frame?: A3DXRFrameLike, hitTestSource?: unknown): WebXRFrameSample;
|
|
105
|
+
end(): Promise<void>;
|
|
106
|
+
pulseHaptics(intensity?: number, duration?: number): Promise<number>;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=WebXRSessionController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebXRSessionController.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/WebXRSessionController.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,eAAe,GAAG,WAAW,CAAC;AACzG,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxD,qBAAqB,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACxF,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,CAAC;IACxF,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;YAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAClH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS;YAAE,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;SAAE,EAAE,CAAC;KACnH,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,sBAAsB,EAAE,CAAC;IACvE,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,uBAAuB,GAAG,aAAa,GAAG,SAAS,CAAC;CACzF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAClE,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAC9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,sBAAsB;IACjC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;IAErD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAkB;IACtC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,cAAc,CAAwC;gBAElD,OAAO,GAAE,6BAAkC;IAQvD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAM/B,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA+B/C,WAAW,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,gBAAgB;IAiBxE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpB,YAAY,CAAC,SAAS,SAAM,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC;CAYpE"}
|