@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.
Files changed (134) hide show
  1. package/README.md +17 -0
  2. package/dist/ActionMap.d.ts +44 -0
  3. package/dist/ActionMap.d.ts.map +1 -0
  4. package/dist/ActionMap.js +74 -0
  5. package/dist/ActionMap.js.map +1 -0
  6. package/dist/GamepadDevice.d.ts +17 -0
  7. package/dist/GamepadDevice.d.ts.map +1 -0
  8. package/dist/GamepadDevice.js +27 -0
  9. package/dist/GamepadDevice.js.map +1 -0
  10. package/dist/GamepadInput.d.ts +3 -0
  11. package/dist/GamepadInput.d.ts.map +1 -0
  12. package/dist/GamepadInput.js +2 -0
  13. package/dist/GamepadInput.js.map +1 -0
  14. package/dist/GestureControls.d.ts +3 -0
  15. package/dist/GestureControls.d.ts.map +1 -0
  16. package/dist/GestureControls.js +2 -0
  17. package/dist/GestureControls.js.map +1 -0
  18. package/dist/GestureHapticsFixtures.d.ts +57 -0
  19. package/dist/GestureHapticsFixtures.d.ts.map +1 -0
  20. package/dist/GestureHapticsFixtures.js +115 -0
  21. package/dist/GestureHapticsFixtures.js.map +1 -0
  22. package/dist/GestureRecognizer.d.ts +19 -0
  23. package/dist/GestureRecognizer.d.ts.map +1 -0
  24. package/dist/GestureRecognizer.js +32 -0
  25. package/dist/GestureRecognizer.js.map +1 -0
  26. package/dist/InputActionBindingFixtures.d.ts +44 -0
  27. package/dist/InputActionBindingFixtures.d.ts.map +1 -0
  28. package/dist/InputActionBindingFixtures.js +86 -0
  29. package/dist/InputActionBindingFixtures.js.map +1 -0
  30. package/dist/InputReplay.d.ts +97 -0
  31. package/dist/InputReplay.d.ts.map +1 -0
  32. package/dist/InputReplay.js +189 -0
  33. package/dist/InputReplay.js.map +1 -0
  34. package/dist/InputSnapshot.d.ts +44 -0
  35. package/dist/InputSnapshot.d.ts.map +1 -0
  36. package/dist/InputSnapshot.js +44 -0
  37. package/dist/InputSnapshot.js.map +1 -0
  38. package/dist/InputSystem.d.ts +24 -0
  39. package/dist/InputSystem.d.ts.map +1 -0
  40. package/dist/InputSystem.js +77 -0
  41. package/dist/InputSystem.js.map +1 -0
  42. package/dist/InteractionSystem.d.ts +42 -0
  43. package/dist/InteractionSystem.d.ts.map +1 -0
  44. package/dist/InteractionSystem.js +80 -0
  45. package/dist/InteractionSystem.js.map +1 -0
  46. package/dist/KeyboardDevice.d.ts +18 -0
  47. package/dist/KeyboardDevice.d.ts.map +1 -0
  48. package/dist/KeyboardDevice.js +22 -0
  49. package/dist/KeyboardDevice.js.map +1 -0
  50. package/dist/PickingRay.d.ts +10 -0
  51. package/dist/PickingRay.d.ts.map +1 -0
  52. package/dist/PickingRay.js +27 -0
  53. package/dist/PickingRay.js.map +1 -0
  54. package/dist/PointerDevice.d.ts +51 -0
  55. package/dist/PointerDevice.d.ts.map +1 -0
  56. package/dist/PointerDevice.js +75 -0
  57. package/dist/PointerDevice.js.map +1 -0
  58. package/dist/VirtualTouchControls.d.ts +57 -0
  59. package/dist/VirtualTouchControls.d.ts.map +1 -0
  60. package/dist/VirtualTouchControls.js +127 -0
  61. package/dist/VirtualTouchControls.js.map +1 -0
  62. package/dist/WebXRSessionController.d.ts +108 -0
  63. package/dist/WebXRSessionController.d.ts.map +1 -0
  64. package/dist/WebXRSessionController.js +143 -0
  65. package/dist/WebXRSessionController.js.map +1 -0
  66. package/dist/XRFixtures.d.ts +65 -0
  67. package/dist/XRFixtures.d.ts.map +1 -0
  68. package/dist/XRFixtures.js +136 -0
  69. package/dist/XRFixtures.js.map +1 -0
  70. package/dist/controls/CameraRig.d.ts +12 -0
  71. package/dist/controls/CameraRig.d.ts.map +1 -0
  72. package/dist/controls/CameraRig.js +32 -0
  73. package/dist/controls/CameraRig.js.map +1 -0
  74. package/dist/controls/ControlTypes.d.ts +17 -0
  75. package/dist/controls/ControlTypes.d.ts.map +1 -0
  76. package/dist/controls/ControlTypes.js +4 -0
  77. package/dist/controls/ControlTypes.js.map +1 -0
  78. package/dist/controls/EditorFlyControls.d.ts +20 -0
  79. package/dist/controls/EditorFlyControls.d.ts.map +1 -0
  80. package/dist/controls/EditorFlyControls.js +44 -0
  81. package/dist/controls/EditorFlyControls.js.map +1 -0
  82. package/dist/controls/FirstPersonControls.d.ts +22 -0
  83. package/dist/controls/FirstPersonControls.d.ts.map +1 -0
  84. package/dist/controls/FirstPersonControls.js +44 -0
  85. package/dist/controls/FirstPersonControls.js.map +1 -0
  86. package/dist/controls/OrbitControls.d.ts +49 -0
  87. package/dist/controls/OrbitControls.d.ts.map +1 -0
  88. package/dist/controls/OrbitControls.js +131 -0
  89. package/dist/controls/OrbitControls.js.map +1 -0
  90. package/dist/controls/PointerLockControls.d.ts +11 -0
  91. package/dist/controls/PointerLockControls.d.ts.map +1 -0
  92. package/dist/controls/PointerLockControls.js +19 -0
  93. package/dist/controls/PointerLockControls.js.map +1 -0
  94. package/dist/controls/SceneCameraAdapter.d.ts +10 -0
  95. package/dist/controls/SceneCameraAdapter.d.ts.map +1 -0
  96. package/dist/controls/SceneCameraAdapter.js +90 -0
  97. package/dist/controls/SceneCameraAdapter.js.map +1 -0
  98. package/dist/controls/ThirdPersonFollowControls.d.ts +20 -0
  99. package/dist/controls/ThirdPersonFollowControls.d.ts.map +1 -0
  100. package/dist/controls/ThirdPersonFollowControls.js +33 -0
  101. package/dist/controls/ThirdPersonFollowControls.js.map +1 -0
  102. package/dist/index.d.ts +47 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +25 -0
  105. package/dist/index.js.map +1 -0
  106. package/package.json +17 -0
  107. package/src/ActionMap.ts +94 -0
  108. package/src/GamepadDevice.ts +48 -0
  109. package/src/GamepadInput.ts +2 -0
  110. package/src/GestureControls.ts +2 -0
  111. package/src/GestureHapticsFixtures.ts +179 -0
  112. package/src/GestureRecognizer.ts +43 -0
  113. package/src/InputActionBindingFixtures.ts +121 -0
  114. package/src/InputReplay.ts +275 -0
  115. package/src/InputSnapshot.ts +92 -0
  116. package/src/InputSystem.ts +92 -0
  117. package/src/InteractionSystem.ts +119 -0
  118. package/src/KeyboardDevice.ts +32 -0
  119. package/src/PickingRay.ts +49 -0
  120. package/src/PointerDevice.ts +102 -0
  121. package/src/VirtualTouchControls.ts +169 -0
  122. package/src/WebXRSessionController.ts +248 -0
  123. package/src/XRFixtures.ts +203 -0
  124. package/src/controls/CameraRig.ts +38 -0
  125. package/src/controls/ControlTypes.ts +21 -0
  126. package/src/controls/EditorFlyControls.ts +55 -0
  127. package/src/controls/FirstPersonControls.ts +60 -0
  128. package/src/controls/OrbitControls.ts +168 -0
  129. package/src/controls/PointerLockControls.ts +24 -0
  130. package/src/controls/SceneCameraAdapter.ts +100 -0
  131. package/src/controls/ThirdPersonFollowControls.ts +42 -0
  132. package/src/index.ts +72 -0
  133. package/tests/input.test.ts +69 -0
  134. 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":"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"}