@iwsdk/core 0.5.3 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/asset/cache-manager.js.map +1 -1
  6. package/dist/asset/loaders/audio-loader.js.map +1 -1
  7. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  8. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  9. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  10. package/dist/asset/loaders/texture-loader.js.map +1 -1
  11. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  12. package/dist/audio/audio-pool.js.map +1 -1
  13. package/dist/audio/audio-system.js.map +1 -1
  14. package/dist/audio/audio-utils.js.map +1 -1
  15. package/dist/audio/audio.js.map +1 -1
  16. package/dist/camera/camera-source.js.map +1 -1
  17. package/dist/camera/camera-system.d.ts +7 -3
  18. package/dist/camera/camera-system.d.ts.map +1 -1
  19. package/dist/camera/camera-system.js +81 -50
  20. package/dist/camera/camera-system.js.map +1 -1
  21. package/dist/camera/camera-utils.d.ts +5 -0
  22. package/dist/camera/camera-utils.d.ts.map +1 -1
  23. package/dist/camera/camera-utils.js +8 -1
  24. package/dist/camera/camera-utils.js.map +1 -1
  25. package/dist/camera/types.js.map +1 -1
  26. package/dist/depth/depth-occludable.js.map +1 -1
  27. package/dist/depth/depth-sensing-system.d.ts +3 -0
  28. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  29. package/dist/depth/depth-sensing-system.js +55 -1
  30. package/dist/depth/depth-sensing-system.js.map +1 -1
  31. package/dist/depth/depth-textures.js.map +1 -1
  32. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  33. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  34. package/dist/ecs/builtin-components.js.map +1 -1
  35. package/dist/ecs/component-editor-metadata.js.map +1 -1
  36. package/dist/ecs/component-manifest.js.map +1 -1
  37. package/dist/ecs/entity.js.map +1 -1
  38. package/dist/ecs/system.js.map +1 -1
  39. package/dist/ecs/world.d.ts +2 -0
  40. package/dist/ecs/world.d.ts.map +1 -1
  41. package/dist/ecs/world.js +4 -0
  42. package/dist/ecs/world.js.map +1 -1
  43. package/dist/environment/dome-gradient.js.map +1 -1
  44. package/dist/environment/dome-texture.js.map +1 -1
  45. package/dist/environment/environment-system.js.map +1 -1
  46. package/dist/environment/gradient-environment.js.map +1 -1
  47. package/dist/environment/ibl-gradient.js.map +1 -1
  48. package/dist/environment/ibl-texture.js.map +1 -1
  49. package/dist/environment/scene-ar-environment.js.map +1 -1
  50. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  51. package/dist/environment-raycast/raycast-target.js.map +1 -1
  52. package/dist/grab/distance-grabbable.d.ts +5 -0
  53. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  54. package/dist/grab/distance-grabbable.js +5 -0
  55. package/dist/grab/distance-grabbable.js.map +1 -1
  56. package/dist/grab/grab-helpers.js.map +1 -1
  57. package/dist/grab/grab-system.js.map +1 -1
  58. package/dist/grab/grab-warnings.js.map +1 -1
  59. package/dist/grab/grabbed.js.map +1 -1
  60. package/dist/grab/handles.d.ts +6 -0
  61. package/dist/grab/handles.d.ts.map +1 -1
  62. package/dist/grab/handles.js +46 -12
  63. package/dist/grab/handles.js.map +1 -1
  64. package/dist/grab/index.js.map +1 -1
  65. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  66. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  67. package/dist/grab/one-hand-grabbable.js +5 -0
  68. package/dist/grab/one-hand-grabbable.js.map +1 -1
  69. package/dist/grab/pointer-events-patch.js.map +1 -1
  70. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  71. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  72. package/dist/grab/two-hands-grabbable.js +5 -0
  73. package/dist/grab/two-hands-grabbable.js.map +1 -1
  74. package/dist/index.js +4 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/browser-camera.js.map +1 -1
  77. package/dist/init/index.d.ts +2 -2
  78. package/dist/init/index.d.ts.map +1 -1
  79. package/dist/init/player-camera.js.map +1 -1
  80. package/dist/init/session-grant.d.ts +34 -0
  81. package/dist/init/session-grant.d.ts.map +1 -0
  82. package/dist/init/session-grant.js +89 -0
  83. package/dist/init/session-grant.js.map +1 -0
  84. package/dist/init/world-initializer.d.ts +87 -4
  85. package/dist/init/world-initializer.d.ts.map +1 -1
  86. package/dist/init/world-initializer.js +45 -41
  87. package/dist/init/world-initializer.js.map +1 -1
  88. package/dist/init/xr.d.ts +19 -0
  89. package/dist/init/xr.d.ts.map +1 -1
  90. package/dist/init/xr.js +136 -41
  91. package/dist/init/xr.js.map +1 -1
  92. package/dist/input/canvas-pointer-system.d.ts +2 -0
  93. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  94. package/dist/input/canvas-pointer-system.js +33 -13
  95. package/dist/input/canvas-pointer-system.js.map +1 -1
  96. package/dist/input/input-actions.js.map +1 -1
  97. package/dist/input/input-manager.js.map +1 -1
  98. package/dist/input/input-system.d.ts.map +1 -1
  99. package/dist/input/input-system.js +5 -2
  100. package/dist/input/input-system.js.map +1 -1
  101. package/dist/input/state-tags.js.map +1 -1
  102. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  103. package/dist/input/stateful-keyboard.js.map +1 -1
  104. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  105. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  106. package/dist/layers/xr-cylinder-layer.js +2 -1
  107. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  108. package/dist/layers/xr-layer-init.d.ts +19 -0
  109. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  110. package/dist/layers/xr-layer-init.js +20 -0
  111. package/dist/layers/xr-layer-init.js.map +1 -0
  112. package/dist/layers/xr-layer-state.js.map +1 -1
  113. package/dist/layers/xr-layer-system.d.ts +41 -1
  114. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  115. package/dist/layers/xr-layer-system.js +506 -132
  116. package/dist/layers/xr-layer-system.js.map +1 -1
  117. package/dist/layers/xr-layer-transform.d.ts +18 -0
  118. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  119. package/dist/layers/xr-layer-transform.js +115 -0
  120. package/dist/layers/xr-layer-transform.js.map +1 -0
  121. package/dist/layers/xr-quad-layer.d.ts +2 -1
  122. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  123. package/dist/layers/xr-quad-layer.js +2 -1
  124. package/dist/layers/xr-quad-layer.js.map +1 -1
  125. package/dist/level/level-component-applier.d.ts +2 -0
  126. package/dist/level/level-component-applier.d.ts.map +1 -1
  127. package/dist/level/level-component-applier.js +24 -5
  128. package/dist/level/level-component-applier.js.map +1 -1
  129. package/dist/level/level-player-rig.js.map +1 -1
  130. package/dist/level/level-root.js.map +1 -1
  131. package/dist/level/level-scene-environment.js.map +1 -1
  132. package/dist/level/level-scene-json-importer.js.map +1 -1
  133. package/dist/level/level-scene-material.js.map +1 -1
  134. package/dist/level/level-scene-object.js.map +1 -1
  135. package/dist/level/level-scene-primitive.js.map +1 -1
  136. package/dist/level/level-system.js.map +1 -1
  137. package/dist/level/level-tag.js.map +1 -1
  138. package/dist/lighting/light-binding.js.map +1 -1
  139. package/dist/lighting/light-components.js.map +1 -1
  140. package/dist/lighting/light-system.js.map +1 -1
  141. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  142. package/dist/locomotion/locomotion-environment.js.map +1 -1
  143. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  144. package/dist/locomotion/locomotion.js.map +1 -1
  145. package/dist/locomotion/materials/line.js.map +1 -1
  146. package/dist/locomotion/slide.js.map +1 -1
  147. package/dist/locomotion/teleport.js.map +1 -1
  148. package/dist/locomotion/turn.js.map +1 -1
  149. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  150. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  151. package/dist/mcp/ecs-debug-tools.js +113 -10
  152. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  153. package/dist/mcp/index.d.ts +1 -0
  154. package/dist/mcp/index.d.ts.map +1 -1
  155. package/dist/mcp/mcp-runtime.d.ts +2 -0
  156. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  157. package/dist/mcp/mcp-runtime.js +41 -0
  158. package/dist/mcp/mcp-runtime.js.map +1 -1
  159. package/dist/mcp/scene-tools.js.map +1 -1
  160. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  161. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  162. package/dist/mcp/ui-debug-tools.js +412 -0
  163. package/dist/mcp/ui-debug-tools.js.map +1 -0
  164. package/dist/physics/index.js +1 -1
  165. package/dist/physics/physics-runtime.d.ts +22 -0
  166. package/dist/physics/physics-runtime.d.ts.map +1 -0
  167. package/dist/physics/physics-runtime.js +423 -0
  168. package/dist/physics/physics-runtime.js.map +1 -0
  169. package/dist/physics/physics-system.d.ts +84 -108
  170. package/dist/physics/physics-system.d.ts.map +1 -1
  171. package/dist/physics/physics-system.js +686 -555
  172. package/dist/physics/physics-system.js.map +1 -1
  173. package/dist/physics/physics-transport.d.ts +20 -0
  174. package/dist/physics/physics-transport.d.ts.map +1 -0
  175. package/dist/physics/physics-transport.js +111 -0
  176. package/dist/physics/physics-transport.js.map +1 -0
  177. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  178. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  179. package/dist/physics/physics-worker-protocol.js +41 -0
  180. package/dist/physics/physics-worker-protocol.js.map +1 -0
  181. package/dist/physics/physics-worker-utils.d.ts +8 -0
  182. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  183. package/dist/physics/physics-worker-utils.js +12 -0
  184. package/dist/physics/physics-worker-utils.js.map +1 -0
  185. package/dist/physics/physics-worker.d.ts +8 -0
  186. package/dist/physics/physics-worker.d.ts.map +1 -0
  187. package/dist/physics/physics-worker.js +66 -0
  188. package/dist/physics/physics-worker.js.map +1 -0
  189. package/dist/physics/physicsBody.js.map +1 -1
  190. package/dist/physics/physicsManipulation.js.map +1 -1
  191. package/dist/physics/physicsShape.js.map +1 -1
  192. package/dist/physics/utils.js.map +1 -1
  193. package/dist/project/normalize.js +7 -1
  194. package/dist/project/normalize.js.map +1 -1
  195. package/dist/project/paths.js.map +1 -1
  196. package/dist/project/types.d.ts +7 -1
  197. package/dist/project/types.d.ts.map +1 -1
  198. package/dist/project/types.js.map +1 -1
  199. package/dist/project/validation.js +36 -2
  200. package/dist/project/validation.js.map +1 -1
  201. package/dist/runtime/three.js.map +1 -1
  202. package/dist/scene-understanding/anchor.js.map +1 -1
  203. package/dist/scene-understanding/mesh.js.map +1 -1
  204. package/dist/scene-understanding/plane.js.map +1 -1
  205. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  206. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  207. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  208. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  209. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  210. package/dist/transform/synced-euler.js.map +1 -1
  211. package/dist/transform/synced-quaternion.js.map +1 -1
  212. package/dist/transform/synced-vector3.js.map +1 -1
  213. package/dist/transform/transform-component.js.map +1 -1
  214. package/dist/transform/transform-utils.js.map +1 -1
  215. package/dist/transform/transform.js.map +1 -1
  216. package/dist/ui/document.js.map +1 -1
  217. package/dist/ui/follow-component.js.map +1 -1
  218. package/dist/ui/follow.d.ts.map +1 -1
  219. package/dist/ui/follow.js +0 -1
  220. package/dist/ui/follow.js.map +1 -1
  221. package/dist/ui/panel-components.js.map +1 -1
  222. package/dist/ui/screenspace-component.js.map +1 -1
  223. package/dist/ui/screenspace.js.map +1 -1
  224. package/dist/ui/ui.js.map +1 -1
  225. package/dist/ui/uikitml-asset.js.map +1 -1
  226. package/dist/ui/uikitml.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dist/visibility/visibility-component.js.map +1 -1
  232. package/dist/visibility/visibility.js.map +1 -1
  233. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"world.js","sources":["../../src/ecs/world.ts"],"sourcesContent":[null],"names":["ElicsWorld"],"mappings":";;;;;;;;;;AAAA;;;;;AAKG;IA2CS;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC;AACpC,CAAC,EALW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;AA6B3B;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACG,MAAO,KAAM,SAAQA,OAAU,CAAA;AAmDnC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAzCF,IAAA,CAAA,aAAa,GAAW,eAAe;AAKvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC;;QAEtD,IAAA,CAAA,SAAS,GAAG,IAAI;;QAWf,IAAA,CAAA,iBAAiB,GAAsB,EAAE;;QAEzC,IAAA,CAAA,SAAS,GAAG,KAAK;AAEjB,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,GAAG,EAE9C;;AAEK,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAqB;AAgBrD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CACvE,IAAI,CAAC,aAAa,CACnB;QACD,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,CAAC,MAAc,KAAI;YAC5D,mBAAmB,CAAC,MAAM,CAAC;AAC3B,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ;YAC3B,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,iBAAiB;AACnD,gBAAA,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;AACtC,oBAAA,GAAG,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI;AACrC,oBAAA,YAAY,EAAE;gBAChB;;AAEA,gBAAA,IAAK,MAAc,CAAC,iBAAiB,EAAE;AACrC,oBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;oBAClC,OAAQ,MAAc,CAAC,iBAAiB;gBAC1C;gBACA,GAAG,CAAC,gBAAgB,EAAE;gBACtB,OAAO,MAAM,CAAC,QAAQ;YACxB;AACF,QAAA,CAAC;IACH;AAEA;;;;;;;AAOG;AACK,IAAA,wBAAwB,CAAC,MAAgB,EAAA;AAC/C,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAU,KAAI;;AAE7B,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC1B;;AAGA,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,MAAM,SAAS,GAAe,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;sBACtD,KAAK,CAAC;AACR,sBAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;AAEpB,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;;oBAEhC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvC,wBAAA,MAAM,KAAK,GAAI,QAAgB,CAAC,GAAG,CAAC;wBACpC,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;;AAEhD,4BAAA,IAAI,KAAK,CAAC,SAAS,EAAE;gCACnB,KAAK,CAAC,OAAO,EAAE;4BACjB;wBACF;oBACF;oBACA,QAAQ,CAAC,OAAO,EAAE;gBACpB;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,KAAK,CAAC,YAAY,EAAY;IACvC;;AAGA,IAAA,yBAAyB,CAAC,QAAiB,EAAA;;QACzC,CAAA,EAAA,GAAA,IAAI,CAAC,sBAAsB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,IAA3B,IAAI,CAAC,sBAAsB,GAAK,IAAI,OAAO,EAAE,CAAA;AAC7C,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1C,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,+BAA+B,EAAE;AAC3D,YAAA,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACvC;IACF;;AAGA,IAAA,wBAAwB,CAAC,QAAqC,EAAA;AAC5D,QAAA,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;AACvC,YAAA,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACvC;QACA,OAAO,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC;IACpE;IAEA,qBAAqB,CACnB,MAAiB,EACjB,eAAoE,EAAA;;AAEpE,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAY;QAC7C,MAAM,GAAG,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAN,MAAM,GAAI,IAAI,QAAQ,EAAE;AACpC,QAAA,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO;;AAElC,QAAA,MAAM,CAAC,QAAQ,GAAG,GAEjB;QAED,IAAI,MAAM,GAAuB,SAAS;QAC1C,IAAI,UAAU,GAAG,KAAK;QAEtB,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,OAAQ,eAAuB,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACtD,MAAM,GAAG,eAAyB;YACpC;iBAAO;gBACL,MAAM,IAAI,GAAG,eAGZ;AACD,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,gBAAA,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU;YAChC;QACF;QAEA,IAAI,CAAC,MAAM,EAAE;;AAEX,YAAA,MAAM,aAAa,GAAG,CAAC,GAAa,KAAM,GAAW,CAAC,OAAO,KAAK,IAAI;AACtE,YAAA,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;gBACnC,MAAM,GAAG,SAAS;gBAClB,UAAU,GAAG,IAAI;YACnB;iBAAO;AACL,gBAAA,MAAM,GAAG;sBACL,IAAI,CAAC;AACP,uBAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,WAAW,CAAC;YACnD;QACF;QAEA,MAAM,YAAY,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,QAAQ;AACrC,QAAA,IAAI,YAAY,IAAI,YAAY,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE;AACvE,YAAA,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QACvB;QAEA,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC;QAC1C,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;;QAG9D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3D;AACA,QAAA,OAAO,MAAM;IACf;;AAGA,IAAA,cAAc,CAAgC,MAAc,EAAA;;AAC1D,QAAA,IAAI,MAA4B;QAChC,KAAK,MAAM,IAAI,IAAI;AACjB,YAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,0CAAE,QAAQ;AACjC,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ;AAC5B,SAAA,EAAE;AACD,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,IACE,CAAC,MAAM;AACP,oBAAA,MAAM,CAAC,QAAQ,CAAC,gBAAgB,KAAK,MAAM;AAC3C,qBAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI;wBACxC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,KAAK,IAAI,CAAC,aAAa,CAAC,EAC3D;oBACA,MAAM,GAAG,MAAM;gBACjB;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,MAAuB;IAChC;;AAGA,IAAA,kBAAkB,CAAgC,MAAc,EAAA;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAI,MAAM,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAA,mCAAA,CAAqC,CAC7D;QACH;AACA,QAAA,OAAO,MAAM;IACf;;AAGA,IAAA,cAAc,CAAC,MAAc,EAAA;;QAC3B,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS;QACpD,OAAO,OAAO,KAAK,KAAK;cACnB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK;cAC1C,SAAS;IACf;;AAGA,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAA,mCAAA,CAAqC,CAC7D;QACH;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,QAAQ,CAAC,SAA8B,EAAA;AACrC,QAAA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAC3B;;IAGA,MAAM,SAAS,CAAC,GAAY,EAAA;QAC1B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;QACvC,IAAI,CAAC,iBAAiB,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAH,GAAG,GAAI,EAAE;QAClC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;AAChC,QAAA,CAAC,CAAC;IACJ;;IAGA,MAAM,iBAAiB,CAAC,QAAuB,EAAA;QAC7C,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ;QACtC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;AAChC,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;;AACJ,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,EAAE;IACrB;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;YACnE;QACF;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB;AACpC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACjC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAG,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACrE;AAEA;;;;;;;;;;AAUG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;;;;;;;;;AAUG;AACH,IAAA,IAAI,OAAO,GAAA;;AACT,QAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,EAAE,CAAC,QAAQ,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;IAC7C;AAEA;;;;;AAKG;AACH,IAAA,IAAI,gBAAgB,GAAA;;AAClB,QAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,EAAE,CAAC,iBAAiB,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;IACtD;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,SAAS,CAAC,QAA2B,EAAA;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAA,CAAC;IACH;AAEA;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,KAAc,EAAE,KAAa,EAAE,IAAY,EAAA;QAC7D,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE;YACpC;QACF;AACA,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC5C,YAAA,IAAI;AACF,gBAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;YAC9B;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;YAC5D;QACF;IACF;AAEA;;;;;;;;;;;AAWG;IACH,MAAM,oBAAoB,CACxB,OAA6B,EAAA;AAE7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,oBAAoB,CAAA,EAAE;AAClC,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC;QACpD;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACV,2EAA2E,EAC3E,KAAK,CACN;AACD,YAAA,OAAO,SAAS;QAClB;IACF;AAEA;;;;;;;;;AASG;IACH,MAAM,qCAAqC,CACzC,OAA2C,EAAA;AAE3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,qCAAqC,CAAA,EAAE;AACnD,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,OAAO,CAAC,qCAAqC,CAAC,OAAO,CAAC;QACrE;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACV,4FAA4F,EAC5F,KAAK,CACN;AACD,YAAA,OAAO,SAAS;QAClB;IACF;AAEA;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACxC;AAEA;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,EAAc,EAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;IACjC;AAEA;;;;;;;;;;;;AAYG;IACH,OAAO,GAAA;;;;AAGL,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACtC,YAAA,IAAI;AACF,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,MAAmC,EAAC,OAAO,kDAAI;YAClD;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;YACxD;QACF;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,YAAA,IAAI;AACF,gBAAA,EAAE,EAAE;YACN;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;YACjD;QACF;IACF;IAEA,MAAM,CAAC,KAAa,EAAE,IAAY,EAAA;AAChC,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;IAC3B;AAEA,IAAA,iBAAiB,CAAC,SAAuB,EAAA;AACvC,QAAA,OAAO,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC;IAC3C;;IAGA,aAAa,GAAA;;AACX,QAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK;IACxD;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;;;;;;AAOG;AACH;;;;;;;;;;;;AAYG;AACH,IAAA,aAAa,MAAM,CACjB,SAAsB,EACtB,OAAsB,EAAA;QAEtB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,OAAO,8BAA8B,CAAC;AACxE,QAAA,OAAO,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5C;AACD;;;;"}
1
+ {"version":3,"file":"world.js","sources":["../../src/ecs/world.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 { SceneDocument } from '@iwsdk/scene-composition';\nimport type { SceneComponentCatalog } from '@iwsdk/scene-composition';\nimport { XROrigin } from '@iwsdk/xr-input';\nimport type { PointerEventsMap } from '@pmndrs/pointer-events';\nimport { Signal, signal } from '@preact/signals-core';\nimport { AnyComponent, World as ElicsWorld } from 'elics';\nimport { AssetManager, RenderableAssetRegistry } from '../asset/index.js';\n// Environment is driven by components/systems; no world helpers\n// NOTE: import `launchXR` and types directly from submodules — not the\n// `../init/index.js` barrel — so loading this file does not pull in\n// `init/world-initializer.js`. That would create a value-level cycle with\n// audio-system.ts (and other systems that import the ecs barrel), causing\n// the bundler to emit System classes before their referenced Component\n// constants, producing `undefined.bitmask` crashes at QueryManager.registerQuery.\n// `initializeWorld` is loaded lazily inside `World.create` for the same reason.\nimport { armSessionGrantCaptureForOptions } from '../init/session-grant.js';\nimport type { WorldOptions } from '../init/world-initializer.js';\nimport { launchXR } from '../init/xr.js';\nimport type { XROptions } from '../init/xr.js';\nimport type { InputManager } from '../input/index.js';\n// Import LevelTag from its leaf module — not '../level/index.js' — so that\n// loading ecs/world.ts does not transitively pull in level-system.ts (which\n// would re-enter '../ecs/index.js' and form a cycle, leading to TDZ\n// undefined.bitmask crashes for any component captured in System.queries).\nimport { LevelTag } from '../level/level-tag.js';\nimport type { MCPRuntime } from '../mcp/index.js';\nimport type { Object3DEventMap } from '../runtime/index.js';\nimport {\n Material,\n Object3D,\n PerspectiveCamera,\n Scene,\n Vector3,\n WebGLRenderer,\n} from '../runtime/index.js';\n// See note above on LevelTag — import Transform directly from its leaf\n// module to avoid cycling back through '../ecs/index.js' via the transform\n// barrel.\nimport { Transform } from '../transform/transform.js';\nimport { Visibility } from '../visibility/visibility-component.js';\nimport { Entity } from './entity.js';\n\nexport enum VisibilityState {\n NonImmersive = 'non-immersive',\n Hidden = 'hidden',\n Visible = 'visible',\n VisibleBlurred = 'visible-blurred',\n}\n\nexport type GradientColors = {\n sky: number;\n equator: number;\n ground: number;\n};\n\n/**\n * Callback invoked once per render-loop tick while an XR session is active,\n * registered via {@link World.onXRFrame}.\n *\n * @param frame The live {@link XRFrame} for this tick. Only valid synchronously\n * inside the callback — do not retain it across ticks.\n * @param delta Seconds since the previous frame.\n * @param time Accumulated render-loop time in seconds (monotonic within a session).\n * @category XR Runtime\n */\nexport type OnXRFrameCallback = (\n frame: XRFrame,\n delta: number,\n time: number,\n) => void;\n\n/**\n * World is the root ECS container, Three.js scene/renderer owner, and XR session gateway.\n *\n * @remarks\n * - Construct a world with {@link World.create} (recommended) which wires the renderer, scene, default systems\n * (Input, UI, Audio, Level) and starts the render loop.\n * - The world exposes convenience handles like {@link World.input | input},\n * {@link World.player | player} (the persistent player/XR origin), and {@link World.assetManager}.\n * - Feature systems (Grabbing, Locomotion) are opt‑in via {@link WorldOptions.features}.\n *\n * @category Runtime\n * @example\n * ```ts\n * import { World, SessionMode } from '@iwsdk/core';\n *\n * const container = document.getElementById('scene-container') as HTMLElement;\n * const world = await World.create(container, {\n * xr: { sessionMode: SessionMode.ImmersiveVR },\n * features: { enableLocomotion: true, enableGrabbing: true },\n * level: '/scenes/main.iwsdk.scene.json'\n * });\n * ```\n */\nexport class World extends ElicsWorld {\n public input!: InputManager;\n public player!: XROrigin;\n public assetManager!: typeof AssetManager;\n /** Renderable assets registered by the application manifest. */\n public assets!: RenderableAssetRegistry;\n /** Component definitions shared by scene validation and editor tooling. */\n public componentCatalog!: SceneComponentCatalog;\n public scene!: Scene;\n public sceneEntity!: Entity;\n public activeLevel!: Signal<Entity>;\n public activeLevelId: string = 'level:default';\n public camera!: PerspectiveCamera;\n public cameraEntity!: Entity;\n public renderer!: WebGLRenderer;\n public session: XRSession | undefined;\n public visibilityState = signal(VisibilityState.NonImmersive);\n /** Whether this world was created with XR support enabled. */\n public xrEnabled = true;\n /** Whether an explicit XR session request is currently settling. @internal */\n public sessionRequestPending = false;\n public requestedLevelUrl: string | undefined;\n public requestedLevelDocument: SceneDocument | undefined;\n public _resolveLevelLoad: (() => void) | undefined;\n public _rejectLevelLoad: ((reason: unknown) => void) | undefined;\n /** Default XR options used when calling {@link World.launchXR} without overrides. */\n public xrDefaults: import('../init/xr.js').XROptions | undefined;\n /** MCP runtime for framework-specific tools. Set automatically during World.create(). */\n public mcpRuntime?: MCPRuntime;\n\n /** Teardown callbacks run by {@link World.destroy} (render loop, global listeners). */\n private worldCleanupFuncs: Array<() => void> = [];\n /** Guards {@link World.destroy} so a second call is a no-op. */\n private destroyed = false;\n private authoredPlayerPosition?: Vector3;\n private authoredPlayerPositionListeners = new Set<\n (position: Vector3) => void\n >();\n /** Per-frame XR callbacks registered via {@link World.onXRFrame}. */\n private xrFrameCallbacks = new Set<OnXRFrameCallback>();\n\n /** Entity wrapping the XROrigin Group (persistent, survives level changes). */\n public playerEntity!: Entity;\n /** Entity wrapping the player head Group (persistent). */\n public playerHeadEntity!: Entity;\n /** Entities for all XR input space Groups under the player rig (all persistent). */\n public playerSpaceEntities!: {\n head: Entity;\n raySpaces: { left: Entity; right: Entity };\n gripSpaces: { left: Entity; right: Entity };\n indexTipSpaces: { left: Entity; right: Entity };\n };\n\n constructor() {\n super();\n const originalReleaseFunc = this.entityManager.releaseEntityInstance.bind(\n this.entityManager,\n );\n this.entityManager.releaseEntityInstance = (entity: Entity) => {\n originalReleaseFunc(entity);\n const obj = entity.object3D;\n if (obj) {\n const disposeAsset = obj.userData.iwsdkDisposeAsset;\n if (typeof disposeAsset === 'function') {\n obj.userData.iwsdkDisposeAsset = null;\n disposeAsset();\n }\n // Check if entity was marked for resource disposal\n if ((entity as any)._disposeResources) {\n this.disposeObject3DResources(obj);\n delete (entity as any)._disposeResources;\n }\n obj.removeFromParent();\n delete entity.object3D;\n }\n };\n }\n\n /**\n * Dispose of an Object3D's GPU resources (geometry, materials, textures).\n * Traverses all descendants and cleans up disposable resources.\n *\n * @remarks\n * This is called automatically when an entity is destroyed with `disposeResources: true`.\n * Use with caution when resources may be shared across multiple entities.\n */\n private disposeObject3DResources(object: Object3D): void {\n object.traverse((child: any) => {\n // Dispose geometry\n if (child.geometry) {\n child.geometry.dispose();\n }\n\n // Dispose materials (can be single or array)\n if (child.material) {\n const materials: Material[] = Array.isArray(child.material)\n ? child.material\n : [child.material];\n\n for (const material of materials) {\n // Dispose textures attached to the material\n for (const key of Object.keys(material)) {\n const value = (material as any)[key];\n if (value && typeof value.dispose === 'function') {\n // Check if it's a texture (has isTexture property)\n if (value.isTexture) {\n value.dispose();\n }\n }\n }\n material.dispose();\n }\n }\n });\n }\n\n createEntity(): Entity {\n return super.createEntity() as Entity;\n }\n\n /** @internal Publish scene-authored player placement to locomotion owners. */\n setAuthoredPlayerPosition(position: Vector3): void {\n this.authoredPlayerPosition ??= new Vector3();\n this.authoredPlayerPosition.copy(position);\n for (const listener of this.authoredPlayerPositionListeners) {\n listener(this.authoredPlayerPosition);\n }\n }\n\n /** @internal Reconcile a locomotion owner with scene-authored placement. */\n onAuthoredPlayerPosition(listener: (position: Vector3) => void): () => void {\n this.authoredPlayerPositionListeners.add(listener);\n if (this.authoredPlayerPosition != null) {\n listener(this.authoredPlayerPosition);\n }\n return () => this.authoredPlayerPositionListeners.delete(listener);\n }\n\n createTransformEntity(\n object?: Object3D,\n parentOrOptions?: Entity | { parent?: Entity; persistent?: boolean },\n ): Entity {\n const entity = super.createEntity() as Entity;\n const obj = object ?? new Object3D();\n const initialVisible = obj.visible;\n // Cast to pointer-events-capable Object3D event map for downstream typing\n entity.object3D = obj as unknown as Object3D<\n Object3DEventMap & PointerEventsMap\n >;\n\n let parent: Entity | undefined = undefined;\n let persistent = false;\n\n if (parentOrOptions) {\n if (typeof (parentOrOptions as any).index === 'number') {\n parent = parentOrOptions as Entity;\n } else {\n const opts = parentOrOptions as {\n parent?: Entity;\n persistent?: boolean;\n };\n parent = opts.parent;\n persistent = !!opts.persistent;\n }\n }\n\n if (!parent) {\n // Avoid self-parenting for the Scene root\n const isSceneObject = (obj: Object3D) => (obj as any).isScene === true;\n if (object && isSceneObject(object)) {\n parent = undefined;\n persistent = true;\n } else {\n parent = persistent\n ? this.sceneEntity\n : (this.activeLevel?.value ?? this.sceneEntity);\n }\n }\n\n const parentObject = parent?.object3D;\n if (parentObject && parentObject !== obj && obj.parent !== parentObject) {\n parentObject.add(obj);\n }\n\n entity.addComponent(Transform, { parent });\n entity.addComponent(Visibility, { isVisible: initialVisible });\n\n // Tag entity with current level, unless persistent\n if (!persistent) {\n entity.addComponent(LevelTag, { id: this.activeLevelId });\n }\n return entity;\n }\n\n /** Find an authored scene object by its stable scene node id. */\n getSceneObject<T extends Object3D = Object3D>(nodeId: string): T | undefined {\n let result: Object3D | undefined;\n for (const root of [\n this.activeLevel?.value?.object3D,\n this.playerEntity?.object3D,\n ]) {\n if (root == null) {\n continue;\n }\n root.traverse((object) => {\n if (\n !result &&\n object.userData.iwsdkSceneNodeId === nodeId &&\n (object.userData.iwsdkSceneLevelId == null ||\n object.userData.iwsdkSceneLevelId === this.activeLevelId)\n ) {\n result = object;\n }\n });\n }\n return result as T | undefined;\n }\n\n /** Find an authored scene object or throw a node-oriented lookup error. */\n requireSceneObject<T extends Object3D = Object3D>(nodeId: string): T {\n const object = this.getSceneObject<T>(nodeId);\n if (!object) {\n throw new Error(\n `Scene object \"${nodeId}\" was not found in the active level`,\n );\n }\n return object;\n }\n\n /** Find the ECS entity that owns an authored scene node. */\n getSceneEntity(nodeId: string): Entity | undefined {\n const index = this.getSceneObject(nodeId)?.entityIdx;\n return typeof index === 'number'\n ? (this.entityManager.getEntityByIndex(index) as Entity | undefined)\n : undefined;\n }\n\n /** Find the ECS entity for an authored scene node or throw. */\n requireSceneEntity(nodeId: string): Entity {\n const entity = this.getSceneEntity(nodeId);\n if (!entity) {\n throw new Error(\n `Scene entity \"${nodeId}\" was not found in the active level`,\n );\n }\n return entity;\n }\n\n launchXR(xrOptions?: Partial<XROptions>) {\n launchXR(this, xrOptions);\n }\n\n /** Request a native scene JSON level change; LevelSystem performs the work and resolves. */\n async loadLevel(url?: string): Promise<void> {\n this.rejectPendingLevelLoad();\n this.requestedLevelDocument = undefined;\n this.requestedLevelUrl = url ?? '';\n return new Promise<void>((resolve, reject) => {\n this._resolveLevelLoad = resolve;\n this._rejectLevelLoad = reject;\n });\n }\n\n /** Request an in-memory native scene document level load; LevelSystem performs the work and resolves. */\n async loadSceneDocument(document: SceneDocument): Promise<void> {\n this.rejectPendingLevelLoad();\n this.requestedLevelUrl = undefined;\n this.requestedLevelDocument = document;\n return new Promise<void>((resolve, reject) => {\n this._resolveLevelLoad = resolve;\n this._rejectLevelLoad = reject;\n });\n }\n\n exitXR() {\n this.session?.end();\n }\n\n private rejectPendingLevelLoad(): void {\n if (this._resolveLevelLoad == null && this._rejectLevelLoad == null) {\n return;\n }\n const reject = this._rejectLevelLoad;\n this._resolveLevelLoad = undefined;\n this._rejectLevelLoad = undefined;\n reject?.(new Error('Level load was superseded by a newer request'));\n }\n\n /**\n * The active {@link XRSession}, or `undefined` outside XR. Alias of\n * {@link World.session}, exposed for discoverability alongside\n * {@link World.xrFrame} and {@link World.xrReferenceSpace}.\n *\n * @remarks\n * Enable WebXR features your app needs (e.g. hit-test, depth sensing) via\n * `World.create(container, { xr: { features: { hitTest: true, depthSensing: true } } })`.\n * Once granted, they appear in `world.xrSession.enabledFeatures`.\n * @category XR Runtime\n */\n get xrSession(): XRSession | undefined {\n return this.session;\n }\n\n /**\n * The current {@link XRFrame} for this animation-loop tick, or `null` outside\n * XR. Use it for raw WebXR access such as `frame.getViewerPose(...)`,\n * `frame.getHitTestResults(...)`, or `frame.getDepthInformation(...)`.\n *\n * @remarks\n * Read this synchronously inside an {@link World.onXRFrame} callback or a\n * System `update()` — the frame object is only valid for the current tick and\n * must not be retained across frames.\n * @category XR Runtime\n */\n get xrFrame(): XRFrame | null {\n return this.renderer?.xr.getFrame() ?? null;\n }\n\n /**\n * The active {@link XRReferenceSpace} that IWSDK resolved for the session, or\n * `null` outside XR. Pass it to `XRHitTestResult.getPose(space)` or\n * `XRFrame.getViewerPose(space)` to obtain poses in the world's tracking space.\n * @category XR Runtime\n */\n get xrReferenceSpace(): XRReferenceSpace | null {\n return this.renderer?.xr.getReferenceSpace() ?? null;\n }\n\n /**\n * Register a callback that runs once per render-loop tick with the live\n * {@link XRFrame}, without having to author a System. Useful for per-pixel\n * world alignment, hit-test queries, depth sampling, and object-anchored\n * overlays.\n *\n * @param callback Invoked with `(frame, delta, time)` while an XR session is active.\n * @returns An unsubscribe function; call it to stop receiving frames.\n * @category XR Runtime\n * @example\n * ```ts\n * const source = await world.requestHitTestSource({ space: world.xrReferenceSpace! });\n * const stop = world.onXRFrame((frame) => {\n * if (!source) return;\n * const [hit] = world.getHitTestResults(source);\n * const pose = hit?.getPose(world.xrReferenceSpace!);\n * // place a world-locked label at pose.transform.position ...\n * });\n * ```\n */\n onXRFrame(callback: OnXRFrameCallback): () => void {\n this.xrFrameCallbacks.add(callback);\n return () => {\n this.xrFrameCallbacks.delete(callback);\n };\n }\n\n /**\n * Invoke all callbacks registered via {@link World.onXRFrame}. Called by the\n * render loop after systems update and before rendering.\n * @internal\n */\n runXRFrameCallbacks(frame: XRFrame, delta: number, time: number): void {\n if (this.xrFrameCallbacks.size === 0) {\n return;\n }\n for (const callback of this.xrFrameCallbacks) {\n try {\n callback(frame, delta, time);\n } catch (error) {\n console.error('[World] onXRFrame callback failed:', error);\n }\n }\n }\n\n /**\n * Request an {@link XRHitTestSource} on the active session. Requires the\n * `hit-test` feature (enable via\n * `World.create(container, { xr: { features: { hitTest: true } } })`).\n *\n * @returns The hit-test source, or `undefined` if there is no active session\n * or the request is unavailable/unsupported. The underlying\n * `XRSession.requestHitTestSource` rejects when the `hit-test` feature was\n * not granted; that rejection is caught and surfaced as `undefined` (logged\n * as a warning) so callers can `await` without their own `try/catch`.\n * @category XR Runtime\n */\n async requestHitTestSource(\n options: XRHitTestOptionsInit,\n ): Promise<XRHitTestSource | undefined> {\n const session = this.session;\n if (!session?.requestHitTestSource) {\n return undefined;\n }\n try {\n return await session.requestHitTestSource(options);\n } catch (error) {\n console.warn(\n \"[World] requestHitTestSource failed (is the 'hit-test' feature enabled?):\",\n error,\n );\n return undefined;\n }\n }\n\n /**\n * Request an {@link XRTransientInputHitTestSource} (e.g. for screen taps or\n * transient controllers). Requires the `hit-test` feature.\n *\n * @returns The transient hit-test source, or `undefined` if unavailable. As\n * with {@link World.requestHitTestSource}, a rejection from the underlying\n * WebXR call (e.g. feature not granted) is caught and surfaced as\n * `undefined`.\n * @category XR Runtime\n */\n async requestHitTestSourceForTransientInput(\n options: XRTransientInputHitTestOptionsInit,\n ): Promise<XRTransientInputHitTestSource | undefined> {\n const session = this.session;\n if (!session?.requestHitTestSourceForTransientInput) {\n return undefined;\n }\n try {\n return await session.requestHitTestSourceForTransientInput(options);\n } catch (error) {\n console.warn(\n \"[World] requestHitTestSourceForTransientInput failed (is the 'hit-test' feature enabled?):\",\n error,\n );\n return undefined;\n }\n }\n\n /**\n * Read the hit-test results for a source from the current {@link XRFrame}.\n * Returns an empty array when there is no active frame.\n * @category XR Runtime\n */\n getHitTestResults(source: XRHitTestSource): XRHitTestResult[] {\n const frame = this.xrFrame;\n if (!frame) {\n return [];\n }\n return frame.getHitTestResults(source);\n }\n\n /**\n * Register a teardown callback to run on {@link World.destroy}. Used by the\n * initializer to undo global side effects such as the render loop and the\n * window `resize` listener.\n *\n * @internal\n */\n addCleanup(fn: () => void): void {\n this.worldCleanupFuncs.push(fn);\n }\n\n /**\n * Tear down the world: destroy all registered systems (running their\n * `cleanupFuncs`), then run world-level teardown callbacks (stop the render\n * loop, remove the window `resize` listener). After calling this the world\n * instance should be discarded.\n *\n * @remarks\n * Not invoked during normal single-world app usage (where the world lives for\n * the page lifetime); provided so tests, hot-reload, and multi-world hosts can\n * release the render loop, listeners, and per-system subscriptions instead of\n * leaking them. Individual failures are caught so one bad teardown does not\n * block the rest.\n */\n destroy(): void {\n // Idempotent: getSystems() keeps returning the same systems, so without\n // this guard a second destroy() would re-run every system's destroy().\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n for (const system of this.getSystems()) {\n try {\n (system as { destroy?: () => void }).destroy?.();\n } catch (error) {\n console.error('[World] system destroy failed:', error);\n }\n }\n const fns = this.worldCleanupFuncs.splice(0);\n for (const fn of fns) {\n try {\n fn();\n } catch (error) {\n console.error('[World] cleanup failed:', error);\n }\n }\n }\n\n update(delta: number, time: number): void {\n super.update(delta, time);\n }\n\n registerComponent(component: AnyComponent): this {\n return super.registerComponent(component);\n }\n\n // Level root helpers\n getActiveRoot(): Object3D {\n return this.activeLevel?.value?.object3D ?? this.scene;\n }\n\n getPersistentRoot(): Object3D {\n return this.scene;\n }\n\n /**\n * Initialize a new WebXR world with all required systems and setup\n *\n * @param sceneContainer - HTML container for the renderer canvas\n * @param assets - Asset manifest for preloading\n * @param options - Configuration options for the world\n * @returns Promise that resolves to the initialized World instance\n */\n /**\n * Initialize a new WebXR world with renderer, scene, default systems, and optional level.\n *\n * @param container HTML container to which the renderer canvas will be appended.\n * @param options Runtime configuration, see {@link WorldOptions}.\n * @returns A promise that resolves to the initialized {@link World}.\n *\n * @remarks\n * - This call enables the Input, UI and Audio systems by default.\n * - Use {@link WorldOptions.features} to enable Locomotion or Grabbing.\n * - If {@link WorldOptions.level} is provided, the LevelSystem will load it after assets are preloaded.\n * @see /getting-started/01-hello-xr\n */\n static async create(\n container: HTMLElement,\n options?: WorldOptions,\n ): Promise<World> {\n armSessionGrantCaptureForOptions(options?.xr);\n const { initializeWorld } = await import('../init/world-initializer.js');\n return initializeWorld(container, options);\n }\n}\n"],"names":["ElicsWorld"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dome-gradient.js","sources":["../../src/environment/dome-gradient.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;AACE,IAAA,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AAClE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACtE,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;IACpE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,kCAAkC;;;;"}
1
+ {"version":3,"file":"dome-gradient.js","sources":["../../src/environment/dome-gradient.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 { Types, createComponent } from '../ecs/component.js';\n/**\n * Procedural gradient background dome.\n *\n * @remarks\n * - Renders an inward-facing, translation-free sky sphere behind the scene.\n * - Clip-space depth keeps it independent of camera near/far planes.\n * - Colors are Unity‑style sky/equator/ground; intensity multiplies shader output.\n *\n * @category Environment & Lighting\n */\nexport const DomeGradient = createComponent(\n 'DomeGradient',\n {\n sky: { type: Types.Color, default: [0.2423, 0.6172, 0.8308, 1.0] },\n equator: { type: Types.Color, default: [0.6584, 0.7084, 0.7913, 1.0] },\n ground: { type: Types.Color, default: [0.807, 0.7758, 0.7454, 1.0] },\n intensity: { type: Types.Float32, default: 1.0 },\n _needsUpdate: { type: Types.Boolean, default: true },\n },\n 'Background dome using a gradient',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;AACE,IAAA,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AAClE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACtE,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;IACpE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,kCAAkC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"dome-texture.js","sources":["../../src/environment/dome-texture.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;AAQG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;AACE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;IACD,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IACjD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,wDAAwD;;;;"}
1
+ {"version":3,"file":"dome-texture.js","sources":["../../src/environment/dome-texture.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 { Types, createComponent } from '../ecs/component.js';\n/**\n * Background dome driven by a single equirectangular texture.\n *\n * @remarks\n * - `src` may be HDR/EXR or LDR (png/jpg/ktx2). Mapping is set to equirect when needed.\n * - Affects only `scene.background` and optional `scene.backgroundRotation`/`backgroundIntensity`.\n *\n * @category Environment & Lighting\n */\nexport const DomeTexture = createComponent(\n 'DomeTexture',\n {\n src: {\n type: Types.FilePath,\n default: '',\n fileTypes: '.png,.jpg,.ktx2,.hdr,.exr',\n subfolder: 'textures',\n },\n blurriness: { type: Types.Float32, default: 0.0 },\n intensity: { type: Types.Float32, default: 1.0 },\n rotation: { type: Types.Vec3, default: [0, 0, 0] }, // radians [x,y,z]\n _needsUpdate: { type: Types.Boolean, default: true },\n },\n 'Background dome using a single equirectangular texture',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;AAQG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;AACE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;IACD,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IACjD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,wDAAwD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"environment-system.js","sources":["../../src/environment/environment-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-system.js","sources":["../../src/environment/environment-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 { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';\nimport { AssetManager, CacheManager } from '../asset/index.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\n// Import directly from the subfile — not the `../level/index.js` barrel — to\n// avoid a value-level import cycle: level/index.js re-exports level-system.ts,\n// which imports the environment barrel, which re-exports environment-system.ts\n// (currently being evaluated). The bundler resolves this cycle by emitting\n// EnvironmentSystem before dome-texture/dome-gradient/ibl-* are defined,\n// leaving the required[] arrays holding `undefined.bitmask` crashes.\nimport { LevelRoot } from '../level/level-root.js';\nimport {\n BackSide,\n Color,\n Mesh,\n PMREMGenerator,\n WebGLRenderTarget,\n ShaderMaterial,\n SphereGeometry,\n Texture,\n EquirectangularReflectionMapping,\n} from '../runtime/index.js';\nimport { DomeGradient } from './dome-gradient.js';\nimport { DomeTexture } from './dome-texture.js';\nimport {\n GradientEnvironment,\n createGradientMaterial,\n} from './gradient-environment.js';\nimport { IBLGradient } from './ibl-gradient.js';\nimport { IBLTexture } from './ibl-texture.js';\nimport { SceneAREnvironmentController } from './scene-ar-environment.js';\n\n/**\n * Compute sky/equator/ground hex colors from RGB views, reusing a single shared\n * `Color` scratch object (`out`) instead of allocating one `Color` per channel\n * per frame. Each `getHex()` is read before the next `setRGB()` overwrites\n * `out`, so the shared instance is safe.\n */\nexport function computeGradientHexes(\n out: Color,\n sky: ArrayLike<number>,\n equator: ArrayLike<number>,\n ground: ArrayLike<number>,\n): { skyHex: number; equatorHex: number; groundHex: number } {\n const skyHex = out.setRGB(sky[0], sky[1], sky[2]).getHex();\n const equatorHex = out.setRGB(equator[0], equator[1], equator[2]).getHex();\n const groundHex = out.setRGB(ground[0], ground[1], ground[2]).getHex();\n return { skyHex, equatorHex, groundHex };\n}\n\ninterface EnvState {\n backgroundTexture?: Texture;\n environmentTarget?: WebGLRenderTarget;\n backgroundSource?: string;\n environmentSource?: string;\n gradientDome?: Mesh;\n gradientEnvironmentScene?: GradientEnvironment;\n gradientEnvironmentMesh?: Mesh;\n}\n\n/**\n * Unified background and image‑based lighting system.\n *\n * @remarks\n * - {@link DomeTexture} writes an HDR/LDR equirectangular texture to `scene.background`; {@link DomeGradient} renders a procedural, clipping-proof sky mesh.\n * - IBL is driven by {@link IBLTexture} (\"room\" or HDR/LDR equirect via PMREM) or {@link IBLGradient} (PMREM of a gradient scene) and writes to `scene.environment`.\n * - Rotation and intensity hooks forward to `scene.backgroundRotation`, `scene.backgroundIntensity`, and `scene.environmentRotation`, `scene.environmentIntensity`.\n * - AR sessions always hide authored backgrounds for passthrough while retaining IBL.\n * - PMREM targets are regenerated only when sources change; the dome mesh and geometry are reused.\n *\n * @category Environment & Lighting\n * @example\n * ```ts\n * // Background: HDR skybox; IBL: Room environment\n * const root = world.activeLevel!.value;\n * root.addComponent(DomeTexture, { src: '/envs/sky.hdr', intensity: 0.9 });\n * root.addComponent(IBLTexture, { src: 'room', intensity: 1.2 });\n *\n * // Rotate background 45° around Y; rotate IBL 90°\n * root.setValue(DomeTexture, 'rotation', [0, Math.PI / 4, 0]);\n * root.setValue(IBLTexture, 'rotation', [0, Math.PI / 2, 0]);\n * root.setValue(DomeTexture, '_needsUpdate', true);\n * root.setValue(IBLTexture, '_needsUpdate', true);\n * ```\n */\nexport class EnvironmentSystem extends createSystem({\n domeTextures: { required: [DomeTexture, LevelRoot] },\n domeGradients: { required: [DomeGradient, LevelRoot] },\n iblTextures: { required: [IBLTexture, LevelRoot] },\n iblGradients: { required: [IBLGradient, LevelRoot] },\n}) {\n private state: EnvState = {};\n private pmrem!: PMREMGenerator;\n private gradientGeometry?: SphereGeometry;\n private tmpColor: Color = new Color();\n private recenterYawOffset: number = 0;\n private resetListenerCleanup: (() => void) | null = null;\n private needsResetListener: boolean = false;\n private arEnvironment!: SceneAREnvironmentController;\n\n init(): void {\n this.pmrem = new PMREMGenerator(this.renderer);\n this.arEnvironment = new SceneAREnvironmentController(\n this.scene,\n this.renderer,\n );\n this.cleanupFuncs.push(() => {\n this.arEnvironment.restore();\n this.pmrem.dispose();\n this.state.environmentTarget?.dispose();\n this.state.environmentTarget = undefined;\n this.clearGradientDome();\n this.clearGradientEnvironment();\n this.gradientGeometry?.dispose();\n this.gradientGeometry = undefined;\n });\n\n // XR background toggle\n this.cleanupFuncs.push(\n this.visibilityState.subscribe(() => this.updateSceneARMode()),\n );\n\n // XR recenter compensation\n this.xrManager.addEventListener('sessionstart', this.onXRSessionStart);\n this.xrManager.addEventListener('sessionend', this.onXRSessionEnd);\n this.cleanupFuncs.push(() => {\n this.xrManager.removeEventListener('sessionstart', this.onXRSessionStart);\n this.xrManager.removeEventListener('sessionend', this.onXRSessionEnd);\n this.resetListenerCleanup?.();\n this.resetListenerCleanup = null;\n });\n }\n\n update(): void {\n // Deferred reset listener attachment\n if (this.needsResetListener) {\n const refSpace = this.xrManager.getReferenceSpace();\n if (refSpace) {\n this.attachResetListener(refSpace);\n this.needsResetListener = false;\n }\n }\n\n // Choose background source: DomeTexture > DomeGradient\n let backgroundEntity: Entity | undefined;\n for (const e of this.queries.domeTextures.entities) {\n backgroundEntity = e;\n break;\n }\n if (!backgroundEntity) {\n for (const e of this.queries.domeGradients.entities) {\n backgroundEntity = e;\n break;\n }\n }\n\n if (backgroundEntity) {\n this.processBackground(backgroundEntity);\n } else {\n this.clearBackgroundSource();\n }\n\n // Choose IBL source: IBLTexture > IBLGradient\n let iblEntity: Entity | undefined;\n for (const e of this.queries.iblTextures.entities) {\n iblEntity = e;\n break;\n }\n if (!iblEntity) {\n for (const e of this.queries.iblGradients.entities) {\n iblEntity = e;\n break;\n }\n }\n\n if (iblEntity) {\n this.processIBL(iblEntity);\n } else {\n this.clearIBLSource();\n }\n\n this.updateSceneARMode();\n }\n\n // Background handling\n private async processBackground(entity: Entity): Promise<void> {\n try {\n if (entity.hasComponent(DomeTexture)) {\n const needs = entity.getValue(DomeTexture, '_needsUpdate');\n if (needs) {\n const changed = this.hasDomeTextureBackgroundChanged(entity);\n if (changed) {\n await this.updateDomeTextureBackground(entity);\n }\n this.updateBackgroundProps(entity);\n entity.setValue(DomeTexture, '_needsUpdate', false);\n }\n } else if (entity.hasComponent(DomeGradient)) {\n const needs = entity.getValue(DomeGradient, '_needsUpdate');\n if (needs) {\n await this.updateDomeGradient(entity, /*forIBL*/ false);\n entity.setValue(DomeGradient, '_needsUpdate', false);\n }\n }\n } catch (e) {\n console.error('[EnvironmentSystem] Failed background update:', e);\n }\n }\n\n private hasDomeTextureBackgroundChanged(entity: Entity): boolean {\n const src = entity.getValue(DomeTexture, 'src') || '';\n const changed = src !== this.state.backgroundSource;\n if (changed) {\n this.state.backgroundSource = src;\n }\n return changed;\n }\n\n private async updateDomeTextureBackground(entity: Entity): Promise<void> {\n const src = entity.getValue(DomeTexture, 'src') || '';\n if (!src) {\n this.scene.background = null;\n return;\n }\n const lower = src.toLowerCase();\n const isHDR = lower.endsWith('.hdr') || lower.endsWith('.exr');\n const url = CacheManager.resolveUrl(src);\n const texture = isHDR\n ? await AssetManager.loadHDRTexture(url)\n : await AssetManager.loadTexture(url);\n this.state.backgroundTexture = texture;\n // For LDR equirect backgrounds, ensure world-locked mapping; HDR/EXR already mapped by loader\n if (!isHDR) {\n texture.mapping = EquirectangularReflectionMapping;\n }\n this.scene.background = texture;\n }\n\n private updateBackgroundProps(entity: Entity): void {\n const blurriness = entity.getValue(DomeTexture, 'blurriness') ?? 0;\n const intensity = entity.getValue(DomeTexture, 'intensity') ?? 1;\n const rot = entity.getVectorView(DomeTexture, 'rotation');\n this.scene.backgroundBlurriness = blurriness;\n this.scene.backgroundIntensity = intensity;\n if (rot) {\n this.scene.backgroundRotation?.set(\n rot[0] || 0,\n (rot[1] || 0) + this.recenterYawOffset,\n rot[2] || 0,\n );\n }\n }\n\n private async updateDomeGradient(\n entity: Entity,\n forIBL: boolean,\n ): Promise<void> {\n const skyV = entity.getVectorView(DomeGradient, 'sky');\n const equatorV = entity.getVectorView(DomeGradient, 'equator');\n const groundV = entity.getVectorView(DomeGradient, 'ground');\n const intensity = entity.getValue(DomeGradient, 'intensity') || 1.0;\n\n const skyHex = this.tmpColor.setRGB(skyV[0], skyV[1], skyV[2]).getHex();\n const equatorHex = this.tmpColor\n .setRGB(equatorV[0], equatorV[1], equatorV[2])\n .getHex();\n const groundHex = this.tmpColor\n .setRGB(groundV[0], groundV[1], groundV[2])\n .getHex();\n\n if (!forIBL) {\n // Background gradient dome mesh\n this.ensureGradientDome(skyHex, equatorHex, groundHex, intensity);\n if (this.state.gradientDome) {\n this.state.gradientDome.userData.iwsdkSceneDomeGradient = {\n equator: Array.from(equatorV),\n ground: Array.from(groundV),\n intensity,\n sky: Array.from(skyV),\n };\n }\n }\n }\n\n // IBL handling\n private async processIBL(entity: Entity): Promise<void> {\n try {\n if (entity.hasComponent(IBLTexture)) {\n const needs = entity.getValue(IBLTexture, '_needsUpdate');\n if (needs) {\n const changed = this.hasIBLTextureChanged(entity);\n if (changed) {\n await this.updateIBLTexture(entity);\n }\n this.updateIBLProps(entity);\n entity.setValue(IBLTexture, '_needsUpdate', false);\n }\n } else if (entity.hasComponent(IBLGradient)) {\n const needs = entity.getValue(IBLGradient, '_needsUpdate');\n if (needs) {\n await this.updateIBLGradient(entity);\n entity.setValue(IBLGradient, '_needsUpdate', false);\n }\n }\n } catch (e) {\n console.error('[EnvironmentSystem] Failed IBL update:', e);\n }\n }\n\n private hasIBLTextureChanged(entity: Entity): boolean {\n const src = entity.getValue(IBLTexture, 'src') || '';\n const changed = src !== this.state.environmentSource;\n if (changed) {\n this.state.environmentSource = src;\n }\n return changed;\n }\n\n private async updateIBLTexture(entity: Entity): Promise<void> {\n const src = (entity.getValue(IBLTexture, 'src') || '').trim();\n if (!src) {\n this.setEnvironment(null);\n return;\n }\n if (src === 'room') {\n // Build RoomEnvironment scene and PMREM it\n const room = new RoomEnvironment();\n const target = this.pmrem.fromScene(room);\n room.dispose?.();\n this.setEnvironment(target);\n return;\n }\n const lower2 = src.toLowerCase();\n const isHDR = lower2.endsWith('.hdr') || lower2.endsWith('.exr');\n const url = CacheManager.resolveUrl(src);\n const tex = isHDR\n ? await AssetManager.loadHDRTexture(url)\n : await AssetManager.loadTexture(url);\n const target = this.pmrem.fromEquirectangular(tex);\n this.setEnvironment(target);\n }\n\n private updateIBLProps(entity: Entity): void {\n const intensity = entity.getValue(IBLTexture, 'intensity') ?? 1;\n const rot = entity.getVectorView(IBLTexture, 'rotation');\n this.scene.environmentIntensity = intensity;\n if (rot) {\n this.scene.environmentRotation?.set(\n rot[0] || 0,\n (rot[1] || 0) + this.recenterYawOffset,\n rot[2] || 0,\n );\n }\n }\n\n private async updateIBLGradient(entity: Entity): Promise<void> {\n const skyV = entity.getVectorView(IBLGradient, 'sky');\n const equatorV = entity.getVectorView(IBLGradient, 'equator');\n const groundV = entity.getVectorView(IBLGradient, 'ground');\n const intensity = entity.getValue(IBLGradient, 'intensity') || 1.0;\n // Reuse the shared scratch Color instead of allocating three new Color\n // objects every frame (updateDomeGradient already uses this.tmpColor).\n const { skyHex, equatorHex, groundHex } = computeGradientHexes(\n this.tmpColor,\n skyV,\n equatorV,\n groundV,\n );\n\n let gradientScene = this.state.gradientEnvironmentScene;\n if (!gradientScene) {\n gradientScene = new GradientEnvironment(\n skyHex,\n equatorHex,\n groundHex,\n intensity,\n );\n this.state.gradientEnvironmentScene = gradientScene;\n // Cache mesh for uniform updates\n this.state.gradientEnvironmentMesh = gradientScene.children.find(\n (o): o is Mesh => o instanceof Mesh,\n );\n } else {\n const mat = this.state.gradientEnvironmentMesh?.material as\n | ShaderMaterial\n | undefined;\n if (mat) {\n mat.uniforms.skyColor.value.setHex(skyHex).multiplyScalar(intensity);\n mat.uniforms.equatorColor.value\n .setHex(equatorHex)\n .multiplyScalar(intensity);\n mat.uniforms.groundColor.value\n .setHex(groundHex)\n .multiplyScalar(intensity);\n }\n }\n\n const target = this.pmrem.fromScene(gradientScene);\n target.texture.userData.iwsdkSceneIBLGradient = {\n equator: Array.from(equatorV),\n ground: Array.from(groundV),\n intensity,\n sky: Array.from(skyV),\n };\n this.setEnvironment(target);\n // Apply IBL intensity for gradient as well\n this.scene.environmentIntensity = intensity;\n }\n\n private setEnvironment(target: WebGLRenderTarget | null): void {\n this.state.environmentTarget?.dispose();\n this.state.environmentTarget = undefined;\n if (target) {\n this.state.environmentTarget = target;\n this.scene.environment = target.texture;\n } else {\n this.scene.environment = null;\n }\n }\n\n // XR recenter handling\n private onXRSessionStart = (): void => {\n this.recenterYawOffset = 0;\n const refSpace = this.xrManager.getReferenceSpace();\n if (refSpace) {\n this.attachResetListener(refSpace);\n } else {\n this.needsResetListener = true;\n }\n this.updateSceneARMode();\n };\n\n private attachResetListener(refSpace: XRReferenceSpace): void {\n const onReset = (event: XRReferenceSpaceEvent) => {\n this.onReferenceSpaceReset(event);\n };\n refSpace.addEventListener('reset', onReset);\n this.resetListenerCleanup = () => {\n refSpace.removeEventListener('reset', onReset);\n };\n }\n\n private onXRSessionEnd = (): void => {\n this.resetListenerCleanup?.();\n this.resetListenerCleanup = null;\n this.recenterYawOffset = 0;\n this.needsResetListener = false;\n this.updateSceneARMode(null);\n };\n\n private onReferenceSpaceReset(event: XRReferenceSpaceEvent): void {\n const transform = event.transform;\n if (!transform) {\n return;\n }\n\n const q = transform.orientation;\n const yaw = Math.atan2(\n 2 * (q.w * q.y + q.x * q.z),\n 1 - 2 * (q.y * q.y + q.z * q.z),\n );\n\n this.recenterYawOffset += yaw;\n this.applyRecenterCompensation();\n }\n\n private applyRecenterCompensation(): void {\n for (const entity of this.queries.iblTextures.entities) {\n const rot = entity.getVectorView(IBLTexture, 'rotation');\n if (rot) {\n this.scene.environmentRotation?.set(\n rot[0] || 0,\n (rot[1] || 0) + this.recenterYawOffset,\n rot[2] || 0,\n );\n }\n break;\n }\n\n for (const entity of this.queries.domeTextures.entities) {\n const rot = entity.getVectorView(DomeTexture, 'rotation');\n if (rot) {\n this.scene.backgroundRotation?.set(\n rot[0] || 0,\n (rot[1] || 0) + this.recenterYawOffset,\n rot[2] || 0,\n );\n }\n break;\n }\n }\n\n // Apply document AR overrides only while an actual AR session is active.\n private updateSceneARMode(sessionOverride?: XRSession | null): void {\n const managerSession = this.xrManager.getSession?.();\n const session =\n sessionOverride === undefined\n ? managerSession === undefined\n ? this.world.session\n : managerSession\n : sessionOverride;\n this.arEnvironment.update({\n session,\n authoredBackgrounds:\n this.state.gradientDome == null ? [] : [this.state.gradientDome],\n });\n }\n\n // Gradient dome mesh utilities (background)\n private ensureGradientDome(\n skyHex: number,\n equatorHex: number,\n groundHex: number,\n intensity: number,\n ): void {\n if (!this.gradientGeometry) {\n this.gradientGeometry = new SphereGeometry(1, 32, 15);\n }\n if (!this.state.gradientDome) {\n const material = createGradientMaterial(\n skyHex,\n equatorHex,\n groundHex,\n intensity,\n BackSide,\n );\n const dome = new Mesh(this.gradientGeometry, material);\n dome.renderOrder = -1e9;\n dome.frustumCulled = false;\n this.scene.add(dome);\n this.state.gradientDome = dome;\n } else {\n const mat = this.state.gradientDome.material as ShaderMaterial;\n mat.uniforms.skyColor.value.setHex(skyHex).multiplyScalar(intensity);\n mat.uniforms.equatorColor.value\n .setHex(equatorHex)\n .multiplyScalar(intensity);\n mat.uniforms.groundColor.value\n .setHex(groundHex)\n .multiplyScalar(intensity);\n }\n }\n\n private clearGradientDome(): void {\n if (this.state.gradientDome) {\n this.state.gradientDome.removeFromParent();\n (this.state.gradientDome.material as ShaderMaterial).dispose();\n this.state.gradientDome = undefined;\n }\n }\n\n private clearGradientEnvironment(): void {\n if (this.state.gradientEnvironmentScene) {\n this.state.gradientEnvironmentScene.dispose();\n this.state.gradientEnvironmentScene = undefined;\n }\n this.state.gradientEnvironmentMesh = undefined;\n }\n\n private clearBackgroundSource(): void {\n this.clearGradientDome();\n if (\n this.state.backgroundTexture != null &&\n this.scene.background === this.state.backgroundTexture\n ) {\n this.scene.background = null;\n }\n this.state.backgroundTexture = undefined;\n this.state.backgroundSource = undefined;\n }\n\n private clearIBLSource(): void {\n const target = this.state.environmentTarget;\n if (target != null && this.scene.environment === target.texture) {\n this.scene.environment = null;\n }\n target?.dispose();\n this.state.environmentTarget = undefined;\n this.state.environmentSource = undefined;\n this.clearGradientEnvironment();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gradient-environment.js","sources":["../../src/environment/gradient-environment.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAYH;;;AAGG;AACI,MAAM,eAAe,GAAG;IAC7B,YAAY,aAAa;;;;;;;;;;;;;AAaxB,EAAA,CAAA;IACD,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;AAoB1B,EAAA,CAAA;;AAGH;;;;;;;;AAQG;AACG,SAAU,sBAAsB,CACpC,MAAc,EACd,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,IAAA,GAA2C,SAAS,EAAA;IAEpD,OAAO,IAAI,cAAc,CAAC;AACxB,QAAA,QAAQ,EAAE;AACR,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAChE,YAAA,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACxE,YAAA,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACvE,SAAA;QACD,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,cAAc,EAAE,eAAe,CAAC,cAAc;QAC9C,IAAI;QACJ,UAAU,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;QAC5C,SAAS,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;AAC5C,KAAA,CAAC;AACJ;AAEA;;;;;;AAMG;AACG,MAAO,mBAAoB,SAAQ,KAAK,CAAA;IAC5C,WAAA,CACE,MAAA,GAAiB,QAAQ,EACzB,UAAA,GAAqB,QAAQ,EAC7B,SAAA,GAAoB,QAAQ,EAC5B,SAAA,GAAoB,GAAG,EAAA;AAEvB,QAAA,KAAK,EAAE;;QAGP,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,sBAAsB,CACrC,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,CACT;QAED,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1B;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAO;AAEhC,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAW,KAAI;AAC5B,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9B,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,QAAQ,CAAC,OAAO,EAAE;QACpB;IACF;AACD;;;;"}
1
+ {"version":3,"file":"gradient-environment.js","sources":["../../src/environment/gradient-environment.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 BackSide,\n Color,\n FrontSide,\n Mesh,\n Scene,\n ShaderMaterial,\n SphereGeometry,\n} from '../runtime/index.js';\n\n/**\n * Gradient shader uniforms and code used for background domes and environments.\n * @category Environment & Lighting\n */\nexport const GRADIENT_SHADER = {\n vertexShader: /* glsl */ `\n varying vec3 vWorldDirection;\n void main() {\n // A sky is directional, not positional. Strip camera translation so the\n // dome follows every browser/XR camera without depending on its parent\n // transform, then pin it to clip-space depth to avoid near/far clipping.\n vec3 worldDirection = mat3(modelMatrix) * position;\n vWorldDirection = worldDirection;\n vec4 clipPosition = projectionMatrix\n * mat4(mat3(viewMatrix))\n * vec4(worldDirection, 1.0);\n gl_Position = clipPosition.xyww;\n }\n `,\n fragmentShader: /* glsl */ `\n uniform vec3 skyColor;\n uniform vec3 equatorColor;\n uniform vec3 groundColor;\n varying vec3 vWorldDirection;\n \n void main() {\n float h = normalize(vWorldDirection).y;\n vec3 color;\n \n if (h > 0.0) {\n // Sky to equator interpolation\n color = mix(equatorColor, skyColor, h);\n } else {\n // Equator to ground interpolation\n color = mix(equatorColor, groundColor, -h);\n }\n \n gl_FragColor = vec4(color, 1.0);\n }\n `,\n};\n\n/**\n * Create a gradient material with Unity‑style sky/equator/ground colors.\n * @param skyHex Sky color as hex.\n * @param equatorHex Equator color as hex.\n * @param groundHex Ground color as hex.\n * @param intensity Intensity multiplier applied to all colors.\n * @param side Material side (BackSide for background dome; FrontSide for env scene).\n * @category Environment & Lighting\n */\nexport function createGradientMaterial(\n skyHex: number,\n equatorHex: number,\n groundHex: number,\n intensity: number,\n side: typeof BackSide | typeof FrontSide = FrontSide,\n): ShaderMaterial {\n return new ShaderMaterial({\n uniforms: {\n skyColor: { value: new Color(skyHex).multiplyScalar(intensity) },\n equatorColor: { value: new Color(equatorHex).multiplyScalar(intensity) },\n groundColor: { value: new Color(groundHex).multiplyScalar(intensity) },\n },\n vertexShader: GRADIENT_SHADER.vertexShader,\n fragmentShader: GRADIENT_SHADER.fragmentShader,\n side,\n depthWrite: side === BackSide ? false : true,\n depthTest: side === BackSide ? false : true,\n });\n}\n\n/**\n * A Scene containing a gradient sphere for PMREM processing.\n *\n * @remarks\n * Uses the same shader as the background dome to ensure coherent lighting.\n * @category Environment & Lighting\n */\nexport class GradientEnvironment extends Scene {\n constructor(\n skyHex: number = 0x87ceeb,\n equatorHex: number = 0xffa500,\n groundHex: number = 0x228b22,\n intensity: number = 1.0,\n ) {\n super();\n\n // Create gradient sphere using shared gradient material\n const geometry = new SphereGeometry(100, 32, 15);\n const material = createGradientMaterial(\n skyHex,\n equatorHex,\n groundHex,\n intensity,\n BackSide,\n );\n\n const gradientSphere = new Mesh(geometry, material);\n this.add(gradientSphere);\n }\n\n dispose(): void {\n const resources = new Set<any>();\n\n this.traverse((object: any) => {\n if (object.isMesh) {\n resources.add(object.geometry);\n resources.add(object.material);\n }\n });\n\n for (const resource of resources) {\n resource.dispose();\n }\n }\n}\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAYH;;;AAGG;AACI,MAAM,eAAe,GAAG;IAC7B,YAAY,aAAa;;;;;;;;;;;;;AAaxB,EAAA,CAAA;IACD,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;AAoB1B,EAAA,CAAA;;AAGH;;;;;;;;AAQG;AACG,SAAU,sBAAsB,CACpC,MAAc,EACd,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,IAAA,GAA2C,SAAS,EAAA;IAEpD,OAAO,IAAI,cAAc,CAAC;AACxB,QAAA,QAAQ,EAAE;AACR,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAChE,YAAA,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACxE,YAAA,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACvE,SAAA;QACD,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,cAAc,EAAE,eAAe,CAAC,cAAc;QAC9C,IAAI;QACJ,UAAU,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;QAC5C,SAAS,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;AAC5C,KAAA,CAAC;AACJ;AAEA;;;;;;AAMG;AACG,MAAO,mBAAoB,SAAQ,KAAK,CAAA;IAC5C,WAAA,CACE,MAAA,GAAiB,QAAQ,EACzB,UAAA,GAAqB,QAAQ,EAC7B,SAAA,GAAoB,QAAQ,EAC5B,SAAA,GAAoB,GAAG,EAAA;AAEvB,QAAA,KAAK,EAAE;;QAGP,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,sBAAsB,CACrC,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,CACT;QAED,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1B;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAO;AAEhC,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAW,KAAI;AAC5B,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9B,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,QAAQ,CAAC,OAAO,EAAE;QACpB;IACF;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ibl-gradient.js","sources":["../../src/environment/ibl-gradient.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;AAOG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;AACE,IAAA,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACjE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACtE,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;IACpE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,2BAA2B;;;;"}
1
+ {"version":3,"file":"ibl-gradient.js","sources":["../../src/environment/ibl-gradient.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 { Types, createComponent } from '../ecs/component.js';\n/**\n * Image-based lighting from a procedural gradient (PMREM of a gradient scene).\n *\n * @remarks\n * - Only affects `scene.environment`.\n *\n * @category Environment & Lighting\n */\nexport const IBLGradient = createComponent(\n 'IBLGradient',\n {\n sky: { type: Types.Color, default: [0.6902, 0.749, 0.7843, 1.0] },\n equator: { type: Types.Color, default: [0.6584, 0.7084, 0.7913, 1.0] },\n ground: { type: Types.Color, default: [0.807, 0.7758, 0.7454, 1.0] },\n intensity: { type: Types.Float32, default: 1.0 },\n _needsUpdate: { type: Types.Boolean, default: true },\n },\n 'IBL from a gradient scene',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;AAOG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;AACE,IAAA,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACjE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACtE,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;IACpE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,2BAA2B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ibl-texture.js","sources":["../../src/environment/ibl-texture.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,UAAU,GAAG,eAAe,CACvC,YAAY,EACZ;AACE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;IACD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,uDAAuD;;;;"}
1
+ {"version":3,"file":"ibl-texture.js","sources":["../../src/environment/ibl-texture.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 { Types, createComponent } from '../ecs/component.js';\n/**\n * Image‑based lighting from a texture or the built‑in Room environment.\n *\n * @remarks\n * - `src`: \"room\" | HDR/EXR equirect | LDR equirect. PMREM processed to `scene.environment`.\n * - `rotation` controls `scene.environmentRotation` in radians.\n * - Does not set `scene.background`.\n *\n * @category Environment & Lighting\n */\nexport const IBLTexture = createComponent(\n 'IBLTexture',\n {\n src: {\n type: Types.FilePath,\n default: 'room',\n fileTypes: '.png,.jpg,.ktx2,.hdr,.exr',\n subfolder: 'textures',\n },\n intensity: { type: Types.Float32, default: 1.0 },\n rotation: { type: Types.Vec3, default: [0, 0, 0] },\n _needsUpdate: { type: Types.Boolean, default: true },\n },\n 'Image‑based lighting from texture or Room environment',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,UAAU,GAAG,eAAe,CACvC,YAAY,EACZ;AACE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;IACD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,uDAAuD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"scene-ar-environment.js","sources":["../../src/environment/scene-ar-environment.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene-ar-environment.js","sources":["../../src/environment/scene-ar-environment.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 { Object3D, Scene, WebGLRenderer } from '../runtime/index.js';\n\nexport interface ResolvedSceneAREnvironment {\n isAR: boolean;\n background: 'transparent' | 'environment';\n}\n\nexport interface SceneAREnvironmentUpdate {\n session?: XRSession | null;\n authoredBackgrounds?: readonly Object3D[];\n}\n\n/** Resolve the fixed transparent-background policy against the active session. */\nexport function resolveSceneAREnvironment(\n session: XRSession | null | undefined,\n): ResolvedSceneAREnvironment {\n const blendMode = session?.environmentBlendMode;\n const isAR = blendMode === 'alpha-blend' || blendMode === 'additive';\n\n if (!isAR) {\n return { isAR: false, background: 'environment' };\n }\n\n return {\n isAR: true,\n background: 'transparent',\n };\n}\n\n/**\n * Applies reversible AR-only background overrides.\n *\n * Entering AR snapshots the visible environment, hides it for passthrough,\n * and restores it exactly when the session ends.\n */\nexport class SceneAREnvironmentController {\n private backgroundSuppressed = false;\n private backgroundBase: Scene['background'] = null;\n private clearAlphaBase = 1;\n private readonly authoredBackgroundVisibility = new Map<Object3D, boolean>();\n\n constructor(\n private readonly scene: Scene,\n private readonly renderer: WebGLRenderer,\n ) {}\n\n update(update: SceneAREnvironmentUpdate): ResolvedSceneAREnvironment {\n const policy = resolveSceneAREnvironment(update.session);\n\n this.updateBackground(policy.isAR, update.authoredBackgrounds ?? []);\n return policy;\n }\n\n restore(): void {\n this.restoreBackground();\n this.restoreObjectVisibility(this.authoredBackgroundVisibility);\n }\n\n private updateBackground(\n suppress: boolean,\n authoredBackgrounds: readonly Object3D[],\n ): void {\n if (!suppress) {\n this.restoreBackground();\n this.restoreObjectVisibility(this.authoredBackgroundVisibility);\n return;\n }\n\n if (!this.backgroundSuppressed) {\n this.backgroundBase = this.scene.background;\n this.clearAlphaBase = this.renderer.getClearAlpha();\n this.backgroundSuppressed = true;\n } else {\n if (this.scene.background !== null) {\n this.backgroundBase = this.scene.background;\n }\n const clearAlpha = this.renderer.getClearAlpha();\n if (clearAlpha !== 0) {\n this.clearAlphaBase = clearAlpha;\n }\n }\n\n this.scene.background = null;\n this.renderer.setClearAlpha(0);\n this.suppressObjectVisibility(\n authoredBackgrounds,\n this.authoredBackgroundVisibility,\n );\n }\n\n private restoreBackground(): void {\n if (!this.backgroundSuppressed) {\n return;\n }\n this.scene.background = this.backgroundBase;\n this.renderer.setClearAlpha(this.clearAlphaBase);\n this.backgroundSuppressed = false;\n }\n\n private suppressObjectVisibility(\n objects: Iterable<Object3D>,\n visibility: Map<Object3D, boolean>,\n ): void {\n for (const object of objects) {\n if (!visibility.has(object)) {\n visibility.set(object, object.visible);\n }\n object.visible = false;\n }\n }\n\n private restoreObjectVisibility(visibility: Map<Object3D, boolean>): void {\n for (const [object, wasVisible] of visibility) {\n object.visible = wasVisible;\n }\n visibility.clear();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"environment-raycast.js","sources":["../../src/environment-raycast/environment-raycast.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-raycast.js","sources":["../../src/environment-raycast/environment-raycast.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 { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { Matrix4, Object3D, Quaternion, Vector3 } from '../runtime/index.js';\nimport { setWorldPosition, setWorldQuaternion } from '../transform/index.js';\nimport { EnvironmentRaycastTarget, RaycastSpace } from './raycast-target.js';\n\n// Reusable math objects to avoid allocations\nconst tempMatrix = new Matrix4();\nconst tempPosition = new Vector3();\nconst tempQuaternion = new Quaternion();\nconst tempWorldQuaternion = new Quaternion();\nconst tempScale = new Vector3();\nconst tempNormal = new Vector3();\nconst tempRayOrigin = new Vector3();\nconst tempDirection = new Vector3();\nconst upVector = new Vector3(0, 1, 0);\nconst defaultDirection = new Vector3(0, 0, -1);\n\n/**\n * System that manages environment raycasting.\n * @category Environment Raycast\n */\nexport class EnvironmentRaycastSystem extends createSystem({\n targets: { required: [EnvironmentRaycastTarget] },\n}) {\n private hitTestFeatureEnabled: boolean | undefined;\n private pendingControllerSources = new Map<Entity, 'left' | 'right'>();\n\n init(): void {\n this.xrManager.addEventListener('sessionstart', () => {\n this.updateEnabledFeatures(this.xrManager.getSession());\n });\n\n this.xrManager.addEventListener('sessionend', () => {\n this.queries.targets.entities.forEach((entity) => {\n this.cleanupRaycastSource(entity);\n });\n this.hitTestFeatureEnabled = undefined;\n this.pendingControllerSources.clear();\n });\n\n // Automatic cleanup when component is removed\n this.queries.targets.subscribe('disqualify', (entity) => {\n this.cleanupRaycastSource(entity);\n });\n }\n\n update(_delta: number, _time: number): void {\n const frame = this.xrFrame;\n const session = this.xrManager.getSession();\n const referenceSpace = this.xrManager.getReferenceSpace();\n\n if (!this.hitTestFeatureEnabled || !frame || !session || !referenceSpace) {\n return;\n }\n\n this.checkPendingControllerSources(session, referenceSpace);\n\n this.queries.targets.entities.forEach((entity) => {\n const space = entity.getValue(\n EnvironmentRaycastTarget,\n 'space',\n ) as RaycastSpace;\n\n if (space === RaycastSpace.Screen) {\n this.handleTransientInput(entity, session, frame, referenceSpace);\n } else {\n this.handleStandardRaycast(entity, session, frame, referenceSpace);\n }\n });\n }\n\n private handleStandardRaycast(\n entity: Entity,\n session: XRSession,\n frame: XRFrame,\n referenceSpace: XRReferenceSpace,\n ) {\n const source = entity.getValue(EnvironmentRaycastTarget, '_source') as\n | XRHitTestSource\n | undefined;\n const sourceRequested = entity.getValue(\n EnvironmentRaycastTarget,\n '_sourceRequested',\n );\n\n if (!source && !sourceRequested) {\n this.requestRaycastSource(entity, session, referenceSpace);\n return;\n }\n\n if (source) {\n this.updateRaycastResults(entity, frame, referenceSpace);\n }\n }\n\n private handleTransientInput(\n entity: Entity,\n session: XRSession,\n frame: XRFrame,\n referenceSpace: XRReferenceSpace,\n ) {\n const transientSource = entity.getValue(\n EnvironmentRaycastTarget,\n '_transientSource',\n ) as XRTransientInputHitTestSource | undefined;\n const sourceRequested = entity.getValue(\n EnvironmentRaycastTarget,\n '_sourceRequested',\n );\n\n if (!transientSource && !sourceRequested) {\n this.requestTransientRaycastSource(entity, session);\n return;\n }\n\n if (transientSource) {\n this.updateTransientRaycastResults(\n entity,\n frame,\n referenceSpace,\n transientSource,\n );\n }\n }\n\n private checkPendingControllerSources(\n session: XRSession,\n referenceSpace: XRReferenceSpace,\n ) {\n if (this.pendingControllerSources.size === 0) {\n return;\n }\n\n for (const [entity, handedness] of this.pendingControllerSources) {\n const inputSource = this.input.xr.getPrimaryInputSource(handedness);\n if (inputSource) {\n this.pendingControllerSources.delete(entity);\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', false);\n this.requestRaycastSource(entity, session, referenceSpace);\n }\n }\n }\n\n private updateEnabledFeatures(xrSession: XRSession | null) {\n if (!xrSession) {\n return;\n }\n this.hitTestFeatureEnabled =\n xrSession.enabledFeatures?.includes('hit-test');\n if (!this.hitTestFeatureEnabled) {\n console.warn('[EnvironmentRaycastSystem] hit-test feature not enabled.');\n }\n }\n\n private async requestRaycastSource(\n entity: Entity,\n session: XRSession,\n _referenceSpace: XRReferenceSpace,\n ) {\n if (!session.requestHitTestSource) {\n return;\n }\n\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', true);\n\n try {\n const space = entity.getValue(\n EnvironmentRaycastTarget,\n 'space',\n ) as RaycastSpace;\n\n const xrSpace = await this.resolveXRSpace(entity, space, session);\n if (!xrSpace) {\n return;\n }\n\n // Build offsetRay from component properties\n const offsetRay = this.buildOffsetRay(entity);\n\n const source = await session.requestHitTestSource({\n space: xrSpace,\n offsetRay,\n });\n\n entity.setValue(EnvironmentRaycastTarget, '_source', source);\n entity.setValue(EnvironmentRaycastTarget, '_raySpace', xrSpace);\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', false);\n } catch (error) {\n console.error(\n '[EnvironmentRaycastSystem] Failed to create source:',\n error,\n );\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', false);\n }\n }\n\n private buildOffsetRay(entity: Entity): XRRay {\n const offsetPosition = entity.getValue(\n EnvironmentRaycastTarget,\n 'offsetPosition',\n ) as Vector3 | undefined;\n const offsetQuaternion = entity.getValue(\n EnvironmentRaycastTarget,\n 'offsetQuaternion',\n ) as Quaternion | undefined;\n\n // Calculate direction from quaternion (apply to default -Z direction)\n if (offsetQuaternion) {\n tempDirection.copy(defaultDirection).applyQuaternion(offsetQuaternion);\n } else {\n tempDirection.copy(defaultDirection);\n }\n\n const origin = offsetPosition\n ? new DOMPointReadOnly(\n offsetPosition.x,\n offsetPosition.y,\n offsetPosition.z,\n 1,\n )\n : new DOMPointReadOnly(0, 0, 0, 1);\n\n const direction = new DOMPointReadOnly(\n tempDirection.x,\n tempDirection.y,\n tempDirection.z,\n 0,\n );\n\n return new XRRay(origin, direction);\n }\n\n private async requestTransientRaycastSource(\n entity: Entity,\n session: XRSession,\n ) {\n if (!session.requestHitTestSourceForTransientInput) {\n return;\n }\n\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', true);\n\n try {\n const source = await session.requestHitTestSourceForTransientInput({\n profile: 'generic-touchscreen',\n });\n\n entity.setValue(EnvironmentRaycastTarget, '_transientSource', source);\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', false);\n } catch (error) {\n console.error(\n '[EnvironmentRaycastSystem] Failed to create transient source:',\n error,\n );\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', false);\n }\n }\n\n private async resolveXRSpace(\n entity: Entity,\n space: RaycastSpace,\n session: XRSession,\n ): Promise<XRSpace | null> {\n switch (space) {\n case RaycastSpace.Viewer:\n return await session.requestReferenceSpace('viewer');\n\n case RaycastSpace.Left:\n case RaycastSpace.Right: {\n const inputSource = this.input.xr.getPrimaryInputSource(space);\n if (inputSource) {\n return inputSource.targetRaySpace;\n }\n this.pendingControllerSources.set(entity, space);\n return null;\n }\n\n default:\n return await session.requestReferenceSpace('viewer');\n }\n }\n\n private updateRaycastResults(\n entity: Entity,\n frame: XRFrame,\n referenceSpace: XRReferenceSpace,\n ) {\n const source = entity.getValue(EnvironmentRaycastTarget, '_source') as\n | XRHitTestSource\n | undefined;\n if (!source) {\n return;\n }\n\n const raySpace = entity.getValue(EnvironmentRaycastTarget, '_raySpace') as\n | XRSpace\n | undefined;\n\n const object3D = entity.object3D;\n const maxDistance = entity.getValue(\n EnvironmentRaycastTarget,\n 'maxDistance',\n ) as number;\n\n try {\n const results = frame.getHitTestResults(source);\n\n if (results.length === 0) {\n this.clearHitResult(entity, object3D);\n return;\n }\n\n // Get ray origin for distance calculation\n const rayOrigin = this.getRayOrigin(frame, referenceSpace, raySpace);\n\n // Find first valid result within maxDistance\n const validResult = this.findValidHitResult(\n results,\n referenceSpace,\n maxDistance,\n rayOrigin,\n );\n\n if (!validResult) {\n this.clearHitResult(entity, object3D);\n return;\n }\n\n this.applyHitResult(\n entity,\n object3D,\n validResult,\n referenceSpace,\n undefined,\n );\n } catch {\n this.cleanupRaycastSource(entity);\n }\n }\n\n private updateTransientRaycastResults(\n entity: Entity,\n frame: XRFrame,\n referenceSpace: XRReferenceSpace,\n transientSource: XRTransientInputHitTestSource,\n ) {\n const object3D = entity.object3D;\n const maxDistance = entity.getValue(\n EnvironmentRaycastTarget,\n 'maxDistance',\n ) as number;\n\n try {\n const transientResults =\n frame.getHitTestResultsForTransientInput(transientSource);\n\n for (const transientResult of transientResults) {\n const inputSource = transientResult.inputSource;\n const rayOrigin = this.getRayOrigin(\n frame,\n referenceSpace,\n inputSource?.targetRaySpace,\n );\n\n const validResult = this.findValidHitResult(\n transientResult.results,\n referenceSpace,\n maxDistance,\n rayOrigin,\n );\n\n if (validResult) {\n this.applyHitResult(\n entity,\n object3D,\n validResult,\n referenceSpace,\n inputSource,\n );\n return;\n }\n }\n\n // No valid hit found in any transient result\n this.clearHitResult(entity, object3D);\n } catch {\n this.cleanupRaycastSource(entity);\n }\n }\n\n private getRayOrigin(\n frame: XRFrame,\n referenceSpace: XRReferenceSpace,\n raySpace: XRSpace | undefined,\n ): Vector3 | null {\n if (!raySpace) {\n return null;\n }\n const rayPose = frame.getPose(raySpace, referenceSpace);\n if (!rayPose) {\n return null;\n }\n tempRayOrigin.set(\n rayPose.transform.position.x,\n rayPose.transform.position.y,\n rayPose.transform.position.z,\n );\n return tempRayOrigin;\n }\n\n private findValidHitResult(\n results: readonly XRHitTestResult[],\n referenceSpace: XRReferenceSpace,\n maxDistance: number,\n rayOrigin: Vector3 | null,\n ): XRHitTestResult | null {\n for (const result of results) {\n const pose = result.getPose(referenceSpace);\n if (!pose) {\n continue;\n }\n\n tempMatrix.fromArray(pose.transform.matrix);\n tempMatrix.decompose(tempPosition, tempQuaternion, tempScale);\n\n // Only apply distance filter if we have a valid ray origin\n if (rayOrigin) {\n const distance = tempPosition.distanceTo(rayOrigin);\n if (distance > maxDistance) {\n continue;\n }\n }\n\n return result;\n }\n return null;\n }\n\n private applyHitResult(\n entity: Entity,\n object3D: Object3D | undefined,\n result: XRHitTestResult,\n referenceSpace: XRReferenceSpace,\n inputSource: XRInputSource | undefined,\n ) {\n const pose = result.getPose(referenceSpace);\n if (!pose) {\n this.clearHitResult(entity, object3D);\n return;\n }\n\n tempMatrix.fromArray(pose.transform.matrix);\n tempMatrix.decompose(tempPosition, tempQuaternion, tempScale);\n tempNormal.set(0, 1, 0).applyQuaternion(tempQuaternion);\n\n if (object3D) {\n setWorldPosition(object3D, tempPosition);\n tempWorldQuaternion.setFromUnitVectors(upVector, tempNormal);\n setWorldQuaternion(object3D, tempWorldQuaternion);\n object3D.visible = true;\n }\n\n entity.setValue(EnvironmentRaycastTarget, 'xrHitTestResult', result);\n entity.setValue(EnvironmentRaycastTarget, 'inputSource', inputSource);\n }\n\n private clearHitResult(entity: Entity, object3D: Object3D | undefined) {\n entity.setValue(EnvironmentRaycastTarget, 'xrHitTestResult', undefined);\n entity.setValue(EnvironmentRaycastTarget, 'inputSource', undefined);\n if (object3D) {\n object3D.visible = false;\n }\n }\n\n private cleanupRaycastSource(entity: Entity) {\n const source = entity.getValue(EnvironmentRaycastTarget, '_source') as\n | XRHitTestSource\n | undefined;\n if (source) {\n try {\n source.cancel();\n } catch {\n /* ignore */\n }\n }\n\n const transientSource = entity.getValue(\n EnvironmentRaycastTarget,\n '_transientSource',\n ) as XRTransientInputHitTestSource | undefined;\n if (transientSource) {\n try {\n transientSource.cancel();\n } catch {\n /* ignore */\n }\n }\n\n entity.setValue(EnvironmentRaycastTarget, '_source', undefined);\n entity.setValue(EnvironmentRaycastTarget, '_raySpace', undefined);\n entity.setValue(EnvironmentRaycastTarget, '_transientSource', undefined);\n entity.setValue(EnvironmentRaycastTarget, '_sourceRequested', false);\n entity.setValue(EnvironmentRaycastTarget, 'xrHitTestResult', undefined);\n entity.setValue(EnvironmentRaycastTarget, 'inputSource', undefined);\n this.pendingControllerSources.delete(entity);\n\n if (entity.object3D) {\n entity.object3D.visible = false;\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"raycast-target.js","sources":["../../src/environment-raycast/raycast-target.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;AAGG;AACI,MAAM,YAAY,GAAG;;AAE1B,IAAA,IAAI,EAAE,MAAM;;AAEZ,IAAA,KAAK,EAAE,OAAO;;AAEd,IAAA,MAAM,EAAE,QAAQ;;AAEhB,IAAA,MAAM,EAAE,QAAQ;;AAKlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACI,MAAM,wBAAwB,GAAG,eAAe,CACrD,0BAA0B,EAC1B;;AAEE,IAAA,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,KAAK;AAC5B,KAAA;;IAED,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAGlD,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAE1D,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAG5D,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAE3D,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAGvD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAEnD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAErD,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAE5D,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;CAC1D,EACD,+CAA+C;;;;"}
1
+ {"version":3,"file":"raycast-target.js","sources":["../../src/environment-raycast/raycast-target.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 { Types, createComponent } from '../ecs/component.js';\n/**\n * Ray source options for environment raycasting.\n * @category Environment Raycast\n */\nexport const RaycastSpace = {\n /** Use left controller's target ray */\n Left: 'left',\n /** Use right controller's target ray */\n Right: 'right',\n /** Use viewer/head position and gaze direction */\n Viewer: 'viewer',\n /** For phone AR - tracks screen touch for tap-to-place */\n Screen: 'screen',\n} as const;\n\nexport type RaycastSpace = (typeof RaycastSpace)[keyof typeof RaycastSpace];\n\n/**\n * Component that makes an entity follow environment raycast hit points.\n *\n * @remarks\n * The entity's Object3D is automatically positioned at the raycast hit point\n * and oriented to match the surface normal. When there's no hit, the Object3D\n * is hidden.\n *\n * Use `offsetPosition` and `offsetQuaternion` to offset the ray from the\n * space origin. This is useful for one-shot raycasts where you want to\n * cast from a specific position/orientation relative to the controller.\n *\n * @example Teleport reticle that follows controller ray\n * ```ts\n * const reticle = world.createTransformEntity(reticleMesh);\n * reticle.addComponent(EnvironmentRaycastTarget, { space: RaycastSpace.Right });\n * // Reticle automatically moves to where controller points\n * ```\n *\n * @example Place object on trigger press\n * ```ts\n * const xrResult = entity.getValue(EnvironmentRaycastTarget, 'xrHitTestResult');\n * if (xrResult && gamepad.getSelectStart()) {\n * spawnObject(entity.object3D.position.clone());\n * }\n * ```\n *\n * @category Environment Raycast\n */\nexport const EnvironmentRaycastTarget = createComponent(\n 'EnvironmentRaycastTarget',\n {\n /** Ray source: 'left', 'right', 'viewer', or 'screen'. @default 'right' */\n space: {\n type: Types.Enum,\n enum: RaycastSpace,\n default: RaycastSpace.Right,\n },\n /** Maximum raycast distance in meters. @default 100 */\n maxDistance: { type: Types.Float32, default: 100 },\n\n /** Offset position from the space origin. @default (0, 0, 0) */\n offsetPosition: { type: Types.Object, default: undefined },\n /** Offset quaternion to rotate the ray direction. @default identity */\n offsetQuaternion: { type: Types.Object, default: undefined },\n\n /** The XRHitTestResult when there's a hit, undefined otherwise. @readonly */\n xrHitTestResult: { type: Types.Object, default: undefined },\n /** For Screen mode: the input source that triggered the hit. @readonly */\n inputSource: { type: Types.Object, default: undefined },\n\n /** @internal */\n _source: { type: Types.Object, default: undefined },\n /** @internal */\n _raySpace: { type: Types.Object, default: undefined },\n /** @internal */\n _transientSource: { type: Types.Object, default: undefined },\n /** @internal */\n _sourceRequested: { type: Types.Boolean, default: false },\n },\n 'Entity follows environment raycast hit points',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;AAGG;AACI,MAAM,YAAY,GAAG;;AAE1B,IAAA,IAAI,EAAE,MAAM;;AAEZ,IAAA,KAAK,EAAE,OAAO;;AAEd,IAAA,MAAM,EAAE,QAAQ;;AAEhB,IAAA,MAAM,EAAE,QAAQ;;AAKlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACI,MAAM,wBAAwB,GAAG,eAAe,CACrD,0BAA0B,EAC1B;;AAEE,IAAA,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,KAAK;AAC5B,KAAA;;IAED,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAGlD,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAE1D,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAG5D,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAE3D,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAGvD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAEnD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAErD,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAE5D,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;CAC1D,EACD,+CAA+C;;;;"}
@@ -18,6 +18,11 @@ import { Types } from '../ecs/component.js';
18
18
  * - Supports rotation, translation, and scaling with per‑axis constraints.
19
19
  * - Configure target position and rotation offsets relative to the input source for MoveTowardsTarget mode.
20
20
  * - Works with the {@link GrabSystem} to create specialized distance grab handles.
21
+ * - Grab components are mutually exclusive per entity. Choose exactly one of
22
+ * {@link OneHandGrabbable}, {@link TwoHandsGrabbable}, or
23
+ * {@link DistanceGrabbable}; {@link GrabSystem} creates only one handle and
24
+ * ignores additional grab components. Do not rely on which component wins
25
+ * when multiple modes are present.
21
26
  * - Perfect for telekinetic‑style interactions and remote object manipulation.
22
27
  *
23
28
  * @example Basic distance grabbable object
@@ -1 +1 @@
1
- {"version":3,"file":"distance-grabbable.d.ts","sourceRoot":"","sources":["../../src/grab/distance-grabbable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAG7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,iBAAiB;IAG1B,qEAAqE;;;;;IAErE,gGAAgG;;;;;IAKhG,gGAAgG;;;;;IAKhG,8EAA8E;;;;;IAE9E,mFAAmF;;;;;IAKnF,mFAAmF;;;;;IAKnF,gFAAgF;;;;;IAEhF,kFAAkF;;;;;IAKlF,kFAAkF;;;;;IAKlF,gFAAgF;;;;;;;;;;;IAMhF,iGAAiG;;;;;IAEjG,kIAAkI;;;;;IAElI,kHAAkH;;;;;IAElH,mGAAmG;;;;;IAKnG,sHAAsH;;;;;EAOzH,CAAC"}
1
+ {"version":3,"file":"distance-grabbable.d.ts","sourceRoot":"","sources":["../../src/grab/distance-grabbable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAG7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,iBAAiB;IAG1B,qEAAqE;;;;;IAErE,gGAAgG;;;;;IAKhG,gGAAgG;;;;;IAKhG,8EAA8E;;;;;IAE9E,mFAAmF;;;;;IAKnF,mFAAmF;;;;;IAKnF,gFAAgF;;;;;IAEhF,kFAAkF;;;;;IAKlF,kFAAkF;;;;;IAKlF,gFAAgF;;;;;;;;;;;IAMhF,iGAAiG;;;;;IAEjG,kIAAkI;;;;;IAElI,kHAAkH;;;;;IAElH,mGAAmG;;;;;IAKnG,sHAAsH;;;;;EAOzH,CAAC"}
@@ -20,6 +20,11 @@ import { MovementMode } from './handles.js';
20
20
  * - Supports rotation, translation, and scaling with per‑axis constraints.
21
21
  * - Configure target position and rotation offsets relative to the input source for MoveTowardsTarget mode.
22
22
  * - Works with the {@link GrabSystem} to create specialized distance grab handles.
23
+ * - Grab components are mutually exclusive per entity. Choose exactly one of
24
+ * {@link OneHandGrabbable}, {@link TwoHandsGrabbable}, or
25
+ * {@link DistanceGrabbable}; {@link GrabSystem} creates only one handle and
26
+ * ignores additional grab components. Do not rely on which component wins
27
+ * when multiple modes are present.
23
28
  * - Perfect for telekinetic‑style interactions and remote object manipulation.
24
29
  *
25
30
  * @example Basic distance grabbable object
@@ -1 +1 @@
1
- {"version":3,"file":"distance-grabbable.js","sources":["../../src/grab/distance-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDG;AACI,MAAM,iBAAiB,GAAG,eAAe,CAC9C,mBAAmB,EACnB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE7C,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,iBAAiB;AACxC,KAAA;;IAED,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;;IAEvD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;;IAErD,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;AAEtD,IAAA,oBAAoB,EAAE;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,KAAA;;AAED,IAAA,sBAAsB,EAAE;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,KAAA;CACF,EACD,+DAA+D;;;;"}
1
+ {"version":3,"file":"distance-grabbable.js","sources":["../../src/grab/distance-grabbable.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 { Types, createComponent } from '../ecs/component.js';\nimport { MovementMode } from './handles.js';\n\n/**\n * Component for enabling distance‑based object grabbing and manipulation.\n *\n * @remarks\n * - Allows users to grab and manipulate objects from a distance through ray casting.\n * - Supports three movement modes: MoveTowardsTarget, MoveAtSource, and RotateAtSource.\n * - **MoveTowardsTarget**: Object smoothly moves toward the input source that's grabbing.\n * - **MoveAtSource**: Object moves relative to hand movement while maintaining distance.\n * - **RotateAtSource**: Object rotates in place without translation or scaling.\n * - Optional `returnToOrigin` makes objects snap back to their original position when released.\n * - Supports rotation, translation, and scaling with per‑axis constraints.\n * - Configure target position and rotation offsets relative to the input source for MoveTowardsTarget mode.\n * - Works with the {@link GrabSystem} to create specialized distance grab handles.\n * - Grab components are mutually exclusive per entity. Choose exactly one of\n * {@link OneHandGrabbable}, {@link TwoHandsGrabbable}, or\n * {@link DistanceGrabbable}; {@link GrabSystem} creates only one handle and\n * ignores additional grab components. Do not rely on which component wins\n * when multiple modes are present.\n * - Perfect for telekinetic‑style interactions and remote object manipulation.\n *\n * @example Basic distance grabbable object\n * ```ts\n * entity.addComponent(DistanceGrabbable, {\n * movementMode: MovementMode.MoveTowardsTarget,\n * })\n * ```\n *\n * @example Telekinetic manipulation that returns to origin\n * ```ts\n * entity.addComponent(DistanceGrabbable, {\n * rotate: true,\n * translate: true,\n * scale: false,\n * movementMode: MovementMode.MoveAtSource,\n * returnToOrigin: true\n * })\n * ```\n *\n * @example Rotation‑only distance interaction\n * ```ts\n * entity.addComponent(DistanceGrabbable, {\n * movementMode: MovementMode.RotateAtSource,\n * })\n * ```\n *\n * @example Distance grabbable with offset (object stays 0.3m in front of controller)\n * ```ts\n * entity.addComponent(DistanceGrabbable, {\n * movementMode: MovementMode.MoveTowardsTarget,\n * targetPositionOffset: [0, 0, -0.3], // 0.3m forward in controller space\n * targetQuaternionOffset: [0, 0, 0, 1], // no rotation offset\n * })\n * ```\n *\n * @category Grab\n * @see {@link GrabSystem}\n * @see {@link OneHandGrabbable}\n * @see {@link TwoHandsGrabbable}\n * @see {@link MovementMode}\n */\nexport const DistanceGrabbable = createComponent(\n 'DistanceGrabbable',\n {\n /** A boolean value to set whether rotating the object is allowed. */\n rotate: { type: Types.Boolean, default: true },\n /** An optional vector to define the maximum angle of the allowed rotation in [x, y, z] axes. */\n rotateMax: {\n type: Types.Vec3,\n default: [Infinity, Infinity, Infinity],\n },\n /** An optional vector to define the minimum angle of the allowed rotation in [x, y, z] axes. */\n rotateMin: {\n type: Types.Vec3,\n default: [-Infinity, -Infinity, -Infinity],\n },\n /** A boolean value to set whether moving the object's position is allowed. */\n translate: { type: Types.Boolean, default: true },\n /** An optional vector to define the maximum allowed position in [x, y, z] axes. */\n translateMax: {\n type: Types.Vec3,\n default: [Infinity, Infinity, Infinity],\n },\n /** An optional vector to define the minimum allowed position in [x, y, z] axes. */\n translateMin: {\n type: Types.Vec3,\n default: [-Infinity, -Infinity, -Infinity],\n },\n /** A boolean value to set whether scaling the object up and down is allowed. */\n scale: { type: Types.Boolean, default: true },\n /** An optional vector to define the maximum allowed scaling in [x, y, z] axes. */\n scaleMax: {\n type: Types.Vec3,\n default: [Infinity, Infinity, Infinity],\n },\n /** An optional vector to define the minimum allowed scaling in [x, y, z] axes. */\n scaleMin: {\n type: Types.Vec3,\n default: [-Infinity, -Infinity, -Infinity],\n },\n /** The movement mode of the grabbable. More details in {@link MovementMode}. */\n movementMode: {\n type: Types.Enum,\n enum: MovementMode,\n default: MovementMode.MoveTowardsTarget,\n },\n /** A boolean value to set whether the object snap back to its original position and rotation. */\n returnToOrigin: { type: Types.Boolean, default: false },\n /** A boolean value to set whether the object will be detached from its parent and attach to the scene/Level root when grabbed. */\n detachOnGrab: { type: Types.Boolean, default: false },\n /** Object movement and rotation speed factor for the MoveTowardsTarget movement mode with a scale from 0 to 1. */\n moveSpeedFactor: { type: Types.Float32, default: 0.1 },\n /** Target position offset relative to the input source for MoveTowardsTarget mode in [x, y, z]. */\n targetPositionOffset: {\n type: Types.Vec3,\n default: [0, 0, 0],\n },\n /** Target rotation offset as a quaternion relative to the input source for MoveTowardsTarget mode in [x, y, z, w]. */\n targetQuaternionOffset: {\n type: Types.Vec4,\n default: [0, 0, 0, 1],\n },\n },\n 'Component for distance-based object grabbing and manipulation',\n);\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DG;AACI,MAAM,iBAAiB,GAAG,eAAe,CAC9C,mBAAmB,EACnB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE7C,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,iBAAiB;AACxC,KAAA;;IAED,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;;IAEvD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;;IAErD,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;AAEtD,IAAA,oBAAoB,EAAE;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,KAAA;;AAED,IAAA,sBAAsB,EAAE;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,KAAA;CACF,EACD,+DAA+D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"grab-helpers.js","sources":["../../src/grab/grab-helpers.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAIH;;;;;;;;AAQG;AAEH;;;;;AAKG;AACG,SAAU,gBAAgB,CAC9B,MAAwC,EAAA;IAExC,IAAI,CAAC,MAAM,EAAE;QACX;IACF;AACA,IAAA,IAAI;QACF,MAAM,CAAC,MAAM,EAAE;IACjB;IAAE,OAAA,EAAA,EAAM,EAAC;AACX;AAEA;;;;;;;;;;;;;AAaG;SACa,cAAc,CAC5B,MAAwC,EACxC,cAAiC,EACjC,eAAkC,EAAA;IAElC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AAC3C,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AAC1D,QAAA,OAAO,MAAM;IACf;AACA,IAAA,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AAC3D,QAAA,OAAO,OAAO;IAChB;AACA,IAAA,OAAO,IAAI;AACb;;;;"}
1
+ {"version":3,"file":"grab-helpers.js","sources":["../../src/grab/grab-helpers.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 { HandleStore } from '@pmndrs/handle';\n\n/**\n * Pure helpers backing {@link GrabSystem.forceRelease} and\n * {@link GrabSystem.getHolderHand}. Kept side-effect-free and dependency-light\n * so they can be unit-tested without spinning up the full ECS / xr-input\n * import chain.\n *\n * Not part of the public package API surface — `grab-system.ts` is the only\n * intended caller.\n */\n\n/**\n * Cancel every active pointer on a grab `handle`. Safe to call when `handle`\n * is `undefined`, when the entity is not currently held, or when the\n * underlying `cancel()` throws (errors are swallowed to match the cleanup\n * semantics already used inside `GrabSystem` on Handle-component disqualify).\n */\nexport function cancelGrabHandle(\n handle: HandleStore<unknown> | undefined,\n): void {\n if (!handle) {\n return;\n }\n try {\n handle.cancel();\n } catch {}\n}\n\n/**\n * Determine which controller is currently holding the entity backing\n * `handle`, given the candidate pointer IDs per hand.\n *\n * Each hand contributes the IDs of every pointer kind that can capture a\n * grab handle today — near grabs use the `grab` sub-pointer, distance grabs\n * use the `ray` sub-pointer (per `pointerEventsType` on the handle's\n * object). Passing both keeps `getHolderHand` correct across both grab\n * styles without leaking pointer-kind selection into callers.\n *\n * Returns `'left'` / `'right'` for single-hand grabs, `'left'` for two-hand\n * grabs (deterministic), and `null` when the entity has no active grabs or\n * none of the candidate IDs match.\n */\nexport function findHolderHand(\n handle: HandleStore<unknown> | undefined,\n leftPointerIds: readonly number[],\n rightPointerIds: readonly number[],\n): 'left' | 'right' | null {\n if (!handle || handle.inputState.size === 0) {\n return null;\n }\n if (leftPointerIds.some((id) => handle.inputState.has(id))) {\n return 'left';\n }\n if (rightPointerIds.some((id) => handle.inputState.has(id))) {\n return 'right';\n }\n return null;\n}\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAIH;;;;;;;;AAQG;AAEH;;;;;AAKG;AACG,SAAU,gBAAgB,CAC9B,MAAwC,EAAA;IAExC,IAAI,CAAC,MAAM,EAAE;QACX;IACF;AACA,IAAA,IAAI;QACF,MAAM,CAAC,MAAM,EAAE;IACjB;IAAE,OAAA,EAAA,EAAM,EAAC;AACX;AAEA;;;;;;;;;;;;;AAaG;SACa,cAAc,CAC5B,MAAwC,EACxC,cAAiC,EACjC,eAAkC,EAAA;IAElC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AAC3C,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AAC1D,QAAA,OAAO,MAAM;IACf;AACA,IAAA,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AAC3D,QAAA,OAAO,OAAO;IAChB;AACA,IAAA,OAAO,IAAI;AACb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"grab-system.js","sources":["../../src/grab/grab-system.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AAsBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACG,MAAO,UAAW,SAAQ,YAAY,CAC1C;AACE,IAAA,iBAAiB,EAAE;QACjB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;AAC7B,KAAA;AACD,IAAA,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;AAC9B,KAAA;AACD,IAAA,kBAAkB,EAAE;QAClB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;AAC9B,KAAA;AACD,IAAA,OAAO,EAAE;QACP,QAAQ,EAAE,CAAC,MAAM,CAAC;AACnB,KAAA;CACF,EACD;AACE;;;;AAIG;IACH,mBAAmB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;CAC7D,CACF,CAAA;IACC,IAAI,GAAA;;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;QACvC;;AAGA,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACtC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,KAAI;AAC9D,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACvC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,KAAI;AAC9D,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACvC,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,KAAI;AACtD,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAE9B;YACb,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI;oBACF,CAAC,CAAC,MAAM,EAAE;gBACZ;gBAAE,OAAA,EAAA,EAAM,EAAC;YACX;AACA,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,gBAAA,MAAM,CAAC,QAAQ,CAAC,iBAAiB,GAAG,KAAK;YAC3C;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAChD,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAChC;QACD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KACjD,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CACjC;QACD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KACjD,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CACjC;;AAGD,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;AAC/D,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;IAClE;IAEA,MAAM,CAAC,KAAa,EAAE,IAAY,EAAA;;;AAGhC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;YAClC,CAAC,MAAM,EAAE,OAAO,CAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;;AAClD,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;AAC/C,oBAAA,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI;AAC7B,oBAAA,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,cAAc,EAAE,EAAE;AACxD,wBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,SAAS,CAC/C,SAAS,EACT,MAAM,EACN;4BACE,SAAS;AACV,yBAAA,CACF;oBACH;AACA,oBAAA,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAE,EAAE;AACtD,wBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE;4BACjE,SAAS;AACV,yBAAA,CAAC;oBACJ;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC/C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAE9B;YACb,IAAI,CAAC,EAAE;AACL,gBAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;gBAEf,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;oBACzB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AACjC,wBAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;oBAC9B;gBACF;AAAO,qBAAA,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AACvC,oBAAA,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;gBACjC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACH,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,gBAAgB,CACd,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAqC,CACvE;IACH;AAEA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACH,IAAA,aAAa,CAAC,MAAc,EAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK;QAC/C,OAAO,cAAc,CACnB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAqC;;;;;AAKtE,QAAA,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EACvD,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAC1D;IACH;AAEQ,IAAA,uBAAuB,CAAC,MAAc,EAAA;AAC5C,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/B;QACF;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ;AAC9B,QAAA,IAAI,EAAE,MAAM,YAAY,QAAQ,CAAC,EAAE;YACjC;QACF;AACA,QAAA,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,CAAC;QACnD,MAAM,GAAG,GAAG,MAAuD;QACnE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC;QACrE,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,cAAc,CAAC;QAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,cAAc,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO;YACzC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ;AAChD,kBAAE;oBACE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;oBACnD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;oBACnD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;AACpD;AACH,kBAAE,KAAK;YACT,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,WAAW;AACtD,kBAAE;oBACE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;oBACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;oBACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;AAC1D;AACH,kBAAE,KAAK;AACT,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB,GAAG,CAAC,iBAAiB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;QACvC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnD;AAEQ,IAAA,wBAAwB,CAAC,MAAc,EAAA;AAC7C,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/B;QACF;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ;AAC9B,QAAA,IAAI,EAAE,MAAM,YAAY,QAAQ,CAAC,EAAE;YACjC;QACF;AACA,QAAA,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACpD,MAAM,GAAG,GAAG,MAAuD;QACnE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACtE,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CACvC,iBAAiB,EACjB,cAAc,CACf;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CACvC,iBAAiB,EACjB,cAAc,CACf;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO;YACzC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ;AACjD,kBAAE;oBACE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;oBACnD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;oBACnD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;AACpD;AACH,kBAAE,KAAK;YACT,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,WAAW;AACvD,kBAAE;oBACE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;oBACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;oBACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;AAC1D;AACH,kBAAE,KAAK;YACT,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO;AAC/C,kBAAE;oBACE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAqB;oBACjD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAqB;oBACjD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAqB;AAClD;AACH,kBAAE,KAAK;AACT,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB,GAAG,CAAC,iBAAiB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;QACvC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnD;AAEQ,IAAA,wBAAwB,CAAC,MAAc,EAAA;;AAC7C,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/B;QACF;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ;AAC9B,QAAA,IAAI,EAAE,MAAM,YAAY,QAAQ,CAAC,EAAE;YACjC;QACF;AACA,QAAA,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACpD,MAAM,GAAG,GAAG,MAAuD;AACnE,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ;AAC7C,cAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACzB,cAAE,IAAI,CAAC,KAAK,CAAC,WAAW;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACtE,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CACvC,iBAAiB,EACjB,cAAc,CACf;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CACvC,iBAAiB,EACjB,cAAc,CACf;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC;QACpE,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,CAAC;AACvE,QAAA,MAAM,cAAc,GAAG,OAAO,CAC5B,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CACrD;AACD,QAAA,MAAM,YAAY,GAAG,OAAO,CAC1B,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,CAAC,CACnD;QACD,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAC1C,iBAAiB,EACjB,sBAAsB,CACvB;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAC3C,iBAAiB,EACjB,wBAAwB,CACzB;AACD,QAAA,MAAM,IAAI,GAAG,OAAO;YAClB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ;AACjD,kBAAE;oBACE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;oBACnD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;oBACnD,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAqB;AACpD;AACH,kBAAE,KAAK;AACT,YAAA,SAAS,EACP,YAAY,KAAK,YAAY,CAAC;AAC5B,kBAAG;kBACD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,WAAW;AAC9C,sBAAE;wBACE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;wBACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;wBACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAqB;AAC1D;AACH,sBAAE,KAAK;AACb,YAAA,KAAK,EACH,YAAY,KAAK,YAAY,CAAC;AAC5B,kBAAE;kBACA,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO;AAC1C,sBAAE;wBACE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAqB;wBACjD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAqB;wBACjD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAqB;AAClD;AACH,sBAAE,KAAK;AACb,YAAA,WAAW,EAAE,KAAK;AACnB,SAAA,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,kBAAkB,CACnC,GAAG,EACH,UAAU,CAAC,QAAS,EACpB,IAAI,EACJ,YAAa,EACb,cAAc,EACd,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG,EAC5D,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EACvE,IAAI,UAAU,CACZ,gBAAgB,CAAC,CAAC,CAAC,EACnB,gBAAgB,CAAC,CAAC,CAAC,EACnB,gBAAgB,CAAC,CAAC,CAAC,EACnB,gBAAgB,CAAC,CAAC,CAAC,CACpB,EACD,YAAY,CACb;AACD,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB,GAAG,CAAC,iBAAiB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QACxC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnD;AACD;;;;"}
1
+ {"version":3,"file":"grab-system.js","sources":["../../src/grab/grab-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 { HandleStore } from '@pmndrs/handle';\nimport { PointerEventsMap } from '@pmndrs/pointer-events';\nimport { Types } from '../ecs/component.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { LevelTag } from '../level/index.js';\nimport {\n Object3D,\n Object3DEventMap,\n Vector3,\n Quaternion,\n} from '../runtime/index.js';\nimport { DistanceGrabbable } from './distance-grabbable.js';\nimport { cancelGrabHandle, findHolderHand } from './grab-helpers.js';\nimport { warnIfNoRaycastableMesh } from './grab-warnings.js';\nimport { Grabbed } from './grabbed.js';\nimport { DistanceGrabHandle, MovementMode, Handle } from './handles.js';\nimport { OneHandGrabbable } from './one-hand-grabbable.js';\nimport { TwoHandsGrabbable } from './two-hands-grabbable.js';\n\n/**\n * Manages interactive object grabbing and manipulation for VR/AR experiences.\n *\n * @remarks\n * - Uses the `@pmndrs/handle` library for precise multitouch manipulation.\n * - Automatically creates handle instances for entities with grabbable components.\n * - Supports three types of grab interactions: one‑hand, two‑hand, and distance grabbing.\n * - Automatically cleans up handle instances when grabbable components are removed.\n *\n * @example Basic grab system setup\n * ```ts\n * // Add to your world to enable grab interactions\n * world.addSystem(GrabSystem)\n *\n * // Create a grabbable box\n * const box = world.createEntity()\n * box.addComponent(OneHandGrabbable, {})\n * ```\n *\n * @example Two‑handed manipulation\n * ```ts\n * // Create an object that can be scaled with two hands\n * const sculpture = world.createEntity()\n * sculpture.addComponent(TwoHandsGrabbable, {\n * scaleMin: [0.5, 0.5, 0.5],\n * scaleMax: [3, 3, 3]\n * })\n * ```\n *\n * @category Grab\n * @see {@link OneHandGrabbable}\n * @see {@link TwoHandsGrabbable}\n * @see {@link DistanceGrabbable}\n */\nexport class GrabSystem extends createSystem(\n {\n oneHandGrabbables: {\n required: [OneHandGrabbable],\n },\n twoHandsGrabbables: {\n required: [TwoHandsGrabbable],\n },\n distanceGrabbables: {\n required: [DistanceGrabbable],\n },\n handles: {\n required: [Handle],\n },\n },\n {\n /**\n * Controls whether hand pinch gestures are forwarded as squeeze events for grab interactions.\n * Set to `false` to disable pinch-to-grab and require the physical squeeze button instead.\n * @default false\n */\n useHandPinchForGrab: { type: Types.Boolean, default: false },\n },\n) {\n init() {\n // Ensure Handle component is registered in the world before queries rely on it\n if (!Handle.bitmask) {\n this.world.registerComponent(Handle);\n }\n if (!Grabbed.bitmask) {\n this.world.registerComponent(Grabbed);\n }\n\n // Reactive handle creation per grabbable type\n this.queries.oneHandGrabbables.subscribe('qualify', (entity) => {\n this.initializeOneHandHandle(entity);\n });\n this.queries.twoHandsGrabbables.subscribe('qualify', (entity) => {\n this.initializeTwoHandsHandle(entity);\n });\n this.queries.distanceGrabbables.subscribe('qualify', (entity) => {\n this.initializeDistanceHandle(entity);\n });\n\n // Unified cleanup for any handle\n this.queries.handles.subscribe('disqualify', (entity) => {\n const h = Handle.data.instance[entity.index] as\n | HandleStore<unknown>\n | undefined;\n if (h) {\n try {\n h.cancel();\n } catch {}\n }\n if (entity.object3D) {\n entity.object3D.pointerEventsType = 'all';\n }\n });\n\n // Initial pass for already-eligible entities (qualify doesn't fire retroactively)\n this.queries.oneHandGrabbables.entities.forEach((e) =>\n this.initializeOneHandHandle(e),\n );\n this.queries.twoHandsGrabbables.entities.forEach((e) =>\n this.initializeTwoHandsHandle(e),\n );\n this.queries.distanceGrabbables.entities.forEach((e) =>\n this.initializeDistanceHandle(e),\n );\n\n // Enable grab sub-pointer per hand when GrabSystem is active\n this.input.xr.multiPointers.left.toggleSubPointer('grab', true);\n this.input.xr.multiPointers.right.toggleSubPointer('grab', true);\n }\n\n update(delta: number, time: number): void {\n // Forward hand pinch events to squeeze for grab interactions\n // Only forward if the system-level useHandPinchForGrab flag is enabled\n if (this.config.useHandPinchForGrab) {\n (['left', 'right'] as const).forEach((handedness) => {\n if (this.input.xr.isPrimary('hand', handedness)) {\n const timeStamp = time * 1000;\n if (this.input.xr.gamepads[handedness]?.getSelectStart()) {\n this.input.xr.multiPointers[handedness].routeDown(\n 'squeeze',\n 'grab',\n {\n timeStamp,\n },\n );\n }\n if (this.input.xr.gamepads[handedness]?.getSelectEnd()) {\n this.input.xr.multiPointers[handedness].routeUp('squeeze', 'grab', {\n timeStamp,\n });\n }\n }\n });\n }\n\n // Unified handle updates\n this.queries.handles.entities.forEach((entity) => {\n const h = Handle.data.instance[entity.index] as\n | HandleStore<unknown>\n | undefined;\n if (h) {\n h.update(delta);\n // Manage Grabbed tag based on active grab state\n if (h.inputState.size > 0) {\n if (!entity.hasComponent(Grabbed)) {\n entity.addComponent(Grabbed);\n }\n } else if (entity.hasComponent(Grabbed)) {\n entity.removeComponent(Grabbed);\n }\n }\n });\n }\n\n /**\n * Force-release `entity` if it is currently being held.\n *\n * @remarks\n * Cancels every active pointer on the entity's grab handle, which causes\n * `update()` on the next frame to remove the {@link Grabbed} tag. Safe to\n * call when the entity is not held or has never been grabbable — a no-op\n * in those cases.\n *\n * Useful for game-state changes that need to drop held items: level resets,\n * weapon swaps, death/respawn, cinematics, etc.\n *\n * @example\n * ```ts\n * const grab = world.getSystem(GrabSystem);\n * grab.forceRelease(weaponEntity);\n * ```\n */\n forceRelease(entity: Entity): void {\n cancelGrabHandle(\n Handle.data.instance[entity.index] as HandleStore<unknown> | undefined,\n );\n }\n\n /**\n * Identify which controller is currently holding `entity`.\n *\n * @returns `'left'` or `'right'` when a single hand holds the entity,\n * `null` when the entity is not held (or has no grab handle).\n *\n * @remarks\n * For two-handed grabs (both controllers active on the same entity), the\n * left hand is reported. Callers needing per-hand state for two-handed\n * interactions should track grab/release events themselves rather than\n * polling this method.\n *\n * Useful for hand-aware behaviors: recoil/animation that should react to\n * the holding controller, hand-specific UI prompts, etc.\n *\n * @example\n * ```ts\n * const grab = world.getSystem(GrabSystem);\n * const hand = grab.getHolderHand(gunEntity);\n * if (hand) {\n * playRecoilOn(hand);\n * }\n * ```\n */\n getHolderHand(entity: Entity): 'left' | 'right' | null {\n const left = this.input.xr.multiPointers.left;\n const right = this.input.xr.multiPointers.right;\n return findHolderHand(\n Handle.data.instance[entity.index] as HandleStore<unknown> | undefined,\n // Near grabs capture via the `grab` sub-pointer; distance grabs capture\n // via `ray` (see `initializeDistanceHandle` setting\n // `pointerEventsType = { deny: 'grab' }`). Check both per hand so\n // distance-held entities don't silently report `null`.\n [left.getPointer('grab').id, left.getPointer('ray').id],\n [right.getPointer('grab').id, right.getPointer('ray').id],\n );\n }\n\n private initializeOneHandHandle(entity: Entity) {\n if (entity.hasComponent(Handle)) {\n return;\n }\n const object = entity.object3D;\n if (!(object instanceof Object3D)) {\n return;\n }\n warnIfNoRaycastableMesh(entity, 'OneHandGrabbable');\n const obj = object as Object3D<PointerEventsMap & Object3DEventMap>;\n const rotateMax = entity.getVectorView(OneHandGrabbable, 'rotateMax');\n const rotateMin = entity.getVectorView(OneHandGrabbable, 'rotateMin');\n const translateMax = entity.getVectorView(OneHandGrabbable, 'translateMax');\n const translateMin = entity.getVectorView(OneHandGrabbable, 'translateMin');\n const handle = new HandleStore(obj, () => ({\n rotate: entity.getValue(OneHandGrabbable, 'rotate')\n ? {\n x: [rotateMin[0], rotateMax[0]] as [number, number],\n y: [rotateMin[1], rotateMax[1]] as [number, number],\n z: [rotateMin[2], rotateMax[2]] as [number, number],\n }\n : false,\n translate: entity.getValue(OneHandGrabbable, 'translate')\n ? {\n x: [translateMin[0], translateMax[0]] as [number, number],\n y: [translateMin[1], translateMax[1]] as [number, number],\n z: [translateMin[2], translateMax[2]] as [number, number],\n }\n : false,\n projectRays: false,\n multitouch: false,\n }));\n handle.bind(obj);\n obj.pointerEventsType = { deny: 'ray' };\n entity.addComponent(Handle, { instance: handle });\n }\n\n private initializeTwoHandsHandle(entity: Entity) {\n if (entity.hasComponent(Handle)) {\n return;\n }\n const object = entity.object3D;\n if (!(object instanceof Object3D)) {\n return;\n }\n warnIfNoRaycastableMesh(entity, 'TwoHandsGrabbable');\n const obj = object as Object3D<PointerEventsMap & Object3DEventMap>;\n const rotateMax = entity.getVectorView(TwoHandsGrabbable, 'rotateMax');\n const rotateMin = entity.getVectorView(TwoHandsGrabbable, 'rotateMin');\n const translateMax = entity.getVectorView(\n TwoHandsGrabbable,\n 'translateMax',\n );\n const translateMin = entity.getVectorView(\n TwoHandsGrabbable,\n 'translateMin',\n );\n const scaleMax = entity.getVectorView(TwoHandsGrabbable, 'scaleMax');\n const scaleMin = entity.getVectorView(TwoHandsGrabbable, 'scaleMin');\n const handle = new HandleStore(obj, () => ({\n rotate: entity.getValue(TwoHandsGrabbable, 'rotate')\n ? {\n x: [rotateMin[0], rotateMax[0]] as [number, number],\n y: [rotateMin[1], rotateMax[1]] as [number, number],\n z: [rotateMin[2], rotateMax[2]] as [number, number],\n }\n : false,\n translate: entity.getValue(TwoHandsGrabbable, 'translate')\n ? {\n x: [translateMin[0], translateMax[0]] as [number, number],\n y: [translateMin[1], translateMax[1]] as [number, number],\n z: [translateMin[2], translateMax[2]] as [number, number],\n }\n : false,\n scale: entity.getValue(TwoHandsGrabbable, 'scale')\n ? {\n x: [scaleMin[0], scaleMax[0]] as [number, number],\n y: [scaleMin[1], scaleMax[1]] as [number, number],\n z: [scaleMin[2], scaleMax[2]] as [number, number],\n }\n : false,\n projectRays: false,\n multitouch: true,\n }));\n handle.bind(obj);\n obj.pointerEventsType = { deny: 'ray' };\n entity.addComponent(Handle, { instance: handle });\n }\n\n private initializeDistanceHandle(entity: Entity) {\n if (entity.hasComponent(Handle)) {\n return;\n }\n const object = entity.object3D;\n if (!(object instanceof Object3D)) {\n return;\n }\n warnIfNoRaycastableMesh(entity, 'DistanceGrabbable');\n const obj = object as Object3D<PointerEventsMap & Object3DEventMap>;\n const rootEntity = entity.hasComponent(LevelTag)\n ? this.world.activeLevel.value\n : this.world.sceneEntity;\n const rotateMax = entity.getVectorView(DistanceGrabbable, 'rotateMax');\n const rotateMin = entity.getVectorView(DistanceGrabbable, 'rotateMin');\n const translateMax = entity.getVectorView(\n DistanceGrabbable,\n 'translateMax',\n );\n const translateMin = entity.getVectorView(\n DistanceGrabbable,\n 'translateMin',\n );\n const scaleMax = entity.getVectorView(DistanceGrabbable, 'scaleMax');\n const scaleMin = entity.getVectorView(DistanceGrabbable, 'scaleMin');\n const movementMode = entity.getValue(DistanceGrabbable, 'movementMode');\n const returnToOrigin = Boolean(\n entity.getValue(DistanceGrabbable, 'returnToOrigin'),\n );\n const detachOnGrab = Boolean(\n entity.getValue(DistanceGrabbable, 'detachOnGrab'),\n );\n const targetPosOffset = entity.getVectorView(\n DistanceGrabbable,\n 'targetPositionOffset',\n );\n const targetQuatOffset = entity.getVectorView(\n DistanceGrabbable,\n 'targetQuaternionOffset',\n );\n const opts = () => ({\n rotate: entity.getValue(DistanceGrabbable, 'rotate')\n ? {\n x: [rotateMin[0], rotateMax[0]] as [number, number],\n y: [rotateMin[1], rotateMax[1]] as [number, number],\n z: [rotateMin[2], rotateMax[2]] as [number, number],\n }\n : false,\n translate:\n movementMode === MovementMode.RotateAtSource\n ? ('as-rotate' as const)\n : entity.getValue(DistanceGrabbable, 'translate')\n ? {\n x: [translateMin[0], translateMax[0]] as [number, number],\n y: [translateMin[1], translateMax[1]] as [number, number],\n z: [translateMin[2], translateMax[2]] as [number, number],\n }\n : false,\n scale:\n movementMode === MovementMode.RotateAtSource\n ? false\n : entity.getValue(DistanceGrabbable, 'scale')\n ? {\n x: [scaleMin[0], scaleMax[0]] as [number, number],\n y: [scaleMin[1], scaleMax[1]] as [number, number],\n z: [scaleMin[2], scaleMax[2]] as [number, number],\n }\n : false,\n projectRays: false,\n });\n const handle = new DistanceGrabHandle(\n obj,\n rootEntity.object3D!,\n opts,\n movementMode!,\n returnToOrigin,\n entity.getValue(DistanceGrabbable, 'moveSpeedFactor') ?? 0.1,\n new Vector3(targetPosOffset[0], targetPosOffset[1], targetPosOffset[2]),\n new Quaternion(\n targetQuatOffset[0],\n targetQuatOffset[1],\n targetQuatOffset[2],\n targetQuatOffset[3],\n ),\n detachOnGrab,\n );\n handle.bind(obj);\n obj.pointerEventsType = { deny: 'grab' };\n entity.addComponent(Handle, { instance: handle });\n }\n}\n"],"names":[],"mappings":"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"}