@iwsdk/core 0.5.3 → 1.0.0-rc.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 (233) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/asset/cache-manager.js.map +1 -1
  6. package/dist/asset/loaders/audio-loader.js.map +1 -1
  7. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  8. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  9. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  10. package/dist/asset/loaders/texture-loader.js.map +1 -1
  11. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  12. package/dist/audio/audio-pool.js.map +1 -1
  13. package/dist/audio/audio-system.js.map +1 -1
  14. package/dist/audio/audio-utils.js.map +1 -1
  15. package/dist/audio/audio.js.map +1 -1
  16. package/dist/camera/camera-source.js.map +1 -1
  17. package/dist/camera/camera-system.d.ts +7 -3
  18. package/dist/camera/camera-system.d.ts.map +1 -1
  19. package/dist/camera/camera-system.js +81 -50
  20. package/dist/camera/camera-system.js.map +1 -1
  21. package/dist/camera/camera-utils.d.ts +5 -0
  22. package/dist/camera/camera-utils.d.ts.map +1 -1
  23. package/dist/camera/camera-utils.js +8 -1
  24. package/dist/camera/camera-utils.js.map +1 -1
  25. package/dist/camera/types.js.map +1 -1
  26. package/dist/depth/depth-occludable.js.map +1 -1
  27. package/dist/depth/depth-sensing-system.d.ts +3 -0
  28. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  29. package/dist/depth/depth-sensing-system.js +55 -1
  30. package/dist/depth/depth-sensing-system.js.map +1 -1
  31. package/dist/depth/depth-textures.js.map +1 -1
  32. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  33. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  34. package/dist/ecs/builtin-components.js.map +1 -1
  35. package/dist/ecs/component-editor-metadata.js.map +1 -1
  36. package/dist/ecs/component-manifest.js.map +1 -1
  37. package/dist/ecs/entity.js.map +1 -1
  38. package/dist/ecs/system.js.map +1 -1
  39. package/dist/ecs/world.d.ts +2 -0
  40. package/dist/ecs/world.d.ts.map +1 -1
  41. package/dist/ecs/world.js +4 -0
  42. package/dist/ecs/world.js.map +1 -1
  43. package/dist/environment/dome-gradient.js.map +1 -1
  44. package/dist/environment/dome-texture.js.map +1 -1
  45. package/dist/environment/environment-system.js.map +1 -1
  46. package/dist/environment/gradient-environment.js.map +1 -1
  47. package/dist/environment/ibl-gradient.js.map +1 -1
  48. package/dist/environment/ibl-texture.js.map +1 -1
  49. package/dist/environment/scene-ar-environment.js.map +1 -1
  50. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  51. package/dist/environment-raycast/raycast-target.js.map +1 -1
  52. package/dist/grab/distance-grabbable.d.ts +5 -0
  53. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  54. package/dist/grab/distance-grabbable.js +5 -0
  55. package/dist/grab/distance-grabbable.js.map +1 -1
  56. package/dist/grab/grab-helpers.js.map +1 -1
  57. package/dist/grab/grab-system.js.map +1 -1
  58. package/dist/grab/grab-warnings.js.map +1 -1
  59. package/dist/grab/grabbed.js.map +1 -1
  60. package/dist/grab/handles.d.ts +6 -0
  61. package/dist/grab/handles.d.ts.map +1 -1
  62. package/dist/grab/handles.js +46 -12
  63. package/dist/grab/handles.js.map +1 -1
  64. package/dist/grab/index.js.map +1 -1
  65. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  66. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  67. package/dist/grab/one-hand-grabbable.js +5 -0
  68. package/dist/grab/one-hand-grabbable.js.map +1 -1
  69. package/dist/grab/pointer-events-patch.js.map +1 -1
  70. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  71. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  72. package/dist/grab/two-hands-grabbable.js +5 -0
  73. package/dist/grab/two-hands-grabbable.js.map +1 -1
  74. package/dist/index.js +4 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/browser-camera.js.map +1 -1
  77. package/dist/init/index.d.ts +2 -2
  78. package/dist/init/index.d.ts.map +1 -1
  79. package/dist/init/player-camera.js.map +1 -1
  80. package/dist/init/session-grant.d.ts +34 -0
  81. package/dist/init/session-grant.d.ts.map +1 -0
  82. package/dist/init/session-grant.js +89 -0
  83. package/dist/init/session-grant.js.map +1 -0
  84. package/dist/init/world-initializer.d.ts +87 -4
  85. package/dist/init/world-initializer.d.ts.map +1 -1
  86. package/dist/init/world-initializer.js +45 -41
  87. package/dist/init/world-initializer.js.map +1 -1
  88. package/dist/init/xr.d.ts +19 -0
  89. package/dist/init/xr.d.ts.map +1 -1
  90. package/dist/init/xr.js +136 -41
  91. package/dist/init/xr.js.map +1 -1
  92. package/dist/input/canvas-pointer-system.d.ts +2 -0
  93. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  94. package/dist/input/canvas-pointer-system.js +33 -13
  95. package/dist/input/canvas-pointer-system.js.map +1 -1
  96. package/dist/input/input-actions.js.map +1 -1
  97. package/dist/input/input-manager.js.map +1 -1
  98. package/dist/input/input-system.d.ts.map +1 -1
  99. package/dist/input/input-system.js +5 -2
  100. package/dist/input/input-system.js.map +1 -1
  101. package/dist/input/state-tags.js.map +1 -1
  102. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  103. package/dist/input/stateful-keyboard.js.map +1 -1
  104. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  105. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  106. package/dist/layers/xr-cylinder-layer.js +2 -1
  107. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  108. package/dist/layers/xr-layer-init.d.ts +19 -0
  109. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  110. package/dist/layers/xr-layer-init.js +20 -0
  111. package/dist/layers/xr-layer-init.js.map +1 -0
  112. package/dist/layers/xr-layer-state.js.map +1 -1
  113. package/dist/layers/xr-layer-system.d.ts +41 -1
  114. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  115. package/dist/layers/xr-layer-system.js +506 -132
  116. package/dist/layers/xr-layer-system.js.map +1 -1
  117. package/dist/layers/xr-layer-transform.d.ts +18 -0
  118. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  119. package/dist/layers/xr-layer-transform.js +115 -0
  120. package/dist/layers/xr-layer-transform.js.map +1 -0
  121. package/dist/layers/xr-quad-layer.d.ts +2 -1
  122. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  123. package/dist/layers/xr-quad-layer.js +2 -1
  124. package/dist/layers/xr-quad-layer.js.map +1 -1
  125. package/dist/level/level-component-applier.d.ts +2 -0
  126. package/dist/level/level-component-applier.d.ts.map +1 -1
  127. package/dist/level/level-component-applier.js +24 -5
  128. package/dist/level/level-component-applier.js.map +1 -1
  129. package/dist/level/level-player-rig.js.map +1 -1
  130. package/dist/level/level-root.js.map +1 -1
  131. package/dist/level/level-scene-environment.js.map +1 -1
  132. package/dist/level/level-scene-json-importer.js.map +1 -1
  133. package/dist/level/level-scene-material.js.map +1 -1
  134. package/dist/level/level-scene-object.js.map +1 -1
  135. package/dist/level/level-scene-primitive.js.map +1 -1
  136. package/dist/level/level-system.js.map +1 -1
  137. package/dist/level/level-tag.js.map +1 -1
  138. package/dist/lighting/light-binding.js.map +1 -1
  139. package/dist/lighting/light-components.js.map +1 -1
  140. package/dist/lighting/light-system.js.map +1 -1
  141. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  142. package/dist/locomotion/locomotion-environment.js.map +1 -1
  143. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  144. package/dist/locomotion/locomotion.js.map +1 -1
  145. package/dist/locomotion/materials/line.js.map +1 -1
  146. package/dist/locomotion/slide.js.map +1 -1
  147. package/dist/locomotion/teleport.js.map +1 -1
  148. package/dist/locomotion/turn.js.map +1 -1
  149. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  150. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  151. package/dist/mcp/ecs-debug-tools.js +113 -10
  152. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  153. package/dist/mcp/index.d.ts +1 -0
  154. package/dist/mcp/index.d.ts.map +1 -1
  155. package/dist/mcp/mcp-runtime.d.ts +2 -0
  156. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  157. package/dist/mcp/mcp-runtime.js +41 -0
  158. package/dist/mcp/mcp-runtime.js.map +1 -1
  159. package/dist/mcp/scene-tools.js.map +1 -1
  160. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  161. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  162. package/dist/mcp/ui-debug-tools.js +412 -0
  163. package/dist/mcp/ui-debug-tools.js.map +1 -0
  164. package/dist/physics/index.js +1 -1
  165. package/dist/physics/physics-runtime.d.ts +22 -0
  166. package/dist/physics/physics-runtime.d.ts.map +1 -0
  167. package/dist/physics/physics-runtime.js +423 -0
  168. package/dist/physics/physics-runtime.js.map +1 -0
  169. package/dist/physics/physics-system.d.ts +84 -108
  170. package/dist/physics/physics-system.d.ts.map +1 -1
  171. package/dist/physics/physics-system.js +686 -555
  172. package/dist/physics/physics-system.js.map +1 -1
  173. package/dist/physics/physics-transport.d.ts +20 -0
  174. package/dist/physics/physics-transport.d.ts.map +1 -0
  175. package/dist/physics/physics-transport.js +111 -0
  176. package/dist/physics/physics-transport.js.map +1 -0
  177. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  178. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  179. package/dist/physics/physics-worker-protocol.js +41 -0
  180. package/dist/physics/physics-worker-protocol.js.map +1 -0
  181. package/dist/physics/physics-worker-utils.d.ts +8 -0
  182. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  183. package/dist/physics/physics-worker-utils.js +12 -0
  184. package/dist/physics/physics-worker-utils.js.map +1 -0
  185. package/dist/physics/physics-worker.d.ts +8 -0
  186. package/dist/physics/physics-worker.d.ts.map +1 -0
  187. package/dist/physics/physics-worker.js +66 -0
  188. package/dist/physics/physics-worker.js.map +1 -0
  189. package/dist/physics/physicsBody.js.map +1 -1
  190. package/dist/physics/physicsManipulation.js.map +1 -1
  191. package/dist/physics/physicsShape.js.map +1 -1
  192. package/dist/physics/utils.js.map +1 -1
  193. package/dist/project/normalize.js +7 -1
  194. package/dist/project/normalize.js.map +1 -1
  195. package/dist/project/paths.js.map +1 -1
  196. package/dist/project/types.d.ts +7 -1
  197. package/dist/project/types.d.ts.map +1 -1
  198. package/dist/project/types.js.map +1 -1
  199. package/dist/project/validation.js +36 -2
  200. package/dist/project/validation.js.map +1 -1
  201. package/dist/runtime/three.js.map +1 -1
  202. package/dist/scene-understanding/anchor.js.map +1 -1
  203. package/dist/scene-understanding/mesh.js.map +1 -1
  204. package/dist/scene-understanding/plane.js.map +1 -1
  205. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  206. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  207. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  208. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  209. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  210. package/dist/transform/synced-euler.js.map +1 -1
  211. package/dist/transform/synced-quaternion.js.map +1 -1
  212. package/dist/transform/synced-vector3.js.map +1 -1
  213. package/dist/transform/transform-component.js.map +1 -1
  214. package/dist/transform/transform-utils.js.map +1 -1
  215. package/dist/transform/transform.js.map +1 -1
  216. package/dist/ui/document.js.map +1 -1
  217. package/dist/ui/follow-component.js.map +1 -1
  218. package/dist/ui/follow.d.ts.map +1 -1
  219. package/dist/ui/follow.js +0 -1
  220. package/dist/ui/follow.js.map +1 -1
  221. package/dist/ui/panel-components.js.map +1 -1
  222. package/dist/ui/screenspace-component.js.map +1 -1
  223. package/dist/ui/screenspace.js.map +1 -1
  224. package/dist/ui/ui.js.map +1 -1
  225. package/dist/ui/uikitml-asset.js.map +1 -1
  226. package/dist/ui/uikitml.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dist/visibility/visibility-component.js.map +1 -1
  232. package/dist/visibility/visibility.js.map +1 -1
  233. package/package.json +5 -5
package/dist/init/xr.js CHANGED
@@ -118,7 +118,7 @@ function normalizeReferenceSpec(spec) {
118
118
  };
119
119
  }
120
120
  function mergeXROptions(base, overrides) {
121
- var _a, _b, _c, _d, _e, _f, _g;
121
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
122
122
  const b = base !== null && base !== void 0 ? base : {};
123
123
  const o = overrides !== null && overrides !== void 0 ? overrides : {};
124
124
  const mergedFeatures = { ...((_a = b.features) !== null && _a !== void 0 ? _a : {}), ...((_b = o.features) !== null && _b !== void 0 ? _b : {}) };
@@ -127,6 +127,7 @@ function mergeXROptions(base, overrides) {
127
127
  referenceSpace: (_e = o.referenceSpace) !== null && _e !== void 0 ? _e : b.referenceSpace,
128
128
  features: Object.keys(mergedFeatures).length ? mergedFeatures : undefined,
129
129
  restoreCameraOnExit: (_g = (_f = o.restoreCameraOnExit) !== null && _f !== void 0 ? _f : b.restoreCameraOnExit) !== null && _g !== void 0 ? _g : true,
130
+ launchOnSessionGranted: (_j = (_h = o.launchOnSessionGranted) !== null && _h !== void 0 ? _h : b.launchOnSessionGranted) !== null && _j !== void 0 ? _j : false,
130
131
  };
131
132
  return merged;
132
133
  }
@@ -150,66 +151,160 @@ async function resolveReferenceSpaceType(session, preferred, fallbacks) {
150
151
  // If nothing worked, throw; caller will end the session.
151
152
  throw new Error('No supported reference space available');
152
153
  }
154
+ const pendingSessionAdoptions = new WeakMap();
155
+ async function safelyEndSession(session) {
156
+ try {
157
+ await session.end();
158
+ }
159
+ catch (_a) { }
160
+ }
153
161
  /**
154
- * Explicitly request a WebXR session with the given options.
162
+ * Adopt a native or emulated session into the world's renderer. Concurrent
163
+ * offer/request paths reconcile here: the first successfully adopted session
164
+ * wins and any later session is ended.
155
165
  *
156
- * @param world Target world.
157
- * @param options Partial overrides merged with {@link World.xrDefaults}.
158
- * @category Runtime
166
+ * @internal
159
167
  */
160
- function launchXR(world, options) {
161
- var _a, _b;
162
- if (world.xrEnabled === false) {
163
- throw new Error('XR is disabled for this world. Create it with an XR configuration instead of { xr: false } before calling launchXR().');
168
+ async function adoptXRSession(world, session, options, onSessionEnded) {
169
+ var _a;
170
+ if (world.session != null) {
171
+ if (world.session !== session) {
172
+ await safelyEndSession(session);
173
+ }
174
+ return world.session === session;
164
175
  }
165
- const merged = mergeXROptions(world.xrDefaults, options);
166
- const { sessionMode = SessionMode.ImmersiveVR } = merged;
167
- const refSpec = normalizeReferenceSpec(merged.referenceSpace);
168
- const sessionOptions = buildSessionInit(merged);
169
- const onSessionStart = async (session) => {
170
- session.addEventListener('end', onSessionEnd);
176
+ const existingPending = pendingSessionAdoptions.get(world);
177
+ if ((existingPending === null || existingPending === void 0 ? void 0 : existingPending.session) === session) {
178
+ return existingPending.promise;
179
+ }
180
+ const refSpec = normalizeReferenceSpec(options.referenceSpace);
181
+ let sessionEnded = false;
182
+ let sessionEndNotified = false;
183
+ const notifySessionEnded = () => {
184
+ if (sessionEndNotified) {
185
+ return;
186
+ }
187
+ sessionEndNotified = true;
188
+ onSessionEnded === null || onSessionEnded === void 0 ? void 0 : onSessionEnded();
189
+ };
190
+ const onEnd = () => {
191
+ sessionEnded = true;
192
+ session.removeEventListener('end', onEnd);
193
+ if (world.session === session) {
194
+ world.session = undefined;
195
+ }
196
+ notifySessionEnded();
197
+ };
198
+ session.addEventListener('end', onEnd);
199
+ while (true) {
200
+ const pending = pendingSessionAdoptions.get(world);
201
+ if (pending == null) {
202
+ break;
203
+ }
204
+ if (pending.session === session) {
205
+ session.removeEventListener('end', onEnd);
206
+ return pending.promise;
207
+ }
208
+ const adopted = await pending.promise;
209
+ if (sessionEnded) {
210
+ return false;
211
+ }
212
+ if (adopted || world.session != null) {
213
+ session.removeEventListener('end', onEnd);
214
+ await safelyEndSession(session);
215
+ return false;
216
+ }
217
+ // Another waiter may have claimed the now-free adoption slot before this
218
+ // continuation ran. Loop and reconcile with it instead of racing it.
219
+ }
220
+ const adoption = (async () => {
171
221
  try {
172
222
  const resolvedType = await resolveReferenceSpaceType(session, refSpec.type, refSpec.required ? [] : refSpec.fallbackOrder);
173
- // disable built-in occlusion
223
+ if (sessionEnded) {
224
+ return false;
225
+ }
174
226
  world.renderer.xr.getDepthSensingMesh = function () {
175
227
  return null;
176
228
  };
177
229
  world.renderer.xr.setReferenceSpaceType(resolvedType);
178
- if (merged.restoreCameraOnExit !== false) {
230
+ if (options.restoreCameraOnExit !== false) {
179
231
  attachBrowserCameraRestore(world.camera, session);
180
232
  }
181
233
  await world.renderer.xr.setSession(session);
234
+ if (sessionEnded) {
235
+ session.removeEventListener('end', onEnd);
236
+ return false;
237
+ }
238
+ if (world.session != null && world.session !== session) {
239
+ session.removeEventListener('end', onEnd);
240
+ await safelyEndSession(session);
241
+ return false;
242
+ }
182
243
  world.session = session;
244
+ return true;
183
245
  }
184
246
  catch (err) {
247
+ session.removeEventListener('end', onEnd);
185
248
  console.error('[XR] Failed to acquire reference space:', err);
186
- try {
187
- await session.end();
188
- }
189
- catch (_a) { }
249
+ await safelyEndSession(session);
250
+ notifySessionEnded();
251
+ return false;
190
252
  }
191
- };
192
- const onSessionEnd = () => {
193
- var _a;
194
- (_a = world.session) === null || _a === void 0 ? void 0 : _a.removeEventListener('end', onSessionEnd);
195
- world.session = undefined;
196
- };
197
- if (!world.session) {
198
- world.renderer.xr.enabled = true;
199
- Promise.resolve((_b = (_a = navigator.xr) === null || _a === void 0 ? void 0 : _a.requestSession) === null || _b === void 0 ? void 0 : _b.call(_a, sessionMode, sessionOptions))
200
- .then((session) => (session ? onSessionStart(session) : undefined))
201
- .catch((error) => {
202
- // requestSession rejects when the user denies permission, the device is
203
- // unavailable, or the requested features are unsupported. Without this
204
- // handler the rejection was unhandled (and silently swallowed); surface
205
- // it instead of leaving the caller with a half-enabled XR manager.
206
- console.error('[XR] Failed to start XR session:', error);
207
- });
208
- }
209
- else {
253
+ })();
254
+ pendingSessionAdoptions.set(world, { session, promise: adoption });
255
+ try {
256
+ return await adoption;
257
+ }
258
+ finally {
259
+ if (((_a = pendingSessionAdoptions.get(world)) === null || _a === void 0 ? void 0 : _a.promise) === adoption) {
260
+ pendingSessionAdoptions.delete(world);
261
+ }
262
+ }
263
+ }
264
+ /**
265
+ * Explicitly request a WebXR session with the given options.
266
+ *
267
+ * @param world Target world.
268
+ * @param options Partial overrides merged with {@link World.xrDefaults}.
269
+ * @category Runtime
270
+ */
271
+ function launchXR(world, options) {
272
+ var _a, _b;
273
+ if (world.xrEnabled === false) {
274
+ throw new Error('XR is disabled for this world. Create it with an XR configuration instead of { xr: false } before calling launchXR().');
275
+ }
276
+ if (world.session != null) {
210
277
  console.error('XRSession already exists');
278
+ return;
279
+ }
280
+ if (world.sessionRequestPending) {
281
+ return;
282
+ }
283
+ const merged = mergeXROptions(world.xrDefaults, options);
284
+ const { sessionMode = SessionMode.ImmersiveVR } = merged;
285
+ const sessionOptions = buildSessionInit(merged);
286
+ world.sessionRequestPending = true;
287
+ world.renderer.xr.enabled = true;
288
+ let request;
289
+ try {
290
+ request = (_b = (_a = navigator.xr) === null || _a === void 0 ? void 0 : _a.requestSession) === null || _b === void 0 ? void 0 : _b.call(_a, sessionMode, sessionOptions);
291
+ }
292
+ catch (error) {
293
+ world.sessionRequestPending = false;
294
+ console.error('[XR] Failed to start XR session:', error);
295
+ return;
211
296
  }
297
+ Promise.resolve(request)
298
+ .then((session) => session == null ? undefined : adoptXRSession(world, session, merged))
299
+ .catch((error) => {
300
+ // requestSession rejects when the user denies permission, the device is
301
+ // unavailable, or the requested features are unsupported.
302
+ console.error('[XR] Failed to start XR session:', error);
303
+ })
304
+ .finally(() => {
305
+ world.sessionRequestPending = false;
306
+ });
212
307
  }
213
308
 
214
- export { ReferenceSpaceType, SessionMode, buildSessionInit, launchXR, normalizeReferenceSpec, resolveReferenceSpaceType };
309
+ export { ReferenceSpaceType, SessionMode, adoptXRSession, buildSessionInit, launchXR, normalizeReferenceSpec, resolveReferenceSpaceType };
215
310
  //# sourceMappingURL=xr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xr.js","sources":["../../src/init/xr.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xr.js","sources":["../../src/init/xr.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { World } from '../ecs/world.js';\nimport { attachBrowserCameraRestore } from './browser-camera.js';\n\n/** WebXR session modes supported by IWSDK. @category Runtime */\nexport enum SessionMode {\n ImmersiveVR = 'immersive-vr',\n ImmersiveAR = 'immersive-ar',\n}\n\n/** Common WebXR reference spaces. @category Runtime */\nexport enum ReferenceSpaceType {\n BoundedFloor = 'bounded-floor',\n Local = 'local',\n LocalFloor = 'local-floor',\n Unbounded = 'unbounded',\n Viewer = 'viewer',\n}\n\n/**\n * Flag style for enabling a feature.\n * - `true` => request as optional\n * - `{ required: true }` => request as required\n * - `false`/`undefined` => do not request\n * @category Runtime\n */\nexport type FeatureFlag = boolean | { required?: boolean };\n\n/** Depth sensing feature configuration. @category Runtime */\nexport type DepthSensingFlag =\n | boolean\n | {\n required?: boolean;\n /** Depth usage preference. */\n usage?: 'cpu-optimized' | 'gpu-optimized';\n /** Depth data format preference. */\n format?: 'luminance-alpha' | 'float32';\n };\n\n/** Structured feature flags supported by IWSDK. @category Runtime */\nexport type XRFeatureOptions = {\n handTracking?: FeatureFlag;\n anchors?: FeatureFlag;\n hitTest?: FeatureFlag;\n planeDetection?: FeatureFlag;\n meshDetection?: FeatureFlag;\n depthSensing?: DepthSensingFlag;\n /**\n * WebXR Layers. Defaults to optional even if not set, to maximize success.\n * You may set `{ required: true }` to require layers.\n */\n layers?: FeatureFlag;\n unbounded?: FeatureFlag;\n};\n\n/** Reference space configuration. @category Runtime */\nexport type ReferenceSpaceSpec =\n | ReferenceSpaceType\n | {\n /** Preferred reference space type. @defaultValue 'local-floor' */\n type?: ReferenceSpaceType;\n /** If true, do not fall back to other spaces on failure. */\n required?: boolean;\n /**\n * Fallback order if preferred type is unavailable.\n * @defaultValue ['local', 'viewer']\n */\n fallbackOrder?: ReferenceSpaceType[];\n };\n\n/** Options for launching an XR session. @category Runtime */\nexport type XROptions = {\n /** Session mode to request. @defaultValue SessionMode.ImmersiveVR */\n sessionMode?: SessionMode;\n /** Reference space policy (preferred + fallback). */\n referenceSpace?: ReferenceSpaceSpec;\n /** Structured feature flags; avoids raw string arrays. */\n features?: XRFeatureOptions;\n /**\n * Auto-restore `world.camera` to its pre-XR local transform and\n * projection when the session ends. Without this, `WebGLRenderer.xr`\n * leaves the camera at the last head pose and the 2D fallback view is\n * inside-the-head until the user re-applies a camera setup. Restore is\n * deferred one rAF so `WebXRManager` finishes tearing down on the\n * end-tick before the camera is overwritten.\n * @defaultValue true\n */\n restoreCameraOnExit?: boolean;\n /**\n * Launch XR when the browser grants an immersive session through an external\n * entry point such as a headset deep link. The listener is armed before\n * asynchronous world initialization so an early grant is not lost.\n * This takes precedence over `offer`; IWSDK does not run both native grant\n * and offer flows for the same world.\n * @defaultValue false\n */\n launchOnSessionGranted?: boolean;\n};\n\n/** Default optional features appended to requests/offers. */\nconst defaultOffers = ['local-floor', 'bounded-floor', 'layers'] as const;\n\n/** Normalize a {@link FeatureFlag} to `{ required?: boolean } | undefined`. */\nfunction normalizeFlag(flag?: FeatureFlag): { required?: boolean } | undefined {\n if (flag === undefined || flag === false) {\n return undefined;\n }\n if (flag === true) {\n return {};\n }\n return { required: !!flag.required };\n}\n\nfunction isDepthFlagObject(\n flag: DepthSensingFlag | undefined,\n): flag is Exclude<DepthSensingFlag, boolean | undefined> {\n return typeof flag === 'object';\n}\n\n/** Build `XRSessionInit` from structured feature flags. */\nexport function buildSessionInit(opts: XROptions): XRSessionInit {\n const requiredFeatures: string[] = [];\n // Always offer helpful optional features by default\n const optionalFeatures: string[] = Array.from(new Set(defaultOffers));\n\n const f = opts.features ?? {};\n\n const map: Record<keyof XRFeatureOptions, string> = {\n handTracking: 'hand-tracking',\n anchors: 'anchors',\n hitTest: 'hit-test',\n planeDetection: 'plane-detection',\n meshDetection: 'mesh-detection',\n depthSensing: 'depth-sensing',\n layers: 'layers',\n unbounded: 'unbounded',\n } as const;\n\n const push = (\n key: keyof XRFeatureOptions,\n normalized: { required?: boolean } | undefined,\n ) => {\n if (!normalized) {\n return;\n }\n const token = map[key];\n if (normalized.required) {\n requiredFeatures.push(token);\n } else {\n optionalFeatures.push(token);\n }\n };\n\n // Simple flags\n push('handTracking', normalizeFlag(f.handTracking));\n push('anchors', normalizeFlag(f.anchors));\n push('hitTest', normalizeFlag(f.hitTest));\n push('planeDetection', normalizeFlag(f.planeDetection));\n push('meshDetection', normalizeFlag(f.meshDetection));\n push('layers', normalizeFlag(f.layers));\n push('unbounded', normalizeFlag(f.unbounded));\n\n // Depth sensing (may include preferences)\n if (f.depthSensing) {\n const normalized = normalizeFlag(\n isDepthFlagObject(f.depthSensing)\n ? { required: f.depthSensing.required }\n : f.depthSensing,\n );\n push('depthSensing', normalized);\n }\n\n const sessionInit: XRSessionInit = {\n requiredFeatures: Array.from(new Set(requiredFeatures)),\n optionalFeatures: Array.from(new Set(optionalFeatures)),\n };\n\n if (isDepthFlagObject(f.depthSensing)) {\n const usage = f.depthSensing.usage\n ? ([f.depthSensing.usage] as XRDepthUsage[])\n : undefined;\n const format = f.depthSensing.format\n ? ([f.depthSensing.format] as XRDepthDataFormat[])\n : undefined;\n // Use DOM XRDepthStateInit typing where available\n (\n sessionInit as XRSessionInit & {\n depthSensing?: XRDepthStateInit;\n }\n ).depthSensing = {\n ...(usage ? { usagePreference: usage } : {}),\n ...(format ? { dataFormatPreference: format } : {}),\n } as XRDepthStateInit;\n }\n\n return sessionInit;\n}\n\nexport function normalizeReferenceSpec(\n spec?: ReferenceSpaceSpec,\n): Required<Exclude<ReferenceSpaceSpec, ReferenceSpaceType>> {\n if (!spec || typeof spec === 'string') {\n return {\n type: (spec as ReferenceSpaceType) ?? ReferenceSpaceType.LocalFloor,\n required: false,\n fallbackOrder: [ReferenceSpaceType.Local, ReferenceSpaceType.Viewer],\n };\n }\n return {\n type: spec.type ?? ReferenceSpaceType.LocalFloor,\n required: !!spec.required,\n fallbackOrder: spec.fallbackOrder ?? [\n ReferenceSpaceType.Local,\n ReferenceSpaceType.Viewer,\n ],\n };\n}\n\nfunction mergeXROptions(\n base: XROptions | undefined,\n overrides?: Partial<XROptions>,\n): XROptions {\n const b = base ?? {};\n const o = overrides ?? {};\n const mergedFeatures = { ...(b.features ?? {}), ...(o.features ?? {}) };\n const merged: XROptions = {\n sessionMode: o.sessionMode ?? b.sessionMode ?? SessionMode.ImmersiveVR,\n referenceSpace: o.referenceSpace ?? b.referenceSpace,\n features: Object.keys(mergedFeatures).length ? mergedFeatures : undefined,\n restoreCameraOnExit: o.restoreCameraOnExit ?? b.restoreCameraOnExit ?? true,\n launchOnSessionGranted:\n o.launchOnSessionGranted ?? b.launchOnSessionGranted ?? false,\n };\n return merged;\n}\n\nexport async function resolveReferenceSpaceType(\n session: XRSession,\n preferred: ReferenceSpaceType,\n fallbacks: ReferenceSpaceType[],\n): Promise<ReferenceSpaceType> {\n const candidates: ReferenceSpaceType[] = [];\n for (const t of [preferred, ...fallbacks]) {\n if (!candidates.includes(t)) {\n candidates.push(t);\n }\n }\n\n for (const type of candidates) {\n try {\n // Probe support; three.js will request again using the resolved type.\n await session.requestReferenceSpace(\n type as unknown as XRReferenceSpaceType,\n );\n return type;\n } catch (_err) {\n // continue\n }\n }\n // If nothing worked, throw; caller will end the session.\n throw new Error('No supported reference space available');\n}\n\ntype SessionEndedCallback = () => void;\n\ntype PendingSessionAdoption = {\n session: XRSession;\n promise: Promise<boolean>;\n};\n\nconst pendingSessionAdoptions = new WeakMap<World, PendingSessionAdoption>();\n\nasync function safelyEndSession(session: XRSession): Promise<void> {\n try {\n await session.end();\n } catch {}\n}\n\n/**\n * Adopt a native or emulated session into the world's renderer. Concurrent\n * offer/request paths reconcile here: the first successfully adopted session\n * wins and any later session is ended.\n *\n * @internal\n */\nexport async function adoptXRSession(\n world: World,\n session: XRSession,\n options: XROptions,\n onSessionEnded?: SessionEndedCallback,\n): Promise<boolean> {\n if (world.session != null) {\n if (world.session !== session) {\n await safelyEndSession(session);\n }\n return world.session === session;\n }\n\n const existingPending = pendingSessionAdoptions.get(world);\n if (existingPending?.session === session) {\n return existingPending.promise;\n }\n\n const refSpec = normalizeReferenceSpec(options.referenceSpace);\n let sessionEnded = false;\n let sessionEndNotified = false;\n const notifySessionEnded = () => {\n if (sessionEndNotified) {\n return;\n }\n sessionEndNotified = true;\n onSessionEnded?.();\n };\n const onEnd = () => {\n sessionEnded = true;\n session.removeEventListener('end', onEnd);\n if (world.session === session) {\n world.session = undefined;\n }\n notifySessionEnded();\n };\n session.addEventListener('end', onEnd);\n\n while (true) {\n const pending = pendingSessionAdoptions.get(world);\n if (pending == null) {\n break;\n }\n if (pending.session === session) {\n session.removeEventListener('end', onEnd);\n return pending.promise;\n }\n const adopted = await pending.promise;\n if (sessionEnded) {\n return false;\n }\n if (adopted || world.session != null) {\n session.removeEventListener('end', onEnd);\n await safelyEndSession(session);\n return false;\n }\n // Another waiter may have claimed the now-free adoption slot before this\n // continuation ran. Loop and reconcile with it instead of racing it.\n }\n\n const adoption = (async (): Promise<boolean> => {\n try {\n const resolvedType = await resolveReferenceSpaceType(\n session,\n refSpec.type,\n refSpec.required ? [] : refSpec.fallbackOrder,\n );\n if (sessionEnded) {\n return false;\n }\n world.renderer.xr.getDepthSensingMesh = function () {\n return null;\n };\n world.renderer.xr.setReferenceSpaceType(\n resolvedType as unknown as XRReferenceSpaceType,\n );\n if (options.restoreCameraOnExit !== false) {\n attachBrowserCameraRestore(world.camera, session);\n }\n await world.renderer.xr.setSession(session);\n if (sessionEnded) {\n session.removeEventListener('end', onEnd);\n return false;\n }\n if (world.session != null && world.session !== session) {\n session.removeEventListener('end', onEnd);\n await safelyEndSession(session);\n return false;\n }\n world.session = session;\n return true;\n } catch (err) {\n session.removeEventListener('end', onEnd);\n console.error('[XR] Failed to acquire reference space:', err);\n await safelyEndSession(session);\n notifySessionEnded();\n return false;\n }\n })();\n pendingSessionAdoptions.set(world, { session, promise: adoption });\n try {\n return await adoption;\n } finally {\n if (pendingSessionAdoptions.get(world)?.promise === adoption) {\n pendingSessionAdoptions.delete(world);\n }\n }\n}\n\n/**\n * Explicitly request a WebXR session with the given options.\n *\n * @param world Target world.\n * @param options Partial overrides merged with {@link World.xrDefaults}.\n * @category Runtime\n */\nexport function launchXR(world: World, options?: Partial<XROptions>) {\n if (world.xrEnabled === false) {\n throw new Error(\n 'XR is disabled for this world. Create it with an XR configuration instead of { xr: false } before calling launchXR().',\n );\n }\n\n if (world.session != null) {\n console.error('XRSession already exists');\n return;\n }\n if (world.sessionRequestPending) {\n return;\n }\n\n const merged = mergeXROptions(world.xrDefaults, options);\n const { sessionMode = SessionMode.ImmersiveVR } = merged;\n const sessionOptions = buildSessionInit(merged);\n\n world.sessionRequestPending = true;\n world.renderer.xr.enabled = true;\n let request: Promise<XRSession> | undefined;\n try {\n request = navigator.xr?.requestSession?.(sessionMode, sessionOptions);\n } catch (error) {\n world.sessionRequestPending = false;\n console.error('[XR] Failed to start XR session:', error);\n return;\n }\n\n Promise.resolve(request)\n .then((session) =>\n session == null ? undefined : adoptXRSession(world, session, merged),\n )\n .catch((error) => {\n // requestSession rejects when the user denies permission, the device is\n // unavailable, or the requested features are unsupported.\n console.error('[XR] Failed to start XR session:', error);\n })\n .finally(() => {\n world.sessionRequestPending = false;\n });\n}\n"],"names":[],"mappings":"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"}
@@ -33,8 +33,10 @@ export declare class CanvasPointerSystem extends CanvasPointerSystem_base {
33
33
  private readonly canvasPointerRoot;
34
34
  private readonly canvasPointerTraversalMarker;
35
35
  private readonly canvasPointerDescendants;
36
+ private xrSessionActive;
36
37
  init(): void;
37
38
  update(): void;
39
+ private syncHtmlHandler;
38
40
  private prepareCanvasPointerRoot;
39
41
  private pushDescendants;
40
42
  private clearCanvasPointerRoot;
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-pointer-system.d.ts","sourceRoot":"","sources":["../../src/input/canvas-pointer-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;;IAQxC,gFAAgF;;;;;IAEhF,kFAAkF;;;;;;IAFlF,gFAAgF;;;;;IAEhF,kFAAkF;;;;;;AALtF,qBAAa,mBAAoB,SAAQ,wBAQxC;IACC,OAAO,CAAC,WAAW,CAAC,CAGlB;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAkB;IAC/D,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAkB;IAE3D,IAAI,IAAI,IAAI;IAsBZ,MAAM,IAAI,IAAI;IAWd,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"canvas-pointer-system.d.ts","sourceRoot":"","sources":["../../src/input/canvas-pointer-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;;IAQxC,gFAAgF;;;;;IAEhF,kFAAkF;;;;;;IAFlF,gFAAgF;;;;;IAEhF,kFAAkF;;;;;;AALtF,qBAAa,mBAAoB,SAAQ,wBAQxC;IACC,OAAO,CAAC,WAAW,CAAC,CAGlB;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAkB;IAC/D,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAkB;IAC3D,OAAO,CAAC,eAAe,CAAS;IAEhC,IAAI,IAAI,IAAI;IA2BZ,MAAM,IAAI,IAAI;IAQd,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,IAAI,IAAI;CAOhB"}
@@ -1,4 +1,6 @@
1
+ import { isObjectTreeVisible } from '@iwsdk/xr-input';
1
2
  import { forwardHtmlEvents } from '@pmndrs/pointer-events';
3
+ import { effect } from '@preact/signals-core';
2
4
  import { Types } from 'elics';
3
5
  import { createSystem } from '../ecs/system.js';
4
6
  import '../runtime/three.js';
@@ -21,33 +23,51 @@ class CanvasPointerSystem extends createSystem({}, {
21
23
  this.canvasPointerRoot = new Object3D();
22
24
  this.canvasPointerTraversalMarker = new Object3D();
23
25
  this.canvasPointerDescendants = [];
26
+ this.xrSessionActive = false;
24
27
  }
25
28
  init() {
26
29
  // @pmndrs/pointer-events returns early for childless objects before
27
30
  // reading interactableDescendants, so keep this synthetic root traversable.
28
31
  this.canvasPointerRoot.add(this.canvasPointerTraversalMarker);
29
- this.cleanupFuncs.push(this.config.enabled.subscribe((enabled) => {
30
- var _a;
31
- (_a = this.htmlHandler) === null || _a === void 0 ? void 0 : _a.destroy();
32
- this.clearCanvasPointerRoot();
33
- if (enabled) {
34
- this.prepareCanvasPointerRoot();
35
- this.htmlHandler = forwardHtmlEvents(this.renderer.domElement, () => this.camera, this.canvasPointerRoot);
36
- }
37
- else {
38
- this.htmlHandler = undefined;
39
- }
32
+ this.xrSessionActive =
33
+ this.world.session != null || this.xrManager.getSession() != null;
34
+ const onSessionStart = () => {
35
+ this.xrSessionActive = true;
36
+ this.syncHtmlHandler();
37
+ };
38
+ const onSessionEnd = () => {
39
+ this.xrSessionActive = false;
40
+ this.syncHtmlHandler();
41
+ };
42
+ this.xrManager.addEventListener('sessionstart', onSessionStart);
43
+ this.xrManager.addEventListener('sessionend', onSessionEnd);
44
+ this.cleanupFuncs.push(() => this.xrManager.removeEventListener('sessionstart', onSessionStart), () => this.xrManager.removeEventListener('sessionend', onSessionEnd), effect(() => {
45
+ this.config.enabled.value;
46
+ this.config.activeDuringXR.value;
47
+ this.syncHtmlHandler();
40
48
  }));
41
49
  }
42
50
  update() {
43
51
  if (!this.htmlHandler) {
44
52
  return;
45
53
  }
46
- if (this.world.session && !this.config.activeDuringXR.value) {
54
+ this.prepareCanvasPointerRoot();
55
+ this.htmlHandler.update();
56
+ }
57
+ syncHtmlHandler() {
58
+ var _a;
59
+ (_a = this.htmlHandler) === null || _a === void 0 ? void 0 : _a.destroy();
60
+ this.htmlHandler = undefined;
61
+ this.clearCanvasPointerRoot();
62
+ if (!this.config.enabled.value ||
63
+ (this.xrSessionActive && !this.config.activeDuringXR.value)) {
47
64
  return;
48
65
  }
49
66
  this.prepareCanvasPointerRoot();
50
- this.htmlHandler.update();
67
+ this.htmlHandler = forwardHtmlEvents(this.renderer.domElement, () => this.camera, this.canvasPointerRoot, {
68
+ batchEvents: false,
69
+ filter: isObjectTreeVisible,
70
+ });
51
71
  }
52
72
  prepareCanvasPointerRoot() {
53
73
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-pointer-system.js","sources":["../../src/input/canvas-pointer-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-pointer-system.js","sources":["../../src/input/canvas-pointer-system.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { isObjectTreeVisible } from '@iwsdk/xr-input';\nimport { forwardHtmlEvents } from '@pmndrs/pointer-events';\nimport { effect } from '@preact/signals-core';\n// Keep this leaf system out of the ecs/index -> World -> init barrel cycle.\nimport { Types } from '../ecs/component.js';\nimport { createSystem } from '../ecs/system.js';\nimport { Object3D } from '../runtime/index.js';\nimport type { ScenePointerDescendants } from '../runtime/scene-pointer-descendants.js';\n\nexport class CanvasPointerSystem extends createSystem(\n {},\n {\n /** Forward DOM pointer events from the renderer canvas into the Three scene. */\n enabled: { type: Types.Boolean, default: true },\n /** Continue forwarding pointer events while an immersive XR session is active. */\n activeDuringXR: { type: Types.Boolean, default: false },\n },\n) {\n private htmlHandler?: {\n destroy: () => void;\n update: () => void;\n };\n private readonly canvasPointerRoot = new Object3D();\n private readonly canvasPointerTraversalMarker = new Object3D();\n private readonly canvasPointerDescendants: Object3D[] = [];\n private xrSessionActive = false;\n\n init(): void {\n // @pmndrs/pointer-events returns early for childless objects before\n // reading interactableDescendants, so keep this synthetic root traversable.\n this.canvasPointerRoot.add(this.canvasPointerTraversalMarker);\n this.xrSessionActive =\n this.world.session != null || this.xrManager.getSession() != null;\n const onSessionStart = () => {\n this.xrSessionActive = true;\n this.syncHtmlHandler();\n };\n const onSessionEnd = () => {\n this.xrSessionActive = false;\n this.syncHtmlHandler();\n };\n this.xrManager.addEventListener('sessionstart', onSessionStart);\n this.xrManager.addEventListener('sessionend', onSessionEnd);\n this.cleanupFuncs.push(\n () => this.xrManager.removeEventListener('sessionstart', onSessionStart),\n () => this.xrManager.removeEventListener('sessionend', onSessionEnd),\n effect(() => {\n this.config.enabled.value;\n this.config.activeDuringXR.value;\n this.syncHtmlHandler();\n }),\n );\n }\n\n update(): void {\n if (!this.htmlHandler) {\n return;\n }\n this.prepareCanvasPointerRoot();\n this.htmlHandler.update();\n }\n\n private syncHtmlHandler(): void {\n this.htmlHandler?.destroy();\n this.htmlHandler = undefined;\n this.clearCanvasPointerRoot();\n if (\n !this.config.enabled.value ||\n (this.xrSessionActive && !this.config.activeDuringXR.value)\n ) {\n return;\n }\n this.prepareCanvasPointerRoot();\n this.htmlHandler = forwardHtmlEvents(\n this.renderer.domElement,\n () => this.camera,\n this.canvasPointerRoot,\n {\n batchEvents: false,\n filter: isObjectTreeVisible,\n },\n );\n }\n\n private prepareCanvasPointerRoot(): void {\n const scene = this.scene as typeof this.scene & ScenePointerDescendants;\n const root = this.canvasPointerRoot as Object3D & ScenePointerDescendants;\n const rayDescendants =\n scene.rayDescendants ?? scene.interactableDescendants;\n const screenSpaceDescendants = scene.screenSpaceDescendants;\n\n this.canvasPointerDescendants.length = 0;\n if (rayDescendants || screenSpaceDescendants) {\n this.pushDescendants(rayDescendants);\n this.pushDescendants(screenSpaceDescendants);\n root.interactableDescendants = this.canvasPointerDescendants;\n return;\n }\n\n this.canvasPointerDescendants.push(this.scene);\n root.interactableDescendants = this.canvasPointerDescendants;\n }\n\n private pushDescendants(descendants: Object3D[] | undefined): void {\n if (!descendants) {\n return;\n }\n this.canvasPointerDescendants.push(...descendants);\n }\n\n private clearCanvasPointerRoot(): void {\n const root = this.canvasPointerRoot as Object3D & ScenePointerDescendants;\n root.interactableDescendants = undefined;\n this.canvasPointerDescendants.length = 0;\n }\n\n destroy(): void {\n super.destroy();\n this.htmlHandler?.destroy();\n this.htmlHandler = undefined;\n this.clearCanvasPointerRoot();\n this.canvasPointerRoot.remove(this.canvasPointerTraversalMarker);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"input-actions.js","sources":["../../src/input/input-actions.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-actions.js","sources":["../../src/input/input-actions.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n AxesState,\n InputComponent,\n type XRInputManager,\n} from '@iwsdk/xr-input';\nimport {\n BrowserGamepadAxis,\n BrowserGamepadButton,\n StatefulBrowserGamepad,\n} from './stateful-browser-gamepad.js';\nimport { StatefulKeyboard } from './stateful-keyboard.js';\n\nexport const InputActions = {\n LocomotionMove: 'locomotion.move',\n LocomotionTurn: 'locomotion.turn',\n LocomotionJump: 'locomotion.jump',\n LocomotionTeleportAim: 'locomotion.teleportAim',\n LocomotionTeleportCommit: 'locomotion.teleportCommit',\n InteractionSelect: 'interaction.select',\n} as const;\n\nexport type InputActionName =\n | (typeof InputActions)[keyof typeof InputActions]\n | (string & {});\n\nexport type InputActionProfile = 'xr' | 'browser-first-person';\n\nexport type InputActionDefaultBindingOptions = {\n keyboard?: boolean;\n gamepad?: boolean;\n};\n\ntype AxisKeyBinding = {\n source: 'keyboard';\n action: InputActionName;\n kind: 'axis2d';\n negativeX?: string[];\n positiveX?: string[];\n negativeY?: string[];\n positiveY?: string[];\n};\n\ntype KeyboardButtonBinding = {\n source: 'keyboard';\n action: InputActionName;\n kind: 'button';\n code: string;\n};\n\ntype BrowserGamepadAxis2DBinding = {\n source: 'browserGamepad';\n action: InputActionName;\n kind: 'axis2d';\n gamepadIndex?: number;\n axis: BrowserGamepadAxis;\n};\n\ntype BrowserGamepadAxis1DBinding = {\n source: 'browserGamepad';\n action: InputActionName;\n kind: 'axis1d';\n gamepadIndex?: number;\n axis: BrowserGamepadAxis;\n component?: 'x' | 'y';\n};\n\ntype BrowserGamepadButtonBinding = {\n source: 'browserGamepad';\n action: InputActionName;\n kind: 'button';\n gamepadIndex?: number;\n button: BrowserGamepadButton;\n};\n\ntype XRGamepadAxis2DBinding = {\n source: 'xrGamepad';\n action: InputActionName;\n kind: 'axis2d';\n handedness: 'left' | 'right';\n componentId: InputComponent;\n};\n\ntype XRGamepadAxis1DBinding = {\n source: 'xrGamepad';\n action: InputActionName;\n kind: 'axis1d';\n handedness: 'left' | 'right';\n componentId: InputComponent;\n component?: 'x' | 'y';\n};\n\ntype XRGamepadButtonBinding = {\n source: 'xrGamepad';\n action: InputActionName;\n kind: 'button';\n handedness: 'left' | 'right';\n button: InputComponent;\n};\n\ntype XRGamepadAxesDirectionBinding = {\n source: 'xrGamepadAxesDirection';\n action: InputActionName;\n kind: 'button';\n handedness: 'left' | 'right';\n componentId: InputComponent;\n state: AxesState;\n};\n\nexport type InputActionBinding =\n | AxisKeyBinding\n | KeyboardButtonBinding\n | BrowserGamepadAxis2DBinding\n | BrowserGamepadAxis1DBinding\n | BrowserGamepadButtonBinding\n | XRGamepadAxis2DBinding\n | XRGamepadAxis1DBinding\n | XRGamepadButtonBinding\n | XRGamepadAxesDirectionBinding;\n\nexport type InputActionContext = {\n keyboard: StatefulKeyboard;\n browserGamepads: Array<StatefulBrowserGamepad | undefined>;\n xr: XRInputManager;\n};\n\ntype ButtonState = {\n pressed: boolean;\n down: boolean;\n up: boolean;\n};\n\ntype Axis1DState = {\n previous: number;\n current: number;\n};\n\ntype Axis2DState = {\n previousX: number;\n previousY: number;\n x: number;\n y: number;\n};\n\nconst DEFAULT_THRESHOLD = 0.8;\n\nfunction clamp(value: number, min = -1, max = 1): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction anyKeyPressed(keyboard: StatefulKeyboard, codes?: string[]): boolean {\n return !!codes?.some((code) => keyboard.getKeyPressed(code));\n}\n\nexport class InputActionManager {\n private readonly bindings: InputActionBinding[] = [];\n private readonly buttonStates = new Map<InputActionName, ButtonState>();\n private readonly axis1DStates = new Map<InputActionName, Axis1DState>();\n private readonly axis2DStates = new Map<InputActionName, Axis2DState>();\n\n constructor() {\n this.enableDefaultBindings('xr');\n }\n\n enableDefaultBindings(\n profile: InputActionProfile,\n options: InputActionDefaultBindingOptions = {},\n ): void {\n const bindings = this.createDefaultBindings(profile, options);\n for (const binding of bindings) {\n if (!this.bindings.some((existing) => bindingsEqual(existing, binding))) {\n this.bindings.push(binding);\n }\n }\n }\n\n clearBindings(action?: InputActionName): void {\n if (!action) {\n this.bindings.length = 0;\n return;\n }\n\n for (let index = this.bindings.length - 1; index >= 0; index--) {\n if (this.bindings[index].action === action) {\n this.bindings.splice(index, 1);\n }\n }\n }\n\n addBinding(binding: InputActionBinding): void {\n this.bindings.push(binding);\n }\n\n addBindings(bindings: InputActionBinding[]): void {\n this.bindings.push(...bindings);\n }\n\n removeBinding(binding: InputActionBinding): boolean {\n const index = this.bindings.findIndex((existing) =>\n bindingsEqual(existing, binding),\n );\n if (index === -1) {\n return false;\n }\n\n this.bindings.splice(index, 1);\n return true;\n }\n\n getBindings(action?: InputActionName): InputActionBinding[] {\n return this.bindings\n .filter((binding) => !action || binding.action === action)\n .map(cloneBinding);\n }\n\n update(context: InputActionContext): void {\n this.prepareFrame();\n\n for (const binding of this.bindings) {\n if (binding.kind === 'axis2d') {\n this.applyAxis2DBinding(context, binding);\n } else if (binding.kind === 'axis1d') {\n this.applyAxis1DBinding(context, binding);\n } else {\n this.applyButtonBinding(context, binding);\n }\n }\n\n for (const state of this.axis1DStates.values()) {\n state.current = clamp(state.current);\n }\n for (const state of this.axis2DStates.values()) {\n state.x = clamp(state.x);\n state.y = clamp(state.y);\n }\n }\n\n getButtonPressed(action: InputActionName): boolean {\n return this.buttonStates.get(action)?.pressed ?? false;\n }\n\n getButtonDown(action: InputActionName): boolean {\n return this.buttonStates.get(action)?.down ?? false;\n }\n\n getButtonUp(action: InputActionName): boolean {\n return this.buttonStates.get(action)?.up ?? false;\n }\n\n getAxis1D(action: InputActionName): number {\n return this.axis1DStates.get(action)?.current ?? 0;\n }\n\n getAxis1DEnteringPositive(\n action: InputActionName,\n threshold = DEFAULT_THRESHOLD,\n ): boolean {\n const state = this.axis1DStates.get(action);\n return !!state && state.current >= threshold && state.previous < threshold;\n }\n\n getAxis1DEnteringNegative(\n action: InputActionName,\n threshold = DEFAULT_THRESHOLD,\n ): boolean {\n const state = this.axis1DStates.get(action);\n return (\n !!state && state.current <= -threshold && state.previous > -threshold\n );\n }\n\n getAxis2D(\n action: InputActionName,\n out: { x: number; y: number } = { x: 0, y: 0 },\n ): { x: number; y: number } {\n const state = this.axis2DStates.get(action);\n out.x = state?.x ?? 0;\n out.y = state?.y ?? 0;\n return out;\n }\n\n private prepareFrame(): void {\n for (const state of this.buttonStates.values()) {\n state.down = false;\n state.up = false;\n state.pressed = false;\n }\n\n for (const state of this.axis1DStates.values()) {\n state.previous = state.current;\n state.current = 0;\n }\n\n for (const state of this.axis2DStates.values()) {\n state.previousX = state.x;\n state.previousY = state.y;\n state.x = 0;\n state.y = 0;\n }\n }\n\n private applyAxis2DBinding(\n context: InputActionContext,\n binding: InputActionBinding & { kind: 'axis2d' },\n ): void {\n const state = this.getAxis2DState(binding.action);\n\n if (binding.source === 'keyboard') {\n state.x += anyKeyPressed(context.keyboard, binding.positiveX) ? 1 : 0;\n state.x -= anyKeyPressed(context.keyboard, binding.negativeX) ? 1 : 0;\n state.y += anyKeyPressed(context.keyboard, binding.positiveY) ? 1 : 0;\n state.y -= anyKeyPressed(context.keyboard, binding.negativeY) ? 1 : 0;\n return;\n }\n\n const axisValues = this.getAxesValues(context, binding);\n if (axisValues) {\n state.x += axisValues.x;\n state.y += axisValues.y;\n }\n }\n\n private applyAxis1DBinding(\n context: InputActionContext,\n binding: InputActionBinding & { kind: 'axis1d' },\n ): void {\n const state = this.getAxis1DState(binding.action);\n const axisValues = this.getAxesValues(context, binding);\n if (!axisValues) {\n return;\n }\n\n state.current += binding.component === 'y' ? axisValues.y : axisValues.x;\n }\n\n private applyButtonBinding(\n context: InputActionContext,\n binding: InputActionBinding & { kind: 'button' },\n ): void {\n const state = this.getButtonState(binding.action);\n const pressed = this.getBindingButtonPressed(context, binding);\n const down = this.getBindingButtonDown(context, binding);\n const up = this.getBindingButtonUp(context, binding);\n\n state.pressed ||= pressed;\n state.down ||= down;\n state.up ||= up;\n }\n\n private getAxesValues(\n context: InputActionContext,\n binding:\n | (InputActionBinding & { kind: 'axis2d' })\n | (InputActionBinding & { kind: 'axis1d' }),\n ): { x: number; y: number } | undefined {\n if (binding.source === 'browserGamepad') {\n const gamepad = this.getBrowserGamepad(context, binding.gamepadIndex);\n return gamepad?.getAxesValues(binding.axis);\n }\n\n if (binding.source === 'xrGamepad') {\n return context.xr.gamepads[binding.handedness]?.getAxesValues(\n binding.componentId,\n );\n }\n\n return undefined;\n }\n\n private getBindingButtonPressed(\n context: InputActionContext,\n binding: InputActionBinding & { kind: 'button' },\n ): boolean {\n if (binding.source === 'keyboard') {\n return context.keyboard.getKeyPressed(binding.code);\n }\n if (binding.source === 'browserGamepad') {\n return (\n this.getBrowserGamepad(context, binding.gamepadIndex)?.getButtonPressed(\n binding.button,\n ) ?? false\n );\n }\n if (binding.source === 'xrGamepad') {\n return (\n context.xr.gamepads[binding.handedness]?.getButtonPressed(\n binding.button,\n ) ?? false\n );\n }\n return (\n context.xr.gamepads[binding.handedness]?.getAxesState(\n binding.componentId,\n ) === binding.state\n );\n }\n\n private getBindingButtonDown(\n context: InputActionContext,\n binding: InputActionBinding & { kind: 'button' },\n ): boolean {\n if (binding.source === 'keyboard') {\n return context.keyboard.getKeyDown(binding.code);\n }\n if (binding.source === 'browserGamepad') {\n return (\n this.getBrowserGamepad(context, binding.gamepadIndex)?.getButtonDown(\n binding.button,\n ) ?? false\n );\n }\n if (binding.source === 'xrGamepad') {\n return (\n context.xr.gamepads[binding.handedness]?.getButtonDown(\n binding.button,\n ) ?? false\n );\n }\n return (\n context.xr.gamepads[binding.handedness]?.getAxesEnteringState(\n binding.componentId,\n binding.state,\n ) ?? false\n );\n }\n\n private getBindingButtonUp(\n context: InputActionContext,\n binding: InputActionBinding & { kind: 'button' },\n ): boolean {\n if (binding.source === 'keyboard') {\n return context.keyboard.getKeyUp(binding.code);\n }\n if (binding.source === 'browserGamepad') {\n return (\n this.getBrowserGamepad(context, binding.gamepadIndex)?.getButtonUp(\n binding.button,\n ) ?? false\n );\n }\n if (binding.source === 'xrGamepad') {\n return (\n context.xr.gamepads[binding.handedness]?.getButtonUp(binding.button) ??\n false\n );\n }\n return (\n context.xr.gamepads[binding.handedness]?.getAxesLeavingState(\n binding.componentId,\n binding.state,\n ) ?? false\n );\n }\n\n private getBrowserGamepad(\n context: InputActionContext,\n gamepadIndex?: number,\n ): StatefulBrowserGamepad | undefined {\n if (gamepadIndex !== undefined) {\n return context.browserGamepads[gamepadIndex];\n }\n return context.browserGamepads.find((gamepad) => gamepad?.connected);\n }\n\n private getButtonState(action: InputActionName): ButtonState {\n let state = this.buttonStates.get(action);\n if (!state) {\n state = { pressed: false, down: false, up: false };\n this.buttonStates.set(action, state);\n }\n return state;\n }\n\n private getAxis1DState(action: InputActionName): Axis1DState {\n let state = this.axis1DStates.get(action);\n if (!state) {\n state = { previous: 0, current: 0 };\n this.axis1DStates.set(action, state);\n }\n return state;\n }\n\n private getAxis2DState(action: InputActionName): Axis2DState {\n let state = this.axis2DStates.get(action);\n if (!state) {\n state = { previousX: 0, previousY: 0, x: 0, y: 0 };\n this.axis2DStates.set(action, state);\n }\n return state;\n }\n\n private createDefaultBindings(\n profile: InputActionProfile,\n options: InputActionDefaultBindingOptions,\n ): InputActionBinding[] {\n if (profile === 'browser-first-person') {\n return this.createBrowserFirstPersonBindings(options);\n }\n return [\n {\n source: 'xrGamepad',\n kind: 'axis2d',\n action: InputActions.LocomotionMove,\n handedness: 'left',\n componentId: InputComponent.Thumbstick,\n },\n {\n source: 'xrGamepad',\n kind: 'axis1d',\n action: InputActions.LocomotionTurn,\n handedness: 'right',\n componentId: InputComponent.Thumbstick,\n component: 'x',\n },\n {\n source: 'xrGamepad',\n kind: 'button',\n action: InputActions.LocomotionJump,\n handedness: 'right',\n button: InputComponent.A_Button,\n },\n {\n source: 'xrGamepadAxesDirection',\n kind: 'button',\n action: InputActions.LocomotionTeleportAim,\n handedness: 'right',\n componentId: InputComponent.Thumbstick,\n state: AxesState.Down,\n },\n ];\n }\n\n private createBrowserFirstPersonBindings(\n options: InputActionDefaultBindingOptions,\n ): InputActionBinding[] {\n const keyboardEnabled = options.keyboard ?? true;\n const gamepadEnabled = options.gamepad ?? true;\n const bindings: InputActionBinding[] = [];\n\n if (keyboardEnabled) {\n bindings.push(\n {\n source: 'keyboard',\n kind: 'axis2d',\n action: InputActions.LocomotionMove,\n negativeX: ['KeyA', 'ArrowLeft'],\n positiveX: ['KeyD', 'ArrowRight'],\n negativeY: ['KeyW', 'ArrowUp'],\n positiveY: ['KeyS', 'ArrowDown'],\n },\n {\n source: 'keyboard',\n kind: 'button',\n action: InputActions.LocomotionJump,\n code: 'Space',\n },\n );\n }\n\n if (gamepadEnabled) {\n bindings.push(\n {\n source: 'browserGamepad',\n kind: 'axis2d',\n action: InputActions.LocomotionMove,\n axis: BrowserGamepadAxis.LeftStick,\n },\n {\n source: 'browserGamepad',\n kind: 'axis1d',\n action: InputActions.LocomotionTurn,\n axis: BrowserGamepadAxis.RightStick,\n component: 'x',\n },\n {\n source: 'browserGamepad',\n kind: 'button',\n action: InputActions.LocomotionJump,\n button: BrowserGamepadButton.South,\n },\n );\n }\n\n return bindings;\n }\n}\n\nfunction cloneBinding(binding: InputActionBinding): InputActionBinding {\n if (binding.source === 'keyboard' && binding.kind === 'axis2d') {\n return {\n ...binding,\n negativeX: binding.negativeX ? [...binding.negativeX] : undefined,\n positiveX: binding.positiveX ? [...binding.positiveX] : undefined,\n negativeY: binding.negativeY ? [...binding.negativeY] : undefined,\n positiveY: binding.positiveY ? [...binding.positiveY] : undefined,\n };\n }\n\n return { ...binding };\n}\n\nfunction bindingsEqual(\n first: InputActionBinding,\n second: InputActionBinding,\n): boolean {\n return bindingKey(first) === bindingKey(second);\n}\n\nfunction bindingKey(binding: InputActionBinding): string {\n const entries = Object.entries(binding).map(([key, value]) => [\n key,\n Array.isArray(value) ? [...value].sort() : value,\n ]);\n entries.sort(([firstKey], [secondKey]) => firstKey.localeCompare(secondKey));\n return JSON.stringify(entries);\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"input-manager.js","sources":["../../src/input/input-manager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-manager.js","sources":["../../src/input/input-manager.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { XRInputManager } from '@iwsdk/xr-input';\nimport { WebXRManager } from '../runtime/index.js';\nimport { InputActionManager } from './input-actions.js';\nimport { StatefulBrowserGamepad } from './stateful-browser-gamepad.js';\nimport { StatefulKeyboard } from './stateful-keyboard.js';\n\nexport type CanvasPointerEventsOption =\n | boolean\n | {\n enabled?: boolean;\n activeDuringXR?: boolean;\n };\n\nexport type NormalizedCanvasPointerEventsOptions = {\n enabled: boolean;\n activeDuringXR: boolean;\n};\n\nexport type InputManagerOptions = {\n canvasPointerEvents?: CanvasPointerEventsOption;\n};\n\nexport function normalizeCanvasPointerEventsOptions(\n option: CanvasPointerEventsOption | undefined,\n): NormalizedCanvasPointerEventsOptions {\n if (typeof option === 'boolean') {\n return { enabled: option, activeDuringXR: false };\n }\n\n return {\n enabled: option?.enabled ?? true,\n activeDuringXR: option?.activeDuringXR ?? false,\n };\n}\n\nexport class InputManager {\n public readonly xr: XRInputManager;\n public readonly keyboard: StatefulKeyboard;\n public readonly browserGamepads: Array<StatefulBrowserGamepad | undefined> =\n [];\n public readonly actions: InputActionManager;\n public readonly canvasPointerEvents: NormalizedCanvasPointerEventsOptions;\n\n constructor(xr: XRInputManager, options: InputManagerOptions = {}) {\n this.xr = xr;\n this.keyboard = new StatefulKeyboard();\n this.actions = new InputActionManager();\n this.canvasPointerEvents = normalizeCanvasPointerEventsOptions(\n options.canvasPointerEvents,\n );\n }\n\n /** @deprecated Use input.xr.gamepads instead. */\n get gamepads() {\n return this.xr.gamepads;\n }\n\n /** @deprecated Use input.xr.multiPointers instead. */\n get multiPointers() {\n return this.xr.multiPointers;\n }\n\n /** @deprecated Use input.xr.visualAdapters instead. */\n get visualAdapters() {\n return this.xr.visualAdapters;\n }\n\n /** @deprecated Use input.xr.isPrimary(...) instead. */\n isPrimary(...args: Parameters<XRInputManager['isPrimary']>) {\n return this.xr.isPrimary(...args);\n }\n\n /** @deprecated Use input.xr.getPrimaryInputSource(...) instead. */\n getPrimaryInputSource(\n ...args: Parameters<XRInputManager['getPrimaryInputSource']>\n ) {\n return this.xr.getPrimaryInputSource(...args);\n }\n\n update(xrManager: WebXRManager, delta: number, time: number): void {\n this.keyboard.update();\n this.updateBrowserGamepads();\n this.xr.update(xrManager, delta, time);\n this.actions.update({\n keyboard: this.keyboard,\n browserGamepads: this.browserGamepads,\n xr: this.xr,\n });\n }\n\n destroy(): void {\n this.keyboard.destroy();\n }\n\n private updateBrowserGamepads(): void {\n if (!navigator.getGamepads) {\n this.browserGamepads.length = 0;\n return;\n }\n\n const gamepads = navigator.getGamepads();\n this.browserGamepads.length = gamepads.length;\n for (let index = 0; index < gamepads.length; index++) {\n const gamepad = gamepads[index];\n if (!gamepad) {\n this.browserGamepads[index] = undefined;\n continue;\n }\n\n const state = this.browserGamepads[index];\n if (state) {\n state.refresh(gamepad);\n } else {\n const nextState = new StatefulBrowserGamepad(gamepad);\n nextState.refresh(gamepad);\n this.browserGamepads[index] = nextState;\n }\n }\n }\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;AAKG;AAwBG,SAAU,mCAAmC,CACjD,MAA6C,EAAA;;AAE7C,IAAA,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE;QAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE;IACnD;IAEA,OAAO;QACL,OAAO,EAAE,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;QAChC,cAAc,EAAE,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK;KAChD;AACH;MAEa,YAAY,CAAA;IAQvB,WAAA,CAAY,EAAkB,EAAE,OAAA,GAA+B,EAAE,EAAA;QALjD,IAAA,CAAA,eAAe,GAC7B,EAAE;AAKF,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,EAAE;QACvC,IAAI,CAAC,mBAAmB,GAAG,mCAAmC,CAC5D,OAAO,CAAC,mBAAmB,CAC5B;IACH;;AAGA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ;IACzB;;AAGA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAC9B;;AAGA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc;IAC/B;;IAGA,SAAS,CAAC,GAAG,IAA6C,EAAA;QACxD,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IACnC;;IAGA,qBAAqB,CACnB,GAAG,IAAyD,EAAA;QAE5D,OAAO,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;IAC/C;AAEA,IAAA,MAAM,CAAC,SAAuB,EAAE,KAAa,EAAE,IAAY,EAAA;AACzD,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACtB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,EAAE,EAAE,IAAI,CAAC,EAAE;AACZ,SAAA,CAAC;IACJ;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACzB;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/B;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE;QACxC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;AAC7C,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACpD,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,SAAS;gBACvC;YACF;YAEA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACzC,IAAI,KAAK,EAAE;AACT,gBAAA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACxB;iBAAO;AACL,gBAAA,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC;AACrD,gBAAA,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,SAAS;YACzC;QACF;IACF;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"input-system.d.ts","sourceRoot":"","sources":["../../src/input/input-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;;IAqDxC,yFAAyF;;;;;;IAZzF,4CAA4C;;;;IAE5C,mDAAmD;;;;IAEnD,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAElC,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEnC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIlC,yFAAyF;;;;;;IAZzF,4CAA4C;;;;IAE5C,mDAAmD;;;;IAEnD,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAElC,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEnC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAjCtC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,WAAY,SAAQ,gBAiBhC;IACC,+CAA+C;IAC/C,OAAO,CAAC,cAAc,CAAkB;IACxC,sDAAsD;IACtD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,gDAAgD;IAChD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,SAAS,CAQb;IACJ,OAAO,CAAC,aAAa,CAAmC;IAExD,IAAI,IAAI,IAAI;IAgDZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUzC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiE9B,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,0BAA0B;IAkBlC,OAAO,CAAC,qBAAqB;CAqB9B"}
1
+ {"version":3,"file":"input-system.d.ts","sourceRoot":"","sources":["../../src/input/input-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;;IAqDxC,yFAAyF;;;;;;IAZzF,4CAA4C;;;;IAE5C,mDAAmD;;;;IAEnD,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAElC,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEnC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIlC,yFAAyF;;;;;;IAZzF,4CAA4C;;;;IAE5C,mDAAmD;;;;IAEnD,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAElC,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEnC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAjCtC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,WAAY,SAAQ,gBAiBhC;IACC,+CAA+C;IAC/C,OAAO,CAAC,cAAc,CAAkB;IACxC,sDAAsD;IACtD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,gDAAgD;IAChD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,SAAS,CAQb;IACJ,OAAO,CAAC,aAAa,CAAmC;IAExD,IAAI,IAAI,IAAI;IAgDZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUzC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiE9B,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,0BAA0B;IAuBlC,OAAO,CAAC,qBAAqB;CAqB9B"}
@@ -238,9 +238,12 @@ class InputSystem extends createSystem({
238
238
  object3D.traverse((child) => {
239
239
  if (child.isMesh) {
240
240
  const mesh = child;
241
- if (mesh.geometry && !mesh.geometry.boundsTree) {
241
+ const geometry = mesh.geometry;
242
+ if (geometry &&
243
+ !geometry.boundsTree &&
244
+ typeof geometry.computeBoundsTree === 'function') {
242
245
  try {
243
- mesh.geometry.computeBoundsTree();
246
+ geometry.computeBoundsTree();
244
247
  }
245
248
  catch (error) {
246
249
  console.warn(`[InputSystem] Failed to compute BVH for ${mesh.name || 'unnamed'}:`, error);