iwer 0.0.1

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 (161) hide show
  1. package/build/iwer.js +4628 -0
  2. package/build/iwer.min.js +1 -0
  3. package/build/iwer.module.js +4591 -0
  4. package/build/iwer.module.min.js +1 -0
  5. package/lib/action/ActionPlayer.d.ts +75 -0
  6. package/lib/action/ActionPlayer.d.ts.map +1 -0
  7. package/lib/action/ActionPlayer.js +206 -0
  8. package/lib/action/ActionPlayer.js.map +1 -0
  9. package/lib/action/ActionRecorder.d.ts +59 -0
  10. package/lib/action/ActionRecorder.d.ts.map +1 -0
  11. package/lib/action/ActionRecorder.js +162 -0
  12. package/lib/action/ActionRecorder.js.map +1 -0
  13. package/lib/action/Capture.d.ts +3 -0
  14. package/lib/action/Capture.d.ts.map +1 -0
  15. package/lib/action/Capture.js +26907 -0
  16. package/lib/action/Capture.js.map +1 -0
  17. package/lib/device/XRController.d.ts +24 -0
  18. package/lib/device/XRController.d.ts.map +1 -0
  19. package/lib/device/XRController.js +82 -0
  20. package/lib/device/XRController.js.map +1 -0
  21. package/lib/device/XRDevice.d.ts +142 -0
  22. package/lib/device/XRDevice.d.ts.map +1 -0
  23. package/lib/device/XRDevice.js +370 -0
  24. package/lib/device/XRDevice.js.map +1 -0
  25. package/lib/device/XRHandInput.d.ts +44 -0
  26. package/lib/device/XRHandInput.d.ts.map +1 -0
  27. package/lib/device/XRHandInput.js +133 -0
  28. package/lib/device/XRHandInput.js.map +1 -0
  29. package/lib/device/XRTrackedInput.d.ts +22 -0
  30. package/lib/device/XRTrackedInput.d.ts.map +1 -0
  31. package/lib/device/XRTrackedInput.js +89 -0
  32. package/lib/device/XRTrackedInput.js.map +1 -0
  33. package/lib/device/configs/controller/meta.d.ts +6 -0
  34. package/lib/device/configs/controller/meta.d.ts.map +1 -0
  35. package/lib/device/configs/controller/meta.js +152 -0
  36. package/lib/device/configs/controller/meta.js.map +1 -0
  37. package/lib/device/configs/hand/pinch.d.ts +3 -0
  38. package/lib/device/configs/hand/pinch.d.ts.map +1 -0
  39. package/lib/device/configs/hand/pinch.js +237 -0
  40. package/lib/device/configs/hand/pinch.js.map +1 -0
  41. package/lib/device/configs/hand/point.d.ts +3 -0
  42. package/lib/device/configs/hand/point.d.ts.map +1 -0
  43. package/lib/device/configs/hand/point.js +236 -0
  44. package/lib/device/configs/hand/point.js.map +1 -0
  45. package/lib/device/configs/hand/relaxed.d.ts +3 -0
  46. package/lib/device/configs/hand/relaxed.d.ts.map +1 -0
  47. package/lib/device/configs/hand/relaxed.js +236 -0
  48. package/lib/device/configs/hand/relaxed.js.map +1 -0
  49. package/lib/device/configs/headset/meta.d.ts +6 -0
  50. package/lib/device/configs/headset/meta.d.ts.map +1 -0
  51. package/lib/device/configs/headset/meta.js +99 -0
  52. package/lib/device/configs/headset/meta.js.map +1 -0
  53. package/lib/device/controllers.d.ts +31 -0
  54. package/lib/device/controllers.d.ts.map +1 -0
  55. package/lib/device/controllers.js +8 -0
  56. package/lib/device/controllers.js.map +1 -0
  57. package/lib/events/XRInputSourceEvent.d.ts +16 -0
  58. package/lib/events/XRInputSourceEvent.d.ts.map +1 -0
  59. package/lib/events/XRInputSourceEvent.js +14 -0
  60. package/lib/events/XRInputSourceEvent.js.map +1 -0
  61. package/lib/events/XRInputSourcesChangeEvent.d.ts +18 -0
  62. package/lib/events/XRInputSourcesChangeEvent.d.ts.map +1 -0
  63. package/lib/events/XRInputSourcesChangeEvent.js +18 -0
  64. package/lib/events/XRInputSourcesChangeEvent.js.map +1 -0
  65. package/lib/events/XRReferenceSpaceEvent.d.ts +16 -0
  66. package/lib/events/XRReferenceSpaceEvent.d.ts.map +1 -0
  67. package/lib/events/XRReferenceSpaceEvent.js +11 -0
  68. package/lib/events/XRReferenceSpaceEvent.js.map +1 -0
  69. package/lib/events/XRSessionEvent.d.ts +13 -0
  70. package/lib/events/XRSessionEvent.d.ts.map +1 -0
  71. package/lib/events/XRSessionEvent.js +10 -0
  72. package/lib/events/XRSessionEvent.js.map +1 -0
  73. package/lib/frameloop/XRFrame.d.ts +28 -0
  74. package/lib/frameloop/XRFrame.d.ts.map +1 -0
  75. package/lib/frameloop/XRFrame.js +117 -0
  76. package/lib/frameloop/XRFrame.js.map +1 -0
  77. package/lib/gamepad/Gamepad.d.ts +72 -0
  78. package/lib/gamepad/Gamepad.d.ts.map +1 -0
  79. package/lib/gamepad/Gamepad.js +126 -0
  80. package/lib/gamepad/Gamepad.js.map +1 -0
  81. package/lib/index.d.ts +24 -0
  82. package/lib/index.d.ts.map +1 -0
  83. package/lib/index.js +36 -0
  84. package/lib/index.js.map +1 -0
  85. package/lib/initialization/XRSystem.d.ts +13 -0
  86. package/lib/initialization/XRSystem.d.ts.map +1 -0
  87. package/lib/initialization/XRSystem.js +65 -0
  88. package/lib/initialization/XRSystem.js.map +1 -0
  89. package/lib/input/XRHand.d.ts +31 -0
  90. package/lib/input/XRHand.d.ts.map +1 -0
  91. package/lib/input/XRHand.js +31 -0
  92. package/lib/input/XRHand.js.map +1 -0
  93. package/lib/input/XRInputSource.d.ts +37 -0
  94. package/lib/input/XRInputSource.d.ts.map +1 -0
  95. package/lib/input/XRInputSource.js +51 -0
  96. package/lib/input/XRInputSource.js.map +1 -0
  97. package/lib/input/XRInputSourceArray.d.ts +11 -0
  98. package/lib/input/XRInputSourceArray.d.ts.map +1 -0
  99. package/lib/input/XRInputSourceArray.js +17 -0
  100. package/lib/input/XRInputSourceArray.js.map +1 -0
  101. package/lib/layers/XRWebGLLayer.d.ts +31 -0
  102. package/lib/layers/XRWebGLLayer.d.ts.map +1 -0
  103. package/lib/layers/XRWebGLLayer.js +67 -0
  104. package/lib/layers/XRWebGLLayer.js.map +1 -0
  105. package/lib/pose/XRJointPose.d.ts +11 -0
  106. package/lib/pose/XRJointPose.d.ts.map +1 -0
  107. package/lib/pose/XRJointPose.js +12 -0
  108. package/lib/pose/XRJointPose.js.map +1 -0
  109. package/lib/pose/XRPose.d.ts +16 -0
  110. package/lib/pose/XRPose.d.ts.map +1 -0
  111. package/lib/pose/XRPose.js +24 -0
  112. package/lib/pose/XRPose.js.map +1 -0
  113. package/lib/pose/XRViewerPose.d.ts +12 -0
  114. package/lib/pose/XRViewerPose.d.ts.map +1 -0
  115. package/lib/pose/XRViewerPose.js +14 -0
  116. package/lib/pose/XRViewerPose.js.map +1 -0
  117. package/lib/primitives/XRRigidTransform.d.ts +17 -0
  118. package/lib/primitives/XRRigidTransform.d.ts.map +1 -0
  119. package/lib/primitives/XRRigidTransform.js +54 -0
  120. package/lib/primitives/XRRigidTransform.js.map +1 -0
  121. package/lib/session/XRRenderState.d.ts +22 -0
  122. package/lib/session/XRRenderState.d.ts.map +1 -0
  123. package/lib/session/XRRenderState.js +26 -0
  124. package/lib/session/XRRenderState.js.map +1 -0
  125. package/lib/session/XRSession.d.ts +103 -0
  126. package/lib/session/XRSession.d.ts.map +1 -0
  127. package/lib/session/XRSession.js +459 -0
  128. package/lib/session/XRSession.js.map +1 -0
  129. package/lib/spaces/XRJointSpace.d.ts +13 -0
  130. package/lib/spaces/XRJointSpace.d.ts.map +1 -0
  131. package/lib/spaces/XRJointSpace.js +12 -0
  132. package/lib/spaces/XRJointSpace.js.map +1 -0
  133. package/lib/spaces/XRReferenceSpace.d.ts +22 -0
  134. package/lib/spaces/XRReferenceSpace.d.ts.map +1 -0
  135. package/lib/spaces/XRReferenceSpace.js +42 -0
  136. package/lib/spaces/XRReferenceSpace.js.map +1 -0
  137. package/lib/spaces/XRSpace.d.ts +20 -0
  138. package/lib/spaces/XRSpace.d.ts.map +1 -0
  139. package/lib/spaces/XRSpace.js +45 -0
  140. package/lib/spaces/XRSpace.js.map +1 -0
  141. package/lib/utils/DOMPointReadOnly.d.ts +17 -0
  142. package/lib/utils/DOMPointReadOnly.d.ts.map +1 -0
  143. package/lib/utils/DOMPointReadOnly.js +26 -0
  144. package/lib/utils/DOMPointReadOnly.js.map +1 -0
  145. package/lib/utils/Math.d.ts +49 -0
  146. package/lib/utils/Math.d.ts.map +1 -0
  147. package/lib/utils/Math.js +129 -0
  148. package/lib/utils/Math.js.map +1 -0
  149. package/lib/version.d.ts +2 -0
  150. package/lib/version.d.ts.map +1 -0
  151. package/lib/version.js +2 -0
  152. package/lib/version.js.map +1 -0
  153. package/lib/views/XRView.d.ts +25 -0
  154. package/lib/views/XRView.d.ts.map +1 -0
  155. package/lib/views/XRView.js +39 -0
  156. package/lib/views/XRView.js.map +1 -0
  157. package/lib/views/XRViewport.d.ts +15 -0
  158. package/lib/views/XRViewport.d.ts.map +1 -0
  159. package/lib/views/XRViewport.js +19 -0
  160. package/lib/views/XRViewport.js.map +1 -0
  161. package/package.json +63 -0
@@ -0,0 +1,24 @@
1
+ import { GamepadConfig } from '../gamepad/Gamepad';
2
+ import { GlobalSpace } from '../spaces/XRSpace';
3
+ import { XRTrackedInput } from './XRTrackedInput';
4
+ import { XRHandedness } from '../input/XRInputSource';
5
+ import { mat4 } from 'gl-matrix';
6
+ export interface XRControllerConfig {
7
+ profileId: string;
8
+ fallbackProfileIds: string[];
9
+ layout: {
10
+ [handedness in XRHandedness]?: {
11
+ gamepad: GamepadConfig;
12
+ gripOffsetMatrix?: mat4;
13
+ numHapticActuators: number;
14
+ };
15
+ };
16
+ }
17
+ export declare class XRController extends XRTrackedInput {
18
+ constructor(controllerConfig: XRControllerConfig, handedness: XRHandedness, globalSpace: GlobalSpace);
19
+ updateButtonValue(id: string, value: number): void;
20
+ updateButtonTouch(id: string, touched: boolean): void;
21
+ updateAxis(id: string, type: 'x-axis' | 'y-axis', value: number): void;
22
+ updateAxes(id: string, x: number, y: number): void;
23
+ }
24
+ //# sourceMappingURL=XRController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XRController.d.ts","sourceRoot":"","sources":["../../src/device/XRController.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,aAAa,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAW,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAW,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACN,YAAY,EAGZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE;SACN,UAAU,IAAI,YAAY,CAAC,CAAC,EAAE;YAC9B,OAAO,EAAE,aAAa,CAAC;YACvB,gBAAgB,CAAC,EAAE,IAAI,CAAC;YACxB,kBAAkB,EAAE,MAAM,CAAC;SAC3B;KACD,CAAC;CACF;AAED,qBAAa,YAAa,SAAQ,cAAc;gBAE9C,gBAAgB,EAAE,kBAAkB,EACpC,UAAU,EAAE,YAAY,EACxB,WAAW,EAAE,WAAW;IA4BzB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAwB3C,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAU9C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM;IAkB/D,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;CAgB3C"}
@@ -0,0 +1,82 @@
1
+ import { PRIVATE as GAMEPAD_PRIVATE, Gamepad, } from '../gamepad/Gamepad';
2
+ import { XRSpace } from '../spaces/XRSpace';
3
+ import { PRIVATE, XRTrackedInput } from './XRTrackedInput';
4
+ import { XRInputSource, XRTargetRayMode, } from '../input/XRInputSource';
5
+ export class XRController extends XRTrackedInput {
6
+ constructor(controllerConfig, handedness, globalSpace) {
7
+ if (!controllerConfig.layout[handedness]) {
8
+ throw new DOMException('Handedness not supported', 'InvalidStateError');
9
+ }
10
+ const targetRaySpace = new XRSpace(globalSpace);
11
+ const gripSpace = controllerConfig.layout[handedness].gripOffsetMatrix
12
+ ? new XRSpace(targetRaySpace, controllerConfig.layout[handedness].gripOffsetMatrix)
13
+ : undefined;
14
+ const profiles = [
15
+ controllerConfig.profileId,
16
+ ...controllerConfig.fallbackProfileIds,
17
+ ];
18
+ const inputSource = new XRInputSource(handedness, XRTargetRayMode.TrackedPointer, profiles, targetRaySpace, new Gamepad(controllerConfig.layout[handedness].gamepad), gripSpace);
19
+ super(inputSource);
20
+ }
21
+ updateButtonValue(id, value) {
22
+ if (value > 1 || value < 0) {
23
+ console.warn(`Out-of-range value ${value} provided for button ${id}.`);
24
+ return;
25
+ }
26
+ const gamepadButton = this[PRIVATE].inputSource.gamepad[GAMEPAD_PRIVATE].buttonsMap[id];
27
+ if (gamepadButton) {
28
+ if (gamepadButton[GAMEPAD_PRIVATE].type === 'binary' &&
29
+ value != 1 &&
30
+ value != 0) {
31
+ console.warn(`Non-binary value ${value} provided for binary button ${id}.`);
32
+ return;
33
+ }
34
+ gamepadButton[GAMEPAD_PRIVATE].pendingValue = value;
35
+ }
36
+ else {
37
+ console.warn(`Current controller does not have button ${id}.`);
38
+ }
39
+ }
40
+ updateButtonTouch(id, touched) {
41
+ const gamepadButton = this[PRIVATE].inputSource.gamepad[GAMEPAD_PRIVATE].buttonsMap[id];
42
+ if (gamepadButton) {
43
+ gamepadButton[GAMEPAD_PRIVATE].touched = touched;
44
+ }
45
+ else {
46
+ console.warn(`Current controller does not have button ${id}.`);
47
+ }
48
+ }
49
+ updateAxis(id, type, value) {
50
+ if (value > 1 || value < -1) {
51
+ console.warn(`Out-of-range value ${value} provided for ${id} axes.`);
52
+ return;
53
+ }
54
+ const axesById = this[PRIVATE].inputSource.gamepad[GAMEPAD_PRIVATE].axesMap[id];
55
+ if (axesById) {
56
+ if (type === 'x-axis') {
57
+ axesById.x = value;
58
+ }
59
+ else if (type === 'y-axis') {
60
+ axesById.y = value;
61
+ }
62
+ }
63
+ else {
64
+ console.warn(`Current controller does not have ${id} axes.`);
65
+ }
66
+ }
67
+ updateAxes(id, x, y) {
68
+ if (x > 1 || x < -1 || y > 1 || y < -1) {
69
+ console.warn(`Out-of-range value x:${x}, y:${y} provided for ${id} axes.`);
70
+ return;
71
+ }
72
+ const axesById = this[PRIVATE].inputSource.gamepad[GAMEPAD_PRIVATE].axesMap[id];
73
+ if (axesById) {
74
+ axesById.x = x;
75
+ axesById.y = y;
76
+ }
77
+ else {
78
+ console.warn(`Current controller does not have ${id} axes.`);
79
+ }
80
+ }
81
+ }
82
+ //# sourceMappingURL=XRController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XRController.js","sourceRoot":"","sources":["../../src/device/XRController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import { GlobalSpace, XRSpace } from '../spaces/XRSpace';
2
+ import { Quaternion, Vector3 } from '../utils/Math';
3
+ import { XRController, XRControllerConfig } from './XRController';
4
+ import { XREye, XRView } from '../views/XRView';
5
+ import { XRHandInput } from './XRHandInput';
6
+ import { XRHandedness, XRInputSource } from '../input/XRInputSource';
7
+ import { XRWebGLLayer } from '../layers/XRWebGLLayer';
8
+ import { XRReferenceSpace } from '../spaces/XRReferenceSpace';
9
+ import { XRSessionMode, XRVisibilityState } from '../session/XRSession';
10
+ import { mat4 } from 'gl-matrix';
11
+ import { ActionPlayer } from '../action/ActionPlayer';
12
+ import { InputSchema } from '../action/ActionRecorder';
13
+ import { XRFrame } from '../frameloop/XRFrame';
14
+ import { XRTrackedInput } from './XRTrackedInput';
15
+ import { XRViewport } from '../views/XRViewport';
16
+ export declare enum WebXRFeatures {
17
+ Viewer = "viewer",
18
+ Local = "local",
19
+ LocalFloor = "local-floor",
20
+ BoundedFloor = "bounded-floor",
21
+ Unbounded = "unbounded",
22
+ DomOverlay = "dom-overlay",
23
+ Anchors = "anchors",
24
+ PlaneDetection = "plane-detection",
25
+ MeshDetection = "mesh-detection",
26
+ HitTest = "hit-test",
27
+ HandTracking = "hand-tracking",
28
+ DepthSensing = "depth-sensing"
29
+ }
30
+ export interface XRDeviceConfig {
31
+ name: string;
32
+ controllerConfig: XRControllerConfig | undefined;
33
+ supportedSessionModes: XRSessionMode[];
34
+ supportedFeatures: WebXRFeatures[];
35
+ supportedFrameRates: number[];
36
+ isSystemKeyboardSupported: boolean;
37
+ internalNominalFrameRate: number;
38
+ }
39
+ export interface XRDeviceOptions {
40
+ ipd: number;
41
+ fovy: number;
42
+ stereoEnabled: boolean;
43
+ headsetPosition: Vector3;
44
+ headsetQuaternion: Quaternion;
45
+ canvasContainer: HTMLDivElement;
46
+ }
47
+ export declare const PRIVATE: unique symbol;
48
+ /**
49
+ * XRDevice is not a standard API class outlined in the WebXR Device API Specifications
50
+ * Instead, it serves as an user-facing interface to control the emulated XR Device
51
+ */
52
+ export declare class XRDevice {
53
+ [PRIVATE]: {
54
+ name: string;
55
+ supportedSessionModes: string[];
56
+ supportedFeatures: string[];
57
+ supportedFrameRates: number[];
58
+ isSystemKeyboardSupported: boolean;
59
+ internalNominalFrameRate: number;
60
+ position: Vector3;
61
+ quaternion: Quaternion;
62
+ stereoEnabled: boolean;
63
+ ipd: number;
64
+ fovy: number;
65
+ controllers: {
66
+ [key in XRHandedness]?: XRController;
67
+ };
68
+ hands: {
69
+ [key in XRHandedness]?: XRHandInput;
70
+ };
71
+ primaryInputMode: 'controller' | 'hand';
72
+ pendingReferenceSpaceReset: boolean;
73
+ visibilityState: XRVisibilityState;
74
+ pendingVisibilityState: XRVisibilityState | null;
75
+ matrix: mat4;
76
+ globalSpace: GlobalSpace;
77
+ viewerSpace: XRReferenceSpace;
78
+ viewSpaces: {
79
+ [key in XREye]: XRSpace;
80
+ };
81
+ canvasData?: {
82
+ canvas: HTMLCanvasElement;
83
+ parent: HTMLElement | null;
84
+ width: number;
85
+ height: number;
86
+ };
87
+ canvasContainer: HTMLDivElement;
88
+ getViewport: (layer: XRWebGLLayer, view: XRView) => XRViewport;
89
+ updateViews: () => void;
90
+ onBaseLayerSet: (baseLayer: XRWebGLLayer | null) => void;
91
+ onSessionEnd: () => void;
92
+ onFrameStart: (frame: XRFrame) => void;
93
+ actionPlayer?: ActionPlayer;
94
+ };
95
+ constructor(deviceConfig: XRDeviceConfig, deviceOptions?: Partial<XRDeviceOptions>);
96
+ installRuntime(globalObject?: any): void;
97
+ get supportedSessionModes(): string[];
98
+ get supportedFeatures(): string[];
99
+ get supportedFrameRates(): number[];
100
+ get isSystemKeyboardSupported(): boolean;
101
+ get internalNominalFrameRate(): number;
102
+ get stereoEnabled(): boolean;
103
+ set stereoEnabled(value: boolean);
104
+ get ipd(): number;
105
+ set ipd(value: number);
106
+ get fovy(): number;
107
+ set fovy(value: number);
108
+ get position(): Vector3;
109
+ get quaternion(): Quaternion;
110
+ get viewerSpace(): XRReferenceSpace;
111
+ get viewSpaces(): {
112
+ none: XRSpace;
113
+ left: XRSpace;
114
+ right: XRSpace;
115
+ };
116
+ get controllers(): {
117
+ none?: XRController | undefined;
118
+ left?: XRController | undefined;
119
+ right?: XRController | undefined;
120
+ };
121
+ get hands(): {
122
+ none?: XRHandInput | undefined;
123
+ left?: XRHandInput | undefined;
124
+ right?: XRHandInput | undefined;
125
+ };
126
+ get primaryInputMode(): 'controller' | 'hand';
127
+ set primaryInputMode(mode: 'controller' | 'hand');
128
+ get activeInputs(): XRTrackedInput[];
129
+ get inputSources(): XRInputSource[];
130
+ get canvasContainer(): HTMLDivElement;
131
+ recenter(): void;
132
+ get visibilityState(): XRVisibilityState;
133
+ updateVisibilityState(state: XRVisibilityState): void;
134
+ createActionPlayer(refSpace: XRReferenceSpace, recording: {
135
+ schema: {
136
+ 0: number;
137
+ 1: InputSchema;
138
+ }[];
139
+ frames: any[];
140
+ }): ActionPlayer;
141
+ }
142
+ //# sourceMappingURL=XRDevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XRDevice.d.ts","sourceRoot":"","sources":["../../src/device/XRDevice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,370 @@
1
+ import { GlobalSpace, PRIVATE as XRSPACE_PRIVATE, XRSpace, } from '../spaces/XRSpace';
2
+ import { Quaternion, Vector3 } from '../utils/Math';
3
+ import { XRController } from './XRController';
4
+ import { XREye, XRView } from '../views/XRView';
5
+ import { XRHandInput, oculusHandConfig } from './XRHandInput';
6
+ import { XRHandedness, XRInputSource, XRInputSourceArray, } from '../input/XRInputSource';
7
+ import { XRLayer, XRWebGLLayer } from '../layers/XRWebGLLayer';
8
+ import { PRIVATE as XRREFERENCESPACE_PRIVATE, XRReferenceSpace, XRReferenceSpaceType, } from '../spaces/XRReferenceSpace';
9
+ import { PRIVATE as XRSESSION_PRIVATE, XRSession, XRVisibilityState, } from '../session/XRSession';
10
+ import { mat4, vec3 } from 'gl-matrix';
11
+ import { ActionPlayer } from '../action/ActionPlayer';
12
+ import { VERSION } from '../version';
13
+ import { XRFrame } from '../frameloop/XRFrame';
14
+ import { XRHand } from '../input/XRHand';
15
+ import { XRInputSourceEvent } from '../events/XRInputSourceEvent';
16
+ import { XRInputSourcesChangeEvent } from '../events/XRInputSourcesChangeEvent';
17
+ import { XRJointPose } from '../pose/XRJointPose';
18
+ import { XRJointSpace } from '../spaces/XRJointSpace';
19
+ import { XRPose } from '../pose/XRPose';
20
+ import { XRReferenceSpaceEvent } from '../events/XRReferenceSpaceEvent';
21
+ import { XRRenderState } from '../session/XRRenderState';
22
+ import { XRRigidTransform } from '../primitives/XRRigidTransform';
23
+ import { XRSessionEvent } from '../events/XRSessionEvent';
24
+ import { XRSystem } from '../initialization/XRSystem';
25
+ import { XRViewerPose } from '../pose/XRViewerPose';
26
+ import { XRViewport } from '../views/XRViewport';
27
+ export var WebXRFeatures;
28
+ (function (WebXRFeatures) {
29
+ WebXRFeatures["Viewer"] = "viewer";
30
+ WebXRFeatures["Local"] = "local";
31
+ WebXRFeatures["LocalFloor"] = "local-floor";
32
+ WebXRFeatures["BoundedFloor"] = "bounded-floor";
33
+ WebXRFeatures["Unbounded"] = "unbounded";
34
+ WebXRFeatures["DomOverlay"] = "dom-overlay";
35
+ WebXRFeatures["Anchors"] = "anchors";
36
+ WebXRFeatures["PlaneDetection"] = "plane-detection";
37
+ WebXRFeatures["MeshDetection"] = "mesh-detection";
38
+ WebXRFeatures["HitTest"] = "hit-test";
39
+ WebXRFeatures["HandTracking"] = "hand-tracking";
40
+ WebXRFeatures["DepthSensing"] = "depth-sensing";
41
+ })(WebXRFeatures || (WebXRFeatures = {}));
42
+ export const PRIVATE = Symbol('@immersive-web-emulation-runtime/xr-device');
43
+ const DEFAULTS = {
44
+ ipd: 0.063,
45
+ fovy: Math.PI / 2,
46
+ headsetPosition: new Vector3(0, 1.6, 0),
47
+ headsetQuaternion: new Quaternion(),
48
+ stereoEnabled: false,
49
+ };
50
+ /**
51
+ * XRDevice is not a standard API class outlined in the WebXR Device API Specifications
52
+ * Instead, it serves as an user-facing interface to control the emulated XR Device
53
+ */
54
+ export class XRDevice {
55
+ constructor(deviceConfig, deviceOptions = {}) {
56
+ var _a, _b, _c, _d, _e, _f;
57
+ const globalSpace = new GlobalSpace();
58
+ const viewerSpace = new XRReferenceSpace(XRReferenceSpaceType.Viewer, globalSpace);
59
+ const viewSpaces = {
60
+ [XREye.Left]: new XRSpace(viewerSpace),
61
+ [XREye.Right]: new XRSpace(viewerSpace),
62
+ [XREye.None]: new XRSpace(viewerSpace),
63
+ };
64
+ const controllerConfig = deviceConfig.controllerConfig;
65
+ const controllers = {};
66
+ if (controllerConfig) {
67
+ Object.values(XRHandedness).forEach((handedness) => {
68
+ if (controllerConfig.layout[handedness]) {
69
+ controllers[handedness] = new XRController(controllerConfig, handedness, globalSpace);
70
+ }
71
+ });
72
+ }
73
+ const hands = {
74
+ [XRHandedness.Left]: new XRHandInput(oculusHandConfig, XRHandedness.Left, globalSpace),
75
+ [XRHandedness.Right]: new XRHandInput(oculusHandConfig, XRHandedness.Right, globalSpace),
76
+ };
77
+ const canvasContainer = (_a = deviceOptions.canvasContainer) !== null && _a !== void 0 ? _a : document.createElement('div');
78
+ canvasContainer.dataset.webxr_runtime = `Immersive Web Emulation Runtime v${VERSION}`;
79
+ canvasContainer.style.position = 'fixed';
80
+ canvasContainer.style.width = '100%';
81
+ canvasContainer.style.height = '100%';
82
+ canvasContainer.style.top = '0';
83
+ canvasContainer.style.left = '0';
84
+ canvasContainer.style.display = 'flex';
85
+ canvasContainer.style.justifyContent = 'center';
86
+ canvasContainer.style.alignItems = 'center';
87
+ canvasContainer.style.overflow = 'hidden';
88
+ canvasContainer.style.zIndex = '999';
89
+ this[PRIVATE] = {
90
+ name: deviceConfig.name,
91
+ supportedSessionModes: deviceConfig.supportedSessionModes,
92
+ supportedFeatures: deviceConfig.supportedFeatures,
93
+ supportedFrameRates: deviceConfig.supportedFrameRates,
94
+ isSystemKeyboardSupported: deviceConfig.isSystemKeyboardSupported,
95
+ internalNominalFrameRate: deviceConfig.internalNominalFrameRate,
96
+ position: (_b = deviceOptions.headsetPosition) !== null && _b !== void 0 ? _b : DEFAULTS.headsetPosition.clone(),
97
+ quaternion: (_c = deviceOptions.headsetQuaternion) !== null && _c !== void 0 ? _c : DEFAULTS.headsetQuaternion.clone(),
98
+ stereoEnabled: (_d = deviceOptions.stereoEnabled) !== null && _d !== void 0 ? _d : DEFAULTS.stereoEnabled,
99
+ ipd: (_e = deviceOptions.ipd) !== null && _e !== void 0 ? _e : DEFAULTS.ipd,
100
+ fovy: (_f = deviceOptions.fovy) !== null && _f !== void 0 ? _f : DEFAULTS.fovy,
101
+ controllers,
102
+ hands,
103
+ primaryInputMode: 'controller',
104
+ pendingReferenceSpaceReset: false,
105
+ visibilityState: XRVisibilityState.Visible,
106
+ pendingVisibilityState: null,
107
+ matrix: mat4.create(),
108
+ globalSpace,
109
+ viewerSpace,
110
+ viewSpaces,
111
+ canvasContainer,
112
+ getViewport: (layer, view) => {
113
+ const canvas = layer.context.canvas;
114
+ const { width, height } = canvas;
115
+ switch (view.eye) {
116
+ case XREye.None:
117
+ return new XRViewport(0, 0, width, height);
118
+ case XREye.Left:
119
+ return new XRViewport(0, 0, this[PRIVATE].stereoEnabled ? width / 2 : width, height);
120
+ case XREye.Right:
121
+ return new XRViewport(width / 2, 0, this[PRIVATE].stereoEnabled ? width / 2 : 0, height);
122
+ }
123
+ },
124
+ updateViews: () => {
125
+ // update viewerSpace
126
+ const viewerSpace = this[PRIVATE].viewerSpace;
127
+ mat4.fromRotationTranslation(viewerSpace[XRSPACE_PRIVATE].offsetMatrix, this[PRIVATE].quaternion.quat, this[PRIVATE].position.vec3);
128
+ // update viewSpaces
129
+ mat4.fromTranslation(this[PRIVATE].viewSpaces[XREye.Left][XRSPACE_PRIVATE].offsetMatrix, vec3.fromValues(-this[PRIVATE].ipd / 2, 0, 0));
130
+ mat4.fromTranslation(this[PRIVATE].viewSpaces[XREye.Right][XRSPACE_PRIVATE].offsetMatrix, vec3.fromValues(this[PRIVATE].ipd / 2, 0, 0));
131
+ },
132
+ onBaseLayerSet: (baseLayer) => {
133
+ if (!baseLayer)
134
+ return;
135
+ // backup canvas data
136
+ const canvas = baseLayer.context.canvas;
137
+ if (canvas.parentElement !== this[PRIVATE].canvasContainer) {
138
+ this[PRIVATE].canvasData = {
139
+ canvas,
140
+ parent: canvas.parentElement,
141
+ width: canvas.width,
142
+ height: canvas.height,
143
+ };
144
+ this[PRIVATE].canvasContainer.appendChild(canvas);
145
+ document.body.appendChild(this[PRIVATE].canvasContainer);
146
+ }
147
+ canvas.width = window.innerWidth;
148
+ canvas.height = window.innerHeight;
149
+ },
150
+ onSessionEnd: () => {
151
+ if (this[PRIVATE].canvasData) {
152
+ const { canvas, parent, width, height } = this[PRIVATE].canvasData;
153
+ canvas.width = width;
154
+ canvas.height = height;
155
+ if (parent) {
156
+ parent.appendChild(canvas);
157
+ }
158
+ else {
159
+ this[PRIVATE].canvasContainer.removeChild(canvas);
160
+ }
161
+ document.body.removeChild(this[PRIVATE].canvasContainer);
162
+ window.dispatchEvent(new Event('resize'));
163
+ }
164
+ },
165
+ onFrameStart: (frame) => {
166
+ var _a;
167
+ if ((_a = this[PRIVATE].actionPlayer) === null || _a === void 0 ? void 0 : _a.playing) {
168
+ this[PRIVATE].actionPlayer.playFrame();
169
+ }
170
+ else {
171
+ const session = frame.session;
172
+ this[PRIVATE].updateViews();
173
+ if (this[PRIVATE].pendingVisibilityState) {
174
+ this[PRIVATE].visibilityState =
175
+ this[PRIVATE].pendingVisibilityState;
176
+ this[PRIVATE].pendingVisibilityState = null;
177
+ session.dispatchEvent(new XRSessionEvent('visibilitychange', { session }));
178
+ }
179
+ if (this[PRIVATE].visibilityState === XRVisibilityState.Visible) {
180
+ this.activeInputs.forEach((activeInput) => {
181
+ activeInput.onFrameStart(frame);
182
+ });
183
+ }
184
+ if (this[PRIVATE].pendingReferenceSpaceReset) {
185
+ session[XRSESSION_PRIVATE].referenceSpaces.forEach((referenceSpace) => {
186
+ switch (referenceSpace[XRREFERENCESPACE_PRIVATE].type) {
187
+ case XRReferenceSpaceType.Local:
188
+ case XRReferenceSpaceType.LocalFloor:
189
+ case XRReferenceSpaceType.BoundedFloor:
190
+ case XRReferenceSpaceType.Unbounded:
191
+ referenceSpace.dispatchEvent(new XRReferenceSpaceEvent('reset', { referenceSpace }));
192
+ break;
193
+ }
194
+ });
195
+ this[PRIVATE].pendingReferenceSpaceReset = false;
196
+ }
197
+ }
198
+ this[PRIVATE].updateViews();
199
+ },
200
+ };
201
+ this[PRIVATE].updateViews();
202
+ globalThis;
203
+ }
204
+ installRuntime(globalObject = globalThis) {
205
+ Object.defineProperty(WebGL2RenderingContext.prototype, 'makeXRCompatible', {
206
+ value: function () {
207
+ return new Promise((resolve, _reject) => {
208
+ resolve(true);
209
+ });
210
+ },
211
+ configurable: true,
212
+ });
213
+ Object.defineProperty(globalThis.navigator, 'xr', {
214
+ value: new XRSystem(this),
215
+ configurable: true,
216
+ });
217
+ globalObject['XRSystem'] = XRSystem;
218
+ globalObject['XRSession'] = XRSession;
219
+ globalObject['XRRenderState'] = XRRenderState;
220
+ globalObject['XRFrame'] = XRFrame;
221
+ globalObject['XRSpace'] = XRSpace;
222
+ globalObject['XRReferenceSpace'] = XRReferenceSpace;
223
+ globalObject['XRJointSpace'] = XRJointSpace;
224
+ globalObject['XRView'] = XRView;
225
+ globalObject['XRViewport'] = XRViewport;
226
+ globalObject['XRRigidTransform'] = XRRigidTransform;
227
+ globalObject['XRPose'] = XRPose;
228
+ globalObject['XRViewerPose'] = XRViewerPose;
229
+ globalObject['XRJointPose'] = XRJointPose;
230
+ globalObject['XRInputSource'] = XRInputSource;
231
+ globalObject['XRInputSourceArray'] = XRInputSourceArray;
232
+ globalObject['XRHand'] = XRHand;
233
+ globalObject['XRLayer'] = XRLayer;
234
+ globalObject['XRWebGLLayer'] = XRWebGLLayer;
235
+ globalObject['XRSessionEvent'] = XRSessionEvent;
236
+ globalObject['XRInputSourceEvent'] = XRInputSourceEvent;
237
+ globalObject['XRInputSourcesChangeEvent'] = XRInputSourcesChangeEvent;
238
+ globalObject['XRReferenceSpaceEvent'] = XRReferenceSpaceEvent;
239
+ }
240
+ get supportedSessionModes() {
241
+ return this[PRIVATE].supportedSessionModes;
242
+ }
243
+ get supportedFeatures() {
244
+ return this[PRIVATE].supportedFeatures;
245
+ }
246
+ get supportedFrameRates() {
247
+ return this[PRIVATE].supportedFrameRates;
248
+ }
249
+ get isSystemKeyboardSupported() {
250
+ return this[PRIVATE].isSystemKeyboardSupported;
251
+ }
252
+ get internalNominalFrameRate() {
253
+ return this[PRIVATE].internalNominalFrameRate;
254
+ }
255
+ get stereoEnabled() {
256
+ return this[PRIVATE].stereoEnabled;
257
+ }
258
+ set stereoEnabled(value) {
259
+ this[PRIVATE].stereoEnabled = value;
260
+ }
261
+ get ipd() {
262
+ return this[PRIVATE].ipd;
263
+ }
264
+ set ipd(value) {
265
+ this[PRIVATE].ipd = value;
266
+ }
267
+ get fovy() {
268
+ return this[PRIVATE].fovy;
269
+ }
270
+ set fovy(value) {
271
+ this[PRIVATE].fovy = value;
272
+ }
273
+ get position() {
274
+ return this[PRIVATE].position;
275
+ }
276
+ get quaternion() {
277
+ return this[PRIVATE].quaternion;
278
+ }
279
+ get viewerSpace() {
280
+ var _a;
281
+ if ((_a = this[PRIVATE].actionPlayer) === null || _a === void 0 ? void 0 : _a.playing) {
282
+ return this[PRIVATE].actionPlayer.viewerSpace;
283
+ }
284
+ else {
285
+ return this[PRIVATE].viewerSpace;
286
+ }
287
+ }
288
+ get viewSpaces() {
289
+ var _a;
290
+ if ((_a = this[PRIVATE].actionPlayer) === null || _a === void 0 ? void 0 : _a.playing) {
291
+ return this[PRIVATE].actionPlayer.viewSpaces;
292
+ }
293
+ else {
294
+ return this[PRIVATE].viewSpaces;
295
+ }
296
+ }
297
+ get controllers() {
298
+ return this[PRIVATE].controllers;
299
+ }
300
+ get hands() {
301
+ return this[PRIVATE].hands;
302
+ }
303
+ get primaryInputMode() {
304
+ return this[PRIVATE].primaryInputMode;
305
+ }
306
+ set primaryInputMode(mode) {
307
+ if (mode !== 'controller' && mode !== 'hand') {
308
+ console.warn('primary input mode can only be "controller" or "hand"');
309
+ return;
310
+ }
311
+ this[PRIVATE].primaryInputMode = mode;
312
+ }
313
+ get activeInputs() {
314
+ if (this[PRIVATE].visibilityState !== XRVisibilityState.Visible) {
315
+ return [];
316
+ }
317
+ const activeInputs = this[PRIVATE].primaryInputMode === 'controller'
318
+ ? Object.values(this[PRIVATE].controllers)
319
+ : Object.values(this[PRIVATE].hands);
320
+ return activeInputs.filter((input) => input.connected);
321
+ }
322
+ get inputSources() {
323
+ var _a;
324
+ if ((_a = this[PRIVATE].actionPlayer) === null || _a === void 0 ? void 0 : _a.playing) {
325
+ return this[PRIVATE].actionPlayer.inputSources;
326
+ }
327
+ else {
328
+ return this.activeInputs.map((input) => input.inputSource);
329
+ }
330
+ }
331
+ get canvasContainer() {
332
+ return this[PRIVATE].canvasContainer;
333
+ }
334
+ recenter() {
335
+ const deltaVec = new Vector3(-this.position.x, 0, -this.position.z);
336
+ const forward = new Vector3(0, 0, -1).applyQuaternion(this.quaternion);
337
+ forward.y = 0;
338
+ forward.normalize();
339
+ const angle = Math.atan2(forward.x, -forward.z);
340
+ const deltaQuat = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), angle);
341
+ this.position.add(deltaVec);
342
+ this.quaternion.multiply(deltaQuat);
343
+ [
344
+ ...Object.values(this[PRIVATE].controllers),
345
+ ...Object.values(this[PRIVATE].hands),
346
+ ].forEach((activeInput) => {
347
+ activeInput.position.add(deltaVec);
348
+ activeInput.quaternion.multiply(deltaQuat);
349
+ activeInput.position.applyQuaternion(deltaQuat);
350
+ });
351
+ this[PRIVATE].pendingReferenceSpaceReset = true;
352
+ }
353
+ get visibilityState() {
354
+ return this[PRIVATE].visibilityState;
355
+ }
356
+ // visibility state updates are queued until the XRSession produces frames
357
+ updateVisibilityState(state) {
358
+ if (!Object.values(XRVisibilityState).includes(state)) {
359
+ throw new DOMException('Invalid XRVisibilityState value', 'NotSupportedError');
360
+ }
361
+ if (state !== this[PRIVATE].visibilityState) {
362
+ this[PRIVATE].pendingVisibilityState = state;
363
+ }
364
+ }
365
+ createActionPlayer(refSpace, recording) {
366
+ this[PRIVATE].actionPlayer = new ActionPlayer(refSpace, recording, this[PRIVATE].ipd);
367
+ return this[PRIVATE].actionPlayer;
368
+ }
369
+ }
370
+ //# sourceMappingURL=XRDevice.js.map