@iwsdk/core 1.0.0-rc.0 → 1.0.0-rc.2

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 (165) hide show
  1. package/dist/asset/asset-manager.js.map +1 -1
  2. package/dist/asset/cache-manager.js.map +1 -1
  3. package/dist/asset/loaders/audio-loader.js.map +1 -1
  4. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  5. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  7. package/dist/asset/loaders/texture-loader.js.map +1 -1
  8. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  9. package/dist/audio/audio-pool.js.map +1 -1
  10. package/dist/audio/audio-system.js.map +1 -1
  11. package/dist/audio/audio-utils.js.map +1 -1
  12. package/dist/audio/audio.js.map +1 -1
  13. package/dist/camera/camera-source.js.map +1 -1
  14. package/dist/camera/camera-system.js.map +1 -1
  15. package/dist/camera/camera-utils.js.map +1 -1
  16. package/dist/camera/types.js.map +1 -1
  17. package/dist/depth/depth-occludable.js.map +1 -1
  18. package/dist/depth/depth-sensing-system.js.map +1 -1
  19. package/dist/depth/depth-textures.js.map +1 -1
  20. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  21. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  22. package/dist/ecs/builtin-components.js.map +1 -1
  23. package/dist/ecs/component-editor-metadata.js.map +1 -1
  24. package/dist/ecs/component-manifest.js.map +1 -1
  25. package/dist/ecs/entity.js.map +1 -1
  26. package/dist/ecs/system.js.map +1 -1
  27. package/dist/ecs/world.js.map +1 -1
  28. package/dist/environment/dome-gradient.js.map +1 -1
  29. package/dist/environment/dome-texture.js.map +1 -1
  30. package/dist/environment/environment-system.js.map +1 -1
  31. package/dist/environment/gradient-environment.js.map +1 -1
  32. package/dist/environment/ibl-gradient.js.map +1 -1
  33. package/dist/environment/ibl-texture.js.map +1 -1
  34. package/dist/environment/scene-ar-environment.js.map +1 -1
  35. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  36. package/dist/environment-raycast/raycast-target.js.map +1 -1
  37. package/dist/gaze/gaze-system.d.ts +207 -0
  38. package/dist/gaze/gaze-system.d.ts.map +1 -0
  39. package/dist/gaze/gaze-system.js +168 -0
  40. package/dist/gaze/gaze-system.js.map +1 -0
  41. package/dist/gaze/index.d.ts +8 -0
  42. package/dist/gaze/index.d.ts.map +1 -0
  43. package/dist/grab/distance-grabbable.js.map +1 -1
  44. package/dist/grab/grab-helpers.d.ts +7 -6
  45. package/dist/grab/grab-helpers.d.ts.map +1 -1
  46. package/dist/grab/grab-helpers.js +12 -7
  47. package/dist/grab/grab-helpers.js.map +1 -1
  48. package/dist/grab/grab-system.d.ts.map +1 -1
  49. package/dist/grab/grab-system.js +2 -1
  50. package/dist/grab/grab-system.js.map +1 -1
  51. package/dist/grab/grab-warnings.js.map +1 -1
  52. package/dist/grab/grabbed.js.map +1 -1
  53. package/dist/grab/handles.d.ts +10 -1
  54. package/dist/grab/handles.d.ts.map +1 -1
  55. package/dist/grab/handles.js +29 -6
  56. package/dist/grab/handles.js.map +1 -1
  57. package/dist/grab/index.js.map +1 -1
  58. package/dist/grab/one-hand-grabbable.js.map +1 -1
  59. package/dist/grab/pointer-events-patch.js.map +1 -1
  60. package/dist/grab/two-hands-grabbable.js.map +1 -1
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/init/browser-camera.js.map +1 -1
  66. package/dist/init/player-camera.js.map +1 -1
  67. package/dist/init/session-grant.js.map +1 -1
  68. package/dist/init/world-initializer.d.ts +49 -0
  69. package/dist/init/world-initializer.d.ts.map +1 -1
  70. package/dist/init/world-initializer.js +23 -11
  71. package/dist/init/world-initializer.js.map +1 -1
  72. package/dist/init/xr.d.ts +14 -0
  73. package/dist/init/xr.d.ts.map +1 -1
  74. package/dist/init/xr.js +19 -0
  75. package/dist/init/xr.js.map +1 -1
  76. package/dist/input/canvas-pointer-system.js.map +1 -1
  77. package/dist/input/input-actions.js.map +1 -1
  78. package/dist/input/input-manager.js.map +1 -1
  79. package/dist/input/input-system.d.ts +3 -0
  80. package/dist/input/input-system.d.ts.map +1 -1
  81. package/dist/input/input-system.js +72 -6
  82. package/dist/input/input-system.js.map +1 -1
  83. package/dist/input/state-tags.d.ts.map +1 -1
  84. package/dist/input/state-tags.js +2 -0
  85. package/dist/input/state-tags.js.map +1 -1
  86. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  87. package/dist/input/stateful-keyboard.js.map +1 -1
  88. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  89. package/dist/layers/xr-layer-init.js.map +1 -1
  90. package/dist/layers/xr-layer-state.js.map +1 -1
  91. package/dist/layers/xr-layer-system.js.map +1 -1
  92. package/dist/layers/xr-layer-transform.js.map +1 -1
  93. package/dist/layers/xr-quad-layer.js.map +1 -1
  94. package/dist/level/level-component-applier.js.map +1 -1
  95. package/dist/level/level-player-rig.js.map +1 -1
  96. package/dist/level/level-root.js.map +1 -1
  97. package/dist/level/level-scene-environment.js.map +1 -1
  98. package/dist/level/level-scene-json-importer.js.map +1 -1
  99. package/dist/level/level-scene-material.js.map +1 -1
  100. package/dist/level/level-scene-object.js.map +1 -1
  101. package/dist/level/level-scene-primitive.js.map +1 -1
  102. package/dist/level/level-system.js.map +1 -1
  103. package/dist/level/level-tag.js.map +1 -1
  104. package/dist/lighting/light-binding.js.map +1 -1
  105. package/dist/lighting/light-components.js.map +1 -1
  106. package/dist/lighting/light-system.js.map +1 -1
  107. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  108. package/dist/locomotion/locomotion-environment.js.map +1 -1
  109. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  110. package/dist/locomotion/locomotion.js.map +1 -1
  111. package/dist/locomotion/materials/line.js.map +1 -1
  112. package/dist/locomotion/slide.js.map +1 -1
  113. package/dist/locomotion/teleport.js.map +1 -1
  114. package/dist/locomotion/turn.js.map +1 -1
  115. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  116. package/dist/mcp/mcp-runtime.js.map +1 -1
  117. package/dist/mcp/scene-tools.js.map +1 -1
  118. package/dist/mcp/ui-debug-tools.js.map +1 -1
  119. package/dist/physics/physics-runtime.js.map +1 -1
  120. package/dist/physics/physics-system.js.map +1 -1
  121. package/dist/physics/physics-transport.js.map +1 -1
  122. package/dist/physics/physics-worker-protocol.js.map +1 -1
  123. package/dist/physics/physics-worker-utils.js.map +1 -1
  124. package/dist/physics/physics-worker.js.map +1 -1
  125. package/dist/physics/physicsBody.js.map +1 -1
  126. package/dist/physics/physicsManipulation.js.map +1 -1
  127. package/dist/physics/physicsShape.js.map +1 -1
  128. package/dist/physics/utils.js.map +1 -1
  129. package/dist/project/normalize.d.ts.map +1 -1
  130. package/dist/project/normalize.js +11 -0
  131. package/dist/project/normalize.js.map +1 -1
  132. package/dist/project/paths.js.map +1 -1
  133. package/dist/project/types.d.ts +32 -2
  134. package/dist/project/types.d.ts.map +1 -1
  135. package/dist/project/types.js.map +1 -1
  136. package/dist/project/validation.d.ts.map +1 -1
  137. package/dist/project/validation.js +65 -1
  138. package/dist/project/validation.js.map +1 -1
  139. package/dist/runtime/three.js.map +1 -1
  140. package/dist/scene-understanding/anchor.js.map +1 -1
  141. package/dist/scene-understanding/mesh.js.map +1 -1
  142. package/dist/scene-understanding/plane.js.map +1 -1
  143. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  144. package/dist/schemas/iwsdk-project.v1.schema.json +45 -3
  145. package/dist/transform/synced-euler.js.map +1 -1
  146. package/dist/transform/synced-quaternion.js.map +1 -1
  147. package/dist/transform/synced-vector3.js.map +1 -1
  148. package/dist/transform/transform-component.js.map +1 -1
  149. package/dist/transform/transform-utils.js.map +1 -1
  150. package/dist/transform/transform.js.map +1 -1
  151. package/dist/ui/document.js.map +1 -1
  152. package/dist/ui/follow-component.js.map +1 -1
  153. package/dist/ui/follow.js.map +1 -1
  154. package/dist/ui/panel-components.js.map +1 -1
  155. package/dist/ui/screenspace-component.js.map +1 -1
  156. package/dist/ui/screenspace.js.map +1 -1
  157. package/dist/ui/ui.js.map +1 -1
  158. package/dist/ui/uikitml-asset.js.map +1 -1
  159. package/dist/ui/uikitml.js.map +1 -1
  160. package/dist/version.d.ts +1 -1
  161. package/dist/version.js +1 -1
  162. package/dist/version.js.map +1 -1
  163. package/dist/visibility/visibility-component.js.map +1 -1
  164. package/dist/visibility/visibility.js.map +1 -1
  165. package/package.json +4 -4
package/dist/init/xr.js CHANGED
@@ -52,6 +52,8 @@ function buildSessionInit(opts) {
52
52
  depthSensing: 'depth-sensing',
53
53
  layers: 'layers',
54
54
  unbounded: 'unbounded',
55
+ gazeTracking: 'gaze-tracking',
56
+ eyeTracking: 'eye-tracking',
55
57
  };
56
58
  const push = (key, normalized) => {
57
59
  if (!normalized) {
@@ -73,6 +75,23 @@ function buildSessionInit(opts) {
73
75
  push('meshDetection', normalizeFlag(f.meshDetection));
74
76
  push('layers', normalizeFlag(f.layers));
75
77
  push('unbounded', normalizeFlag(f.unbounded));
78
+ // Eye gaze is exposed under two descriptor names: 'gaze-tracking' (what the
79
+ // Meta Quest Browser accepts today, and what surfaces the
80
+ // `targetRayMode === 'gaze'` input source) and 'eye-tracking' (the W3C
81
+ // draft name). Honor required/optional exactly for whichever the app named,
82
+ // then offer the other as *optional* so the same app works on either
83
+ // runtime — unrecognized optional descriptors are ignored, whereas an
84
+ // unrecognized required one fails the whole session request.
85
+ const gaze = normalizeFlag(f.gazeTracking);
86
+ const eye = normalizeFlag(f.eyeTracking);
87
+ push('gazeTracking', gaze);
88
+ push('eyeTracking', eye);
89
+ if (gaze && !eye && f.eyeTracking !== false) {
90
+ optionalFeatures.push(map.eyeTracking);
91
+ }
92
+ if (eye && !gaze && f.gazeTracking !== false) {
93
+ optionalFeatures.push(map.gazeTracking);
94
+ }
76
95
  // Depth sensing (may include preferences)
77
96
  if (f.depthSensing) {
78
97
  const normalized = normalizeFlag(isDepthFlagObject(f.depthSensing)
@@ -1 +1 @@
1
- {"version":3,"file":"xr.js","sources":["../../src/init/xr.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAKH;IACY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC9B,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAKvB;IACY;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;AAwF9B;AACA,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAU;AAEzE;AACA,SAAS,aAAa,CAAC,IAAkB,EAAA;IACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,EAAE;AACxC,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;IACA,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtC;AAEA,SAAS,iBAAiB,CACxB,IAAkC,EAAA;AAElC,IAAA,OAAO,OAAO,IAAI,KAAK,QAAQ;AACjC;AAEA;AACM,SAAU,gBAAgB,CAAC,IAAe,EAAA;;IAC9C,MAAM,gBAAgB,GAAa,EAAE;;AAErC,IAAA,MAAM,gBAAgB,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAErE,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;AAE7B,IAAA,MAAM,GAAG,GAA2C;AAClD,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,cAAc,EAAE,iBAAiB;AACjC,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,SAAS,EAAE,WAAW;KACd;AAEV,IAAA,MAAM,IAAI,GAAG,CACX,GAA2B,EAC3B,UAA8C,KAC5C;QACF,IAAI,CAAC,UAAU,EAAE;YACf;QACF;AACA,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,UAAU,CAAC,QAAQ,EAAE;AACvB,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;aAAO;AACL,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;AACF,IAAA,CAAC;;IAGD,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;;AAG7C,IAAA,IAAI,CAAC,CAAC,YAAY,EAAE;QAClB,MAAM,UAAU,GAAG,aAAa,CAC9B,iBAAiB,CAAC,CAAC,CAAC,YAAY;cAC5B,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ;AACrC,cAAE,CAAC,CAAC,YAAY,CACnB;AACD,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IAClC;AAEA,IAAA,MAAM,WAAW,GAAkB;QACjC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvD,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACxD;AAED,IAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;AACrC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC;AAC3B,cAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;cACtB,SAAS;AACb,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;AAC5B,cAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;cACvB,SAAS;;QAGX,WAGD,CAAC,YAAY,GAAG;AACf,YAAA,IAAI,KAAK,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC5C,YAAA,IAAI,MAAM,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SAChC;IACvB;AAEA,IAAA,OAAO,WAAW;AACpB;AAEM,SAAU,sBAAsB,CACpC,IAAyB,EAAA;;IAEzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACrC,OAAO;AACL,YAAA,IAAI,EAAE,CAAA,EAAA,GAAC,IAA2B,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,UAAU;AACnE,YAAA,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC;SACrE;IACH;IACA,OAAO;QACL,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,UAAU;AAChD,QAAA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;AACzB,QAAA,aAAa,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI;AACnC,YAAA,kBAAkB,CAAC,KAAK;AACxB,YAAA,kBAAkB,CAAC,MAAM;AAC1B,SAAA;KACF;AACH;AAEA,SAAS,cAAc,CACrB,IAA2B,EAC3B,SAA8B,EAAA;;IAE9B,MAAM,CAAC,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAJ,IAAI,GAAI,EAAE;IACpB,MAAM,CAAC,GAAG,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAT,SAAS,GAAI,EAAE;IACzB,MAAM,cAAc,GAAG,EAAE,IAAI,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC,EAAE,IAAI,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC,EAAE;AACvE,IAAA,MAAM,MAAM,GAAc;AACxB,QAAA,WAAW,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC,WAAW;QACtE,cAAc,EAAE,MAAA,CAAC,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,cAAc;AACpD,QAAA,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,cAAc,GAAG,SAAS;QACzE,mBAAmB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;QAC3E,sBAAsB,EACpB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,sBAAsB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,sBAAsB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK;KAChE;AACD,IAAA,OAAO,MAAM;AACf;AAEO,eAAe,yBAAyB,CAC7C,OAAkB,EAClB,SAA6B,EAC7B,SAA+B,EAAA;IAE/B,MAAM,UAAU,GAAyB,EAAE;IAC3C,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,EAAE;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC3B,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACpB;IACF;AAEA,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAI;;AAEF,YAAA,MAAM,OAAO,CAAC,qBAAqB,CACjC,IAAuC,CACxC;AACD,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,IAAI,EAAE;;QAEf;IACF;;AAEA,IAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AAC3D;AASA,MAAM,uBAAuB,GAAG,IAAI,OAAO,EAAiC;AAE5E,eAAe,gBAAgB,CAAC,OAAkB,EAAA;AAChD,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IACrB;IAAE,OAAA,EAAA,EAAM,EAAC;AACX;AAEA;;;;;;AAMG;AACI,eAAe,cAAc,CAClC,KAAY,EACZ,OAAkB,EAClB,OAAkB,EAClB,cAAqC,EAAA;;AAErC,IAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACzB,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;AAC7B,YAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC;QACjC;AACA,QAAA,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO;IAClC;IAEA,MAAM,eAAe,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAA,eAAe,KAAA,IAAA,IAAf,eAAe,KAAA,MAAA,GAAA,MAAA,GAAf,eAAe,CAAE,OAAO,MAAK,OAAO,EAAE;QACxC,OAAO,eAAe,CAAC,OAAO;IAChC;IAEA,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9D,IAAI,YAAY,GAAG,KAAK;IACxB,IAAI,kBAAkB,GAAG,KAAK;IAC9B,MAAM,kBAAkB,GAAG,MAAK;QAC9B,IAAI,kBAAkB,EAAE;YACtB;QACF;QACA,kBAAkB,GAAG,IAAI;AACzB,QAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,EAAI;AACpB,IAAA,CAAC;IACD,MAAM,KAAK,GAAG,MAAK;QACjB,YAAY,GAAG,IAAI;AACnB,QAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;AACzC,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;AAC7B,YAAA,KAAK,CAAC,OAAO,GAAG,SAAS;QAC3B;AACA,QAAA,kBAAkB,EAAE;AACtB,IAAA,CAAC;AACD,IAAA,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtC,OAAO,IAAI,EAAE;QACX,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB;QACF;AACA,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE;AAC/B,YAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;YACzC,OAAO,OAAO,CAAC,OAAO;QACxB;AACA,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO;QACrC,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;QACA,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACpC,YAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;AACzC,YAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC;AAC/B,YAAA,OAAO,KAAK;QACd;;;IAGF;AAEA,IAAA,MAAM,QAAQ,GAAG,CAAC,YAA6B;AAC7C,QAAA,IAAI;YACF,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAClD,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,aAAa,CAC9C;YACD,IAAI,YAAY,EAAE;AAChB,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB,GAAG,YAAA;AACtC,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,CACrC,YAA+C,CAChD;AACD,YAAA,IAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE;AACzC,gBAAA,0BAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;YACnD;YACA,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAC3C,IAAI,YAAY,EAAE;AAChB,gBAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;AACzC,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;AACtD,gBAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;AACzC,gBAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC;AAC/B,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,KAAK,CAAC,OAAO,GAAG,OAAO;AACvB,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;AACzC,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC;AAC7D,YAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC;AAC/B,YAAA,kBAAkB,EAAE;AACpB,YAAA,OAAO,KAAK;QACd;IACF,CAAC,GAAG;AACJ,IAAA,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAClE,IAAA,IAAI;QACF,OAAO,MAAM,QAAQ;IACvB;YAAU;AACR,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,MAAK,QAAQ,EAAE;AAC5D,YAAA,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC;IACF;AACF;AAEA;;;;;;AAMG;AACG,SAAU,QAAQ,CAAC,KAAY,EAAE,OAA4B,EAAA;;AACjE,IAAA,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE;AAC7B,QAAA,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH;IACH;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACzB,QAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC;QACzC;IACF;AACA,IAAA,IAAI,KAAK,CAAC,qBAAqB,EAAE;QAC/B;IACF;IAEA,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;IACxD,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,MAAM;AACxD,IAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAE/C,IAAA,KAAK,CAAC,qBAAqB,GAAG,IAAI;IAClC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI;AAChC,IAAA,IAAI,OAAuC;AAC3C,IAAA,IAAI;AACF,QAAA,OAAO,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,WAAW,EAAE,cAAc,CAAC;IACvE;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,KAAK,CAAC,qBAAqB,GAAG,KAAK;AACnC,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;QACxD;IACF;AAEA,IAAA,OAAO,CAAC,OAAO,CAAC,OAAO;SACpB,IAAI,CAAC,CAAC,OAAO,KACZ,OAAO,IAAI,IAAI,GAAG,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;AAErE,SAAA,KAAK,CAAC,CAAC,KAAK,KAAI;;;AAGf,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AAC1D,IAAA,CAAC;SACA,OAAO,CAAC,MAAK;AACZ,QAAA,KAAK,CAAC,qBAAqB,GAAG,KAAK;AACrC,IAAA,CAAC,CAAC;AACN;;;;"}
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 * Eye/gaze tracking, used to drive gaze interactions. When granted, the\n * runtime surfaces an `XRInputSource` with `targetRayMode === 'gaze'` and\n * IWSDK drives {@link XROrigin.eyeSpace} from its target-ray pose. When\n * unavailable, ordinary hand/controller rays remain active.\n *\n * Requesting this also registers `GazeSystem`.\n */\n gazeTracking?: FeatureFlag;\n /**\n * @deprecated Use {@link XRFeatureOptions.gazeTracking}. Kept as an alias\n * for the W3C draft's `'eye-tracking'` descriptor name.\n */\n eyeTracking?: 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 gazeTracking: 'gaze-tracking',\n eyeTracking: 'eye-tracking',\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 // Eye gaze is exposed under two descriptor names: 'gaze-tracking' (what the\n // Meta Quest Browser accepts today, and what surfaces the\n // `targetRayMode === 'gaze'` input source) and 'eye-tracking' (the W3C\n // draft name). Honor required/optional exactly for whichever the app named,\n // then offer the other as *optional* so the same app works on either\n // runtime — unrecognized optional descriptors are ignored, whereas an\n // unrecognized required one fails the whole session request.\n const gaze = normalizeFlag(f.gazeTracking);\n const eye = normalizeFlag(f.eyeTracking);\n push('gazeTracking', gaze);\n push('eyeTracking', eye);\n if (gaze && !eye && f.eyeTracking !== false) {\n optionalFeatures.push(map.eyeTracking);\n }\n if (eye && !gaze && f.gazeTracking !== false) {\n optionalFeatures.push(map.gazeTracking);\n }\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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"}
@@ -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":"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"}
@@ -452,6 +452,7 @@ export declare class InputSystem extends InputSystem_base {
452
452
  private grabDescendants;
453
453
  private shouldSetIntersectables;
454
454
  private listeners;
455
+ private readonly listenerEntities;
455
456
  private lastBVHUpdate;
456
457
  init(): void;
457
458
  update(delta: number, time: number): void;
@@ -461,6 +462,8 @@ export declare class InputSystem extends InputSystem_base {
461
462
  private updateDescendantArrays;
462
463
  private setupEventListeners;
463
464
  private computeBoundsTreeForEntity;
465
+ private clearPointerStates;
466
+ private cleanupAllEventListeners;
464
467
  private cleanupEventListeners;
465
468
  }
466
469
  export {};
@@ -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;IAuBlC,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;;IAuDxC,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;IACzC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,SAAS,CAWb;IACJ,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,aAAa,CAAmC;IAExD,IAAI,IAAI,IAAI;IA0DZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAezC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgE9B,OAAO,CAAC,mBAAmB;IA4G3B,OAAO,CAAC,0BAA0B;IAuBlC,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,qBAAqB;CAyB9B"}
@@ -16,6 +16,7 @@ import { Transform } from '../transform/transform-component.js';
16
16
  * This source code is licensed under the MIT license found in the
17
17
  * LICENSE file in the root directory of this source tree.
18
18
  */
19
+ const NO_GAZE_CANDIDATES = [];
19
20
  /**
20
21
  * Samples XR poses (hands/controllers/head) and gamepads, curates the set of
21
22
  * interactables for pointer raycasting, and attaches minimal event listeners.
@@ -64,6 +65,7 @@ class InputSystem extends createSystem({
64
65
  this.grabDescendants = [];
65
66
  this.shouldSetIntersectables = false;
66
67
  this.listeners = new WeakMap();
68
+ this.listenerEntities = new Set();
67
69
  this.lastBVHUpdate = new WeakMap();
68
70
  }
69
71
  init() {
@@ -76,6 +78,10 @@ class InputSystem extends createSystem({
76
78
  value === VisibilityState.Visible ||
77
79
  this.config.maintainScenePointers.value;
78
80
  }));
81
+ const onSessionBoundary = () => this.clearPointerStates();
82
+ this.xrManager.addEventListener('sessionstart', onSessionBoundary);
83
+ this.xrManager.addEventListener('sessionend', onSessionBoundary);
84
+ this.cleanupFuncs.push(() => this.xrManager.removeEventListener('sessionstart', onSessionBoundary), () => this.xrManager.removeEventListener('sessionend', onSessionBoundary), () => this.cleanupAllEventListeners());
79
85
  // Wire pointer event listeners on qualify; tear them down on disqualify.
80
86
  // Descendant arrays are rebuilt every frame, so no dirty bookkeeping here.
81
87
  // Register the query subscriptions on cleanupFuncs so they're released on
@@ -104,6 +110,10 @@ class InputSystem extends createSystem({
104
110
  }
105
111
  }
106
112
  update(delta, time) {
113
+ // Gaze and hand rays consume the exact same target snapshot this frame.
114
+ this.input.xr.gazeCandidates = this.shouldSetIntersectables
115
+ ? this.rayDescendants
116
+ : NO_GAZE_CANDIDATES;
107
117
  // Update input sampling first
108
118
  this.input.update(this.xrManager, delta, time);
109
119
  // Rebuild interactable descendant arrays every frame so newly parented
@@ -115,7 +125,6 @@ class InputSystem extends createSystem({
115
125
  * Update per-type descendant arrays for optimized pointer intersection
116
126
  */
117
127
  updateDescendantArrays() {
118
- // Clear arrays
119
128
  this.rayDescendants.length = 0;
120
129
  this.touchDescendants.length = 0;
121
130
  this.grabDescendants.length = 0;
@@ -200,16 +209,24 @@ class InputSystem extends createSystem({
200
209
  const enter = (event) => {
201
210
  event.stopPropagation();
202
211
  maybeRefreshBVH();
212
+ pointerState.hovered.add(event.pointerId);
203
213
  if (!entity.hasComponent(Hovered)) {
204
214
  entity.addComponent(Hovered);
205
215
  }
206
216
  };
207
217
  const leave = (event) => {
208
218
  event.stopPropagation();
209
- entity.removeComponent(Hovered);
219
+ pointerState.hovered.delete(event.pointerId);
220
+ if (pointerState.hovered.size === 0) {
221
+ entity.removeComponent(Hovered);
222
+ }
210
223
  // pointerleave can fire without a preceding pointerup for flat geometry
211
- // (poke sphere exits intersection in one frame); clear Pressed defensively.
212
- entity.removeComponent(Pressed);
224
+ // (poke sphere exits intersection in one frame); clear only this
225
+ // pointer's press defensively.
226
+ pointerState.pressed.delete(event.pointerId);
227
+ if (pointerState.pressed.size === 0) {
228
+ entity.removeComponent(Pressed);
229
+ }
213
230
  };
214
231
  const down = (event) => {
215
232
  event.stopPropagation();
@@ -220,19 +237,48 @@ class InputSystem extends createSystem({
220
237
  if (!entity.hasComponent(Hovered)) {
221
238
  entity.addComponent(Hovered);
222
239
  }
240
+ pointerState.hovered.add(event.pointerId);
241
+ pointerState.pressed.add(event.pointerId);
223
242
  if (!entity.hasComponent(Pressed)) {
224
243
  entity.addComponent(Pressed);
225
244
  }
226
245
  };
227
246
  const up = (event) => {
228
247
  event.stopPropagation();
229
- entity.removeComponent(Pressed);
248
+ pointerState.pressed.delete(event.pointerId);
249
+ if (pointerState.pressed.size === 0) {
250
+ entity.removeComponent(Pressed);
251
+ }
252
+ };
253
+ const cancel = (event) => {
254
+ event.stopPropagation();
255
+ pointerState.hovered.delete(event.pointerId);
256
+ pointerState.pressed.delete(event.pointerId);
257
+ if (pointerState.hovered.size === 0) {
258
+ entity.removeComponent(Hovered);
259
+ }
260
+ if (pointerState.pressed.size === 0) {
261
+ entity.removeComponent(Pressed);
262
+ }
263
+ };
264
+ const pointerState = {
265
+ hovered: new Set(),
266
+ pressed: new Set(),
230
267
  };
231
- this.listeners.set(object3D, { enter, leave, down, up });
268
+ this.listeners.set(object3D, {
269
+ enter,
270
+ leave,
271
+ down,
272
+ up,
273
+ cancel,
274
+ ...pointerState,
275
+ });
276
+ this.listenerEntities.add(entity);
232
277
  object3D.addEventListener('pointerenter', enter);
233
278
  object3D.addEventListener('pointerleave', leave);
234
279
  object3D.addEventListener('pointerdown', down);
235
280
  object3D.addEventListener('pointerup', up);
281
+ object3D.addEventListener('pointercancel', cancel);
236
282
  }
237
283
  computeBoundsTreeForEntity(object3D) {
238
284
  object3D.traverse((child) => {
@@ -252,7 +298,24 @@ class InputSystem extends createSystem({
252
298
  }
253
299
  });
254
300
  }
301
+ clearPointerStates() {
302
+ for (const entity of this.listenerEntities) {
303
+ const object3D = entity.object3D;
304
+ const state = object3D ? this.listeners.get(object3D) : undefined;
305
+ state === null || state === void 0 ? void 0 : state.hovered.clear();
306
+ state === null || state === void 0 ? void 0 : state.pressed.clear();
307
+ if (entity.active) {
308
+ entity.removeComponent(Hovered).removeComponent(Pressed);
309
+ }
310
+ }
311
+ }
312
+ cleanupAllEventListeners() {
313
+ for (const entity of [...this.listenerEntities]) {
314
+ this.cleanupEventListeners(entity);
315
+ }
316
+ }
255
317
  cleanupEventListeners(entity) {
318
+ this.listenerEntities.delete(entity);
256
319
  const object3D = entity.object3D;
257
320
  if (!object3D) {
258
321
  return;
@@ -263,6 +326,9 @@ class InputSystem extends createSystem({
263
326
  object3D.removeEventListener('pointerleave', fns.leave);
264
327
  object3D.removeEventListener('pointerdown', fns.down);
265
328
  object3D.removeEventListener('pointerup', fns.up);
329
+ object3D.removeEventListener('pointercancel', fns.cancel);
330
+ fns.hovered.clear();
331
+ fns.pressed.clear();
266
332
  this.listeners.delete(object3D);
267
333
  }
268
334
  // A query also disqualifies an entity when it is destroyed. At that point
@@ -1 +1 @@
1
- {"version":3,"file":"input-system.js","sources":["../../src/input/input-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-system.js","sources":["../../src/input/input-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 type { PointerEvent, PointerEventsMap } from '@pmndrs/pointer-events';\nimport { Types } from '../ecs/component.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { VisibilityState } from '../ecs/world.js';\nimport { DistanceGrabbable } from '../grab/distance-grabbable.js';\nimport { OneHandGrabbable } from '../grab/one-hand-grabbable.js';\nimport { TwoHandsGrabbable } from '../grab/two-hands-grabbable.js';\nimport { Mesh, Object3D, Object3DEventMap } from '../runtime/index.js';\nimport { Transform } from '../transform/index.js';\nimport {\n Hovered,\n PokeInteractable,\n Pressed,\n RayInteractable,\n} from './state-tags.js';\n\nconst NO_GAZE_CANDIDATES: Object3D[] = [];\n\n/**\n * Samples XR poses (hands/controllers/head) and gamepads, curates the set of\n * interactables for pointer raycasting, and attaches minimal event listeners.\n *\n * @remarks\n * - Scheduled after player movement so pointers reflect updated transforms.\n * - Maintains type-specific descendant arrays for optimized pointer intersection.\n * - Adds transient `Hovered` / `Pressed` tags so other systems can react declaratively.\n *\n * @category Input\n * @example React to Hovered / Pressed\n * ```ts\n * export class HighlightSystem extends createSystem({\n * items: { required: [RayInteractable] }\n * }) {\n * update() {\n * this.queries.items.entities.forEach(e => {\n * e.object3D.visible = !e.hasComponent(Pressed);\n * })\n * }\n * }\n * ```\n */\nexport class InputSystem extends createSystem(\n {\n /** Entities interactable via ray pointer */\n rayInteractables: { required: [RayInteractable, Transform] },\n /** Entities interactable via touch/poke pointer */\n pokeInteractables: { required: [PokeInteractable, Transform] },\n /** One-hand grabbable entities */\n oneHandGrabbables: { required: [OneHandGrabbable, Transform] },\n /** Two-hands grabbable entities */\n twoHandsGrabbables: { required: [TwoHandsGrabbable, Transform] },\n /** Distance grabbable entities */\n distanceGrabbables: { required: [DistanceGrabbable, Transform] },\n },\n {\n /** Keep pointer target lists available outside immersive XR for browser canvas input. */\n maintainScenePointers: { type: Types.Boolean, default: false },\n },\n) {\n /** Descendants for ray pointer intersection */\n private rayDescendants: Object3D[] = [];\n /** Descendants for touch/poke pointer intersection */\n private touchDescendants: Object3D[] = [];\n /** Descendants for grab pointer intersection */\n private grabDescendants: Object3D[] = [];\n private shouldSetIntersectables = false;\n private listeners = new WeakMap<\n Object3D,\n {\n enter: (e: any) => void;\n leave: (e: any) => void;\n down: (e: any) => void;\n up: (e: any) => void;\n cancel: (e: any) => void;\n hovered: Set<number>;\n pressed: Set<number>;\n }\n >();\n private readonly listenerEntities = new Set<Entity>();\n private lastBVHUpdate = new WeakMap<Object3D, number>();\n\n init(): void {\n this.shouldSetIntersectables =\n this.visibilityState.value === VisibilityState.Visible ||\n this.config.maintainScenePointers.value;\n // React to XR visibility for enabling scoped intersections\n this.cleanupFuncs.push(\n this.visibilityState.subscribe((value) => {\n this.shouldSetIntersectables =\n value === VisibilityState.Visible ||\n this.config.maintainScenePointers.value;\n }),\n );\n\n const onSessionBoundary = () => this.clearPointerStates();\n this.xrManager.addEventListener('sessionstart', onSessionBoundary);\n this.xrManager.addEventListener('sessionend', onSessionBoundary);\n this.cleanupFuncs.push(\n () =>\n this.xrManager.removeEventListener('sessionstart', onSessionBoundary),\n () => this.xrManager.removeEventListener('sessionend', onSessionBoundary),\n () => this.cleanupAllEventListeners(),\n );\n\n // Wire pointer event listeners on qualify; tear them down on disqualify.\n // Descendant arrays are rebuilt every frame, so no dirty bookkeeping here.\n // Register the query subscriptions on cleanupFuncs so they're released on\n // system teardown (matching the visibilityState subscription above).\n this.cleanupFuncs.push(\n this.queries.rayInteractables.subscribe('qualify', (entity) => {\n this.setupEventListeners(entity);\n }),\n this.queries.rayInteractables.subscribe('disqualify', (entity) => {\n this.cleanupEventListeners(entity);\n }),\n\n this.queries.pokeInteractables.subscribe('qualify', (entity) => {\n this.setupEventListeners(entity);\n // Enable touch pointers when first poke interactable appears\n this.input.xr.multiPointers.left.toggleSubPointer('touch', true);\n this.input.xr.multiPointers.right.toggleSubPointer('touch', true);\n }),\n this.queries.pokeInteractables.subscribe('disqualify', (entity) => {\n this.cleanupEventListeners(entity);\n // Disable touch pointers when no poke interactables remain\n if (this.queries.pokeInteractables.entities.size === 0) {\n this.input.xr.multiPointers.left.toggleSubPointer('touch', false);\n this.input.xr.multiPointers.right.toggleSubPointer('touch', false);\n }\n }),\n );\n\n // Enable touch pointer if there are already poke interactables\n if (this.queries.pokeInteractables.entities.size > 0) {\n this.input.xr.multiPointers.left.toggleSubPointer('touch', true);\n this.input.xr.multiPointers.right.toggleSubPointer('touch', true);\n }\n }\n\n update(delta: number, time: number): void {\n // Gaze and hand rays consume the exact same target snapshot this frame.\n this.input.xr.gazeCandidates = this.shouldSetIntersectables\n ? this.rayDescendants\n : NO_GAZE_CANDIDATES;\n\n // Update input sampling first\n this.input.update(this.xrManager, delta, time);\n\n // Rebuild interactable descendant arrays every frame so newly parented\n // entities (TransformSystem runs at priority 0, after this system at -4)\n // become hit-testable on the same frame they're created.\n this.updateDescendantArrays();\n }\n\n /**\n * Update per-type descendant arrays for optimized pointer intersection\n */\n private updateDescendantArrays(): void {\n this.rayDescendants.length = 0;\n this.touchDescendants.length = 0;\n this.grabDescendants.length = 0;\n\n if (!this.shouldSetIntersectables) {\n // Clear all descendant arrays on scene\n (this.scene as any).interactableDescendants = undefined;\n (this.scene as any).rayDescendants = undefined;\n (this.scene as any).touchDescendants = undefined;\n (this.scene as any).grabDescendants = undefined;\n return;\n }\n\n // Collect ray interactables + distance grabbables (both use ray)\n for (const entity of this.queries.rayInteractables.entities) {\n const obj = entity.object3D;\n if (obj) {\n this.rayDescendants.push(obj);\n }\n }\n for (const entity of this.queries.distanceGrabbables.entities) {\n const obj = entity.object3D;\n if (obj && !this.rayDescendants.includes(obj)) {\n this.rayDescendants.push(obj);\n }\n }\n\n // Collect poke/touch interactables\n for (const entity of this.queries.pokeInteractables.entities) {\n const obj = entity.object3D;\n if (obj) {\n this.touchDescendants.push(obj);\n }\n }\n\n // Collect grab interactables (oneHand + twoHands)\n for (const entity of this.queries.oneHandGrabbables.entities) {\n const obj = entity.object3D;\n if (obj) {\n this.grabDescendants.push(obj);\n }\n }\n for (const entity of this.queries.twoHandsGrabbables.entities) {\n const obj = entity.object3D;\n if (obj && !this.grabDescendants.includes(obj)) {\n this.grabDescendants.push(obj);\n }\n }\n\n // Set type-specific arrays on scene\n (this.scene as any).rayDescendants = this.rayDescendants;\n (this.scene as any).touchDescendants = this.touchDescendants;\n (this.scene as any).grabDescendants = this.grabDescendants;\n\n // Also set legacy interactableDescendants as union for backwards compatibility\n const allDescendants = new Set<Object3D>([\n ...this.rayDescendants,\n ...this.touchDescendants,\n ...this.grabDescendants,\n ]);\n (this.scene as any).interactableDescendants = Array.from(allDescendants);\n }\n\n private setupEventListeners(entity: Entity): void {\n const object3D = entity.object3D as Object3D<\n Object3DEventMap & PointerEventsMap\n >;\n if (!object3D) {\n return;\n }\n\n // Skip if already has listeners\n if (this.listeners.has(object3D)) {\n return;\n }\n\n // Compute BVH for all meshes in the entity hierarchy for fast raycasting\n this.computeBoundsTreeForEntity(object3D);\n\n // Enable pointer events for raycasting\n (object3D as any).pointerEvents = 'auto';\n\n // Throttled subtree BVH refresh helper\n const maybeRefreshBVH = () => {\n const now =\n typeof performance !== 'undefined' && performance.now\n ? performance.now()\n : Date.now();\n const last = this.lastBVHUpdate.get(object3D) ?? 0;\n if (now - last > 250) {\n this.computeBoundsTreeForEntity(object3D);\n this.lastBVHUpdate.set(object3D, now);\n }\n };\n\n const enter = (event: PointerEvent) => {\n event.stopPropagation();\n maybeRefreshBVH();\n pointerState.hovered.add(event.pointerId);\n if (!entity.hasComponent(Hovered)) {\n entity.addComponent(Hovered);\n }\n };\n const leave = (event: PointerEvent) => {\n event.stopPropagation();\n pointerState.hovered.delete(event.pointerId);\n if (pointerState.hovered.size === 0) {\n entity.removeComponent(Hovered);\n }\n // pointerleave can fire without a preceding pointerup for flat geometry\n // (poke sphere exits intersection in one frame); clear only this\n // pointer's press defensively.\n pointerState.pressed.delete(event.pointerId);\n if (pointerState.pressed.size === 0) {\n entity.removeComponent(Pressed);\n }\n };\n const down = (event: PointerEvent) => {\n event.stopPropagation();\n maybeRefreshBVH();\n // pointerdown implies the pointer is over the entity; ensure Hovered is\n // present even if a pointerleave/pointerdown sequence cleared it\n // (flat-geometry poke: the sphere can exit then re-contact from behind).\n if (!entity.hasComponent(Hovered)) {\n entity.addComponent(Hovered);\n }\n pointerState.hovered.add(event.pointerId);\n pointerState.pressed.add(event.pointerId);\n if (!entity.hasComponent(Pressed)) {\n entity.addComponent(Pressed);\n }\n };\n const up = (event: PointerEvent) => {\n event.stopPropagation();\n pointerState.pressed.delete(event.pointerId);\n if (pointerState.pressed.size === 0) {\n entity.removeComponent(Pressed);\n }\n };\n const cancel = (event: PointerEvent) => {\n event.stopPropagation();\n pointerState.hovered.delete(event.pointerId);\n pointerState.pressed.delete(event.pointerId);\n if (pointerState.hovered.size === 0) {\n entity.removeComponent(Hovered);\n }\n if (pointerState.pressed.size === 0) {\n entity.removeComponent(Pressed);\n }\n };\n\n const pointerState = {\n hovered: new Set<number>(),\n pressed: new Set<number>(),\n };\n this.listeners.set(object3D, {\n enter,\n leave,\n down,\n up,\n cancel,\n ...pointerState,\n });\n this.listenerEntities.add(entity);\n (object3D as any).addEventListener('pointerenter', enter);\n (object3D as any).addEventListener('pointerleave', leave);\n (object3D as any).addEventListener('pointerdown', down);\n (object3D as any).addEventListener('pointerup', up);\n (object3D as any).addEventListener('pointercancel', cancel);\n }\n\n private computeBoundsTreeForEntity(object3D: Object3D): void {\n object3D.traverse((child) => {\n if ((child as Mesh).isMesh) {\n const mesh = child as Mesh;\n const geometry = (mesh as any).geometry;\n if (\n geometry &&\n !geometry.boundsTree &&\n typeof geometry.computeBoundsTree === 'function'\n ) {\n try {\n geometry.computeBoundsTree();\n } catch (error) {\n console.warn(\n `[InputSystem] Failed to compute BVH for ${mesh.name || 'unnamed'}:`,\n error,\n );\n }\n }\n }\n });\n }\n\n private clearPointerStates(): void {\n for (const entity of this.listenerEntities) {\n const object3D = entity.object3D;\n const state = object3D ? this.listeners.get(object3D) : undefined;\n state?.hovered.clear();\n state?.pressed.clear();\n if (entity.active) {\n entity.removeComponent(Hovered).removeComponent(Pressed);\n }\n }\n }\n\n private cleanupAllEventListeners(): void {\n for (const entity of [...this.listenerEntities]) {\n this.cleanupEventListeners(entity);\n }\n }\n\n private cleanupEventListeners(entity: Entity): void {\n this.listenerEntities.delete(entity);\n const object3D = entity.object3D as any;\n if (!object3D) {\n return;\n }\n const fns = this.listeners.get(object3D);\n if (fns) {\n object3D.removeEventListener('pointerenter', fns.enter);\n object3D.removeEventListener('pointerleave', fns.leave);\n object3D.removeEventListener('pointerdown', fns.down);\n object3D.removeEventListener('pointerup', fns.up);\n object3D.removeEventListener('pointercancel', fns.cancel);\n fns.hovered.clear();\n fns.pressed.clear();\n this.listeners.delete(object3D);\n }\n // A query also disqualifies an entity when it is destroyed. At that point\n // Elics has already cleared its components and rejects further mutations.\n // The listeners still need to be detached from the retained Object3D, but\n // there are no transient input tags left to remove from an inactive entity.\n if (entity.active) {\n entity.removeComponent(Hovered).removeComponent(Pressed);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-tags.d.ts","sourceRoot":"","sources":["../../src/input/state-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe,+BAI3B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,+BAI5B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,+BAAkB,CAAC"}
1
+ {"version":3,"file":"state-tags.d.ts","sourceRoot":"","sources":["../../src/input/state-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe,+BAI3B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,+BAI5B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,+BAAkB,CAAC"}
@@ -6,6 +6,8 @@ import { createComponent } from 'elics';
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
+ // Import from the leaf module rather than '../ecs/index.js': the barrel pulls
10
+ // in builtin-components, which imports this file, forming a cycle.
9
11
  /**
10
12
  * Marks an entity as eligible for ray-based pointer interaction.
11
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"state-tags.js","sources":["../../src/input/state-tags.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,eAAe,GAAG,eAAe,CAC5C,iBAAiB,EACjB,EAAE,EACF,gEAAgE;AAGlE;;;;;;;;;;;;;AAaG;AACI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB,EAAE,EACF,yDAAyD;AAG3D;;;;;;;;;;AAUG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;;AAUG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,kEAAkE;AAGpE;;AAEG;AACI,MAAM,YAAY,GAAG;;;;"}
1
+ {"version":3,"file":"state-tags.js","sources":["../../src/input/state-tags.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\n// Import from the leaf module rather than '../ecs/index.js': the barrel pulls\n// in builtin-components, which imports this file, forming a cycle.\nimport { createComponent } from '../ecs/component.js';\n\n/**\n * Marks an entity as eligible for ray-based pointer interaction.\n *\n * @remarks\n * - The {@link InputSystem} discovers all entities with `RayInteractable` and\n * registers their Object3D roots as raycast targets.\n * - Used for UI elements, buttons, and clickable objects interacted via ray pointer.\n * - When a pointer enters/leaves or presses/releases on the entity, the system\n * adds/removes the transient tags {@link Hovered} and {@link Pressed}.\n *\n * @category Input\n * @example Highlight on hover\n * ```ts\n * export class HighlightSystem extends createSystem({ items: { required: [RayInteractable] } }) {\n * update() {\n * this.queries.items.entities.forEach(e => {\n * e.object3D.material.emissiveIntensity = e.hasComponent(Hovered) ? 1.0 : 0.0;\n * });\n * }\n * }\n * ```\n */\nexport const RayInteractable = createComponent(\n 'RayInteractable',\n {},\n 'Marks an entity as eligible for ray-based pointer interaction.',\n);\n\n/**\n * Marks an entity as eligible for poke/touch interaction.\n *\n * @remarks\n * - Used for UI elements that can be poked/touched with finger or controller.\n * - Auto-selects when finger crosses the surface (distance <= 0).\n * - Uses hysteresis (separate enter/exit thresholds) to prevent flickering.\n *\n * @category Input\n * @example Create a pokeable button\n * ```ts\n * entity.addComponent(PokeInteractable);\n * ```\n */\nexport const PokeInteractable = createComponent(\n 'PokeInteractable',\n {},\n 'Marks an entity as eligible for poke/touch interaction.',\n);\n\n/**\n * A transient tag set while a pointer is intersecting an interactable.\n *\n * @remarks\n * - Managed by {@link InputSystem}; do not add/remove this component manually.\n * - Use as a declarative condition for hover effects, tooltips, or affordances.\n * - Works with both RayInteractable and PokeInteractable entities.\n *\n * @category Input\n * @hideineditor\n */\nexport const Hovered = createComponent(\n 'Hovered',\n {},\n 'A tag added by InputSystem while a pointer is hovering over the entity.',\n);\n\n/**\n * A transient tag set while a pointer is actively pressing an interactable.\n *\n * @remarks\n * - Managed by {@link InputSystem}; do not add/remove this component manually.\n * - Often used to gate activation logic or pressed-state visuals.\n * - Works with both RayInteractable and PokeInteractable entities.\n *\n * @category Input\n * @hideineditor\n */\nexport const Pressed = createComponent(\n 'Pressed',\n {},\n 'A tag added by InputSystem while the entity is actively pressed.',\n);\n\n/**\n * @deprecated Use `RayInteractable` instead. This will be removed in a future version.\n */\nexport const Interactable = RayInteractable;\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAEH;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,eAAe,GAAG,eAAe,CAC5C,iBAAiB,EACjB,EAAE,EACF,gEAAgE;AAGlE;;;;;;;;;;;;;AAaG;AACI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB,EAAE,EACF,yDAAyD;AAG3D;;;;;;;;;;AAUG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;;AAUG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,kEAAkE;AAGpE;;AAEG;AACI,MAAM,YAAY,GAAG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"stateful-browser-gamepad.js","sources":["../../src/input/stateful-browser-gamepad.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stateful-browser-gamepad.js","sources":["../../src/input/stateful-browser-gamepad.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 { ButtonAxesLayout, StatefulButtonAxesDevice } from '@iwsdk/xr-input';\n\nexport enum BrowserGamepadButton {\n South = 'standard-south',\n East = 'standard-east',\n West = 'standard-west',\n North = 'standard-north',\n LeftBumper = 'standard-left-bumper',\n RightBumper = 'standard-right-bumper',\n LeftTrigger = 'standard-left-trigger',\n RightTrigger = 'standard-right-trigger',\n Select = 'standard-select',\n Start = 'standard-start',\n LeftStick = 'standard-left-stick',\n RightStick = 'standard-right-stick',\n DPadUp = 'standard-dpad-up',\n DPadDown = 'standard-dpad-down',\n DPadLeft = 'standard-dpad-left',\n DPadRight = 'standard-dpad-right',\n Home = 'standard-home',\n}\n\nexport enum BrowserGamepadAxis {\n LeftStick = 'standard-left-stick-axes',\n RightStick = 'standard-right-stick-axes',\n}\n\nconst STANDARD_GAMEPAD_LAYOUT: ButtonAxesLayout = {\n selectComponentId: BrowserGamepadButton.South,\n components: {\n [BrowserGamepadButton.South]: {\n type: 'button',\n gamepadIndices: { button: 0 },\n },\n [BrowserGamepadButton.East]: {\n type: 'button',\n gamepadIndices: { button: 1 },\n },\n [BrowserGamepadButton.West]: {\n type: 'button',\n gamepadIndices: { button: 2 },\n },\n [BrowserGamepadButton.North]: {\n type: 'button',\n gamepadIndices: { button: 3 },\n },\n [BrowserGamepadButton.LeftBumper]: {\n type: 'button',\n gamepadIndices: { button: 4 },\n },\n [BrowserGamepadButton.RightBumper]: {\n type: 'button',\n gamepadIndices: { button: 5 },\n },\n [BrowserGamepadButton.LeftTrigger]: {\n type: 'trigger',\n gamepadIndices: { button: 6 },\n },\n [BrowserGamepadButton.RightTrigger]: {\n type: 'trigger',\n gamepadIndices: { button: 7 },\n },\n [BrowserGamepadButton.Select]: {\n type: 'button',\n gamepadIndices: { button: 8 },\n },\n [BrowserGamepadButton.Start]: {\n type: 'button',\n gamepadIndices: { button: 9 },\n },\n [BrowserGamepadButton.LeftStick]: {\n type: 'button',\n gamepadIndices: { button: 10 },\n },\n [BrowserGamepadButton.RightStick]: {\n type: 'button',\n gamepadIndices: { button: 11 },\n },\n [BrowserGamepadButton.DPadUp]: {\n type: 'button',\n gamepadIndices: { button: 12 },\n },\n [BrowserGamepadButton.DPadDown]: {\n type: 'button',\n gamepadIndices: { button: 13 },\n },\n [BrowserGamepadButton.DPadLeft]: {\n type: 'button',\n gamepadIndices: { button: 14 },\n },\n [BrowserGamepadButton.DPadRight]: {\n type: 'button',\n gamepadIndices: { button: 15 },\n },\n [BrowserGamepadButton.Home]: {\n type: 'button',\n gamepadIndices: { button: 16 },\n },\n [BrowserGamepadAxis.LeftStick]: {\n type: 'thumbstick',\n gamepadIndices: { xAxis: 0, yAxis: 1 },\n },\n [BrowserGamepadAxis.RightStick]: {\n type: 'thumbstick',\n gamepadIndices: { xAxis: 2, yAxis: 3 },\n },\n },\n};\n\nexport class StatefulBrowserGamepad extends StatefulButtonAxesDevice {\n public gamepad: Gamepad;\n\n constructor(gamepad: Gamepad) {\n super(STANDARD_GAMEPAD_LAYOUT, gamepad.buttons.length);\n this.gamepad = gamepad;\n }\n\n get index(): number {\n return this.gamepad.index;\n }\n\n get id(): string {\n return this.gamepad.id;\n }\n\n get connected(): boolean {\n return this.gamepad.connected;\n }\n\n get mapping(): GamepadMappingType {\n return this.gamepad.mapping;\n }\n\n refresh(gamepad: Gamepad = this.gamepad): void {\n this.gamepad = gamepad;\n super.update(gamepad.buttons, gamepad.axes);\n }\n}\n"],"names":[],"mappings":"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"}