@iwsdk/core 1.0.0-rc.0 → 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 (132) hide show
  1. package/dist/asset/asset-manager.js.map +1 -1
  2. package/dist/asset/cache-manager.js.map +1 -1
  3. package/dist/asset/loaders/audio-loader.js.map +1 -1
  4. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  5. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  7. package/dist/asset/loaders/texture-loader.js.map +1 -1
  8. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  9. package/dist/audio/audio-pool.js.map +1 -1
  10. package/dist/audio/audio-system.js.map +1 -1
  11. package/dist/audio/audio-utils.js.map +1 -1
  12. package/dist/audio/audio.js.map +1 -1
  13. package/dist/camera/camera-source.js.map +1 -1
  14. package/dist/camera/camera-system.js.map +1 -1
  15. package/dist/camera/camera-utils.js.map +1 -1
  16. package/dist/camera/types.js.map +1 -1
  17. package/dist/depth/depth-occludable.js.map +1 -1
  18. package/dist/depth/depth-sensing-system.js.map +1 -1
  19. package/dist/depth/depth-textures.js.map +1 -1
  20. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  21. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  22. package/dist/ecs/builtin-components.js.map +1 -1
  23. package/dist/ecs/component-editor-metadata.js.map +1 -1
  24. package/dist/ecs/component-manifest.js.map +1 -1
  25. package/dist/ecs/entity.js.map +1 -1
  26. package/dist/ecs/system.js.map +1 -1
  27. package/dist/ecs/world.js.map +1 -1
  28. package/dist/environment/dome-gradient.js.map +1 -1
  29. package/dist/environment/dome-texture.js.map +1 -1
  30. package/dist/environment/environment-system.js.map +1 -1
  31. package/dist/environment/gradient-environment.js.map +1 -1
  32. package/dist/environment/ibl-gradient.js.map +1 -1
  33. package/dist/environment/ibl-texture.js.map +1 -1
  34. package/dist/environment/scene-ar-environment.js.map +1 -1
  35. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  36. package/dist/environment-raycast/raycast-target.js.map +1 -1
  37. package/dist/grab/distance-grabbable.js.map +1 -1
  38. package/dist/grab/grab-helpers.js.map +1 -1
  39. package/dist/grab/grab-system.js.map +1 -1
  40. package/dist/grab/grab-warnings.js.map +1 -1
  41. package/dist/grab/grabbed.js.map +1 -1
  42. package/dist/grab/handles.js.map +1 -1
  43. package/dist/grab/index.js.map +1 -1
  44. package/dist/grab/one-hand-grabbable.js.map +1 -1
  45. package/dist/grab/pointer-events-patch.js.map +1 -1
  46. package/dist/grab/two-hands-grabbable.js.map +1 -1
  47. package/dist/index.js +3 -3
  48. package/dist/index.js.map +1 -1
  49. package/dist/init/browser-camera.js.map +1 -1
  50. package/dist/init/player-camera.js.map +1 -1
  51. package/dist/init/session-grant.js.map +1 -1
  52. package/dist/init/world-initializer.js +2 -3
  53. package/dist/init/world-initializer.js.map +1 -1
  54. package/dist/init/xr.js.map +1 -1
  55. package/dist/input/canvas-pointer-system.js.map +1 -1
  56. package/dist/input/input-actions.js.map +1 -1
  57. package/dist/input/input-manager.js.map +1 -1
  58. package/dist/input/input-system.js.map +1 -1
  59. package/dist/input/state-tags.js.map +1 -1
  60. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  61. package/dist/input/stateful-keyboard.js.map +1 -1
  62. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  63. package/dist/layers/xr-layer-init.js.map +1 -1
  64. package/dist/layers/xr-layer-state.js.map +1 -1
  65. package/dist/layers/xr-layer-system.js.map +1 -1
  66. package/dist/layers/xr-layer-transform.js.map +1 -1
  67. package/dist/layers/xr-quad-layer.js.map +1 -1
  68. package/dist/level/level-component-applier.js.map +1 -1
  69. package/dist/level/level-player-rig.js.map +1 -1
  70. package/dist/level/level-root.js.map +1 -1
  71. package/dist/level/level-scene-environment.js.map +1 -1
  72. package/dist/level/level-scene-json-importer.js.map +1 -1
  73. package/dist/level/level-scene-material.js.map +1 -1
  74. package/dist/level/level-scene-object.js.map +1 -1
  75. package/dist/level/level-scene-primitive.js.map +1 -1
  76. package/dist/level/level-system.js.map +1 -1
  77. package/dist/level/level-tag.js.map +1 -1
  78. package/dist/lighting/light-binding.js.map +1 -1
  79. package/dist/lighting/light-components.js.map +1 -1
  80. package/dist/lighting/light-system.js.map +1 -1
  81. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  82. package/dist/locomotion/locomotion-environment.js.map +1 -1
  83. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  84. package/dist/locomotion/locomotion.js.map +1 -1
  85. package/dist/locomotion/materials/line.js.map +1 -1
  86. package/dist/locomotion/slide.js.map +1 -1
  87. package/dist/locomotion/teleport.js.map +1 -1
  88. package/dist/locomotion/turn.js.map +1 -1
  89. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  90. package/dist/mcp/mcp-runtime.js.map +1 -1
  91. package/dist/mcp/scene-tools.js.map +1 -1
  92. package/dist/mcp/ui-debug-tools.js.map +1 -1
  93. package/dist/physics/physics-runtime.js.map +1 -1
  94. package/dist/physics/physics-system.js.map +1 -1
  95. package/dist/physics/physics-transport.js.map +1 -1
  96. package/dist/physics/physics-worker-protocol.js.map +1 -1
  97. package/dist/physics/physics-worker-utils.js.map +1 -1
  98. package/dist/physics/physics-worker.js.map +1 -1
  99. package/dist/physics/physicsBody.js.map +1 -1
  100. package/dist/physics/physicsManipulation.js.map +1 -1
  101. package/dist/physics/physicsShape.js.map +1 -1
  102. package/dist/physics/utils.js.map +1 -1
  103. package/dist/project/normalize.js.map +1 -1
  104. package/dist/project/paths.js.map +1 -1
  105. package/dist/project/types.js.map +1 -1
  106. package/dist/project/validation.js.map +1 -1
  107. package/dist/runtime/three.js.map +1 -1
  108. package/dist/scene-understanding/anchor.js.map +1 -1
  109. package/dist/scene-understanding/mesh.js.map +1 -1
  110. package/dist/scene-understanding/plane.js.map +1 -1
  111. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  112. package/dist/transform/synced-euler.js.map +1 -1
  113. package/dist/transform/synced-quaternion.js.map +1 -1
  114. package/dist/transform/synced-vector3.js.map +1 -1
  115. package/dist/transform/transform-component.js.map +1 -1
  116. package/dist/transform/transform-utils.js.map +1 -1
  117. package/dist/transform/transform.js.map +1 -1
  118. package/dist/ui/document.js.map +1 -1
  119. package/dist/ui/follow-component.js.map +1 -1
  120. package/dist/ui/follow.js.map +1 -1
  121. package/dist/ui/panel-components.js.map +1 -1
  122. package/dist/ui/screenspace-component.js.map +1 -1
  123. package/dist/ui/screenspace.js.map +1 -1
  124. package/dist/ui/ui.js.map +1 -1
  125. package/dist/ui/uikitml-asset.js.map +1 -1
  126. package/dist/ui/uikitml.js.map +1 -1
  127. package/dist/version.d.ts +1 -1
  128. package/dist/version.js +1 -1
  129. package/dist/version.js.map +1 -1
  130. package/dist/visibility/visibility-component.js.map +1 -1
  131. package/dist/visibility/visibility.js.map +1 -1
  132. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"environment-system.js","sources":["../../src/environment/environment-system.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;AAAA;;;;;AAKG;AAkCH;;;;;AAKG;AACG,SAAU,oBAAoB,CAClC,GAAU,EACV,GAAsB,EACtB,OAA0B,EAC1B,MAAyB,EAAA;IAEzB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1E,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACtE,IAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;AAC1C;AAYA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACG,MAAO,iBAAkB,SAAQ,YAAY,CAAC;IAClD,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE;IACpD,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE;IACtD,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE;CACrD,CAAC,CAAA;AALF,IAAA,WAAA,GAAA;;QAMU,IAAA,CAAA,KAAK,GAAa,EAAE;AAGpB,QAAA,IAAA,CAAA,QAAQ,GAAU,IAAI,KAAK,EAAE;QAC7B,IAAA,CAAA,iBAAiB,GAAW,CAAC;QAC7B,IAAA,CAAA,oBAAoB,GAAwB,IAAI;QAChD,IAAA,CAAA,kBAAkB,GAAY,KAAK;;QAoUnC,IAAA,CAAA,gBAAgB,GAAG,MAAW;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;YACnD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;YACA,IAAI,CAAC,iBAAiB,EAAE;AAC1B,QAAA,CAAC;QAYO,IAAA,CAAA,cAAc,GAAG,MAAW;;AAClC,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,oBAAoB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI;AAC7B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAC1B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC9B,QAAA,CAAC;IAqIH;IAjeE,IAAI,GAAA;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,4BAA4B,CACnD,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,CACd;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAK;;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpB,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS;YACxC,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACnC,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAC/D;;QAGD,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;AAClE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAK;;YAC1B,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC;YACzE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;AACrE,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,oBAAoB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI;AAC7B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAClC,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;;AAEJ,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;YACnD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACjC;QACF;;AAGA,QAAA,IAAI,gBAAoC;QACxC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;YAClD,gBAAgB,GAAG,CAAC;YACpB;QACF;QACA,IAAI,CAAC,gBAAgB,EAAE;YACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;gBACnD,gBAAgB,GAAG,CAAC;gBACpB;YACF;QACF;QAEA,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;QAC1C;aAAO;YACL,IAAI,CAAC,qBAAqB,EAAE;QAC9B;;AAGA,QAAA,IAAI,SAA6B;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;YACjD,SAAS,GAAG,CAAC;YACb;QACF;QACA,IAAI,CAAC,SAAS,EAAE;YACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;gBAClD,SAAS,GAAG,CAAC;gBACb;YACF;QACF;QAEA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC5B;aAAO;YACL,IAAI,CAAC,cAAc,EAAE;QACvB;QAEA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;;IAGQ,MAAM,iBAAiB,CAAC,MAAc,EAAA;AAC5C,QAAA,IAAI;AACF,YAAA,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBACpC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;gBAC1D,IAAI,KAAK,EAAE;oBACT,MAAM,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC;oBAC5D,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;oBAChD;AACA,oBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;oBAClC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC;gBACrD;YACF;AAAO,iBAAA,IAAI,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;gBAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;gBAC3D,IAAI,KAAK,EAAE;oBACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,aAAa,KAAK,CAAC;oBACvD,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,CAAC;gBACtD;YACF;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,CAAC,CAAC;QACnE;IACF;AAEQ,IAAA,+BAA+B,CAAC,MAAc,EAAA;AACpD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE;QACrD,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB;QACnD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG;QACnC;AACA,QAAA,OAAO,OAAO;IAChB;IAEQ,MAAM,2BAA2B,CAAC,MAAc,EAAA;AACtD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE;QACrD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;YAC5B;QACF;AACA,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QACxC,MAAM,OAAO,GAAG;AACd,cAAE,MAAM,YAAY,CAAC,cAAc,CAAC,GAAG;cACrC,MAAM,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,OAAO;;QAEtC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC,OAAO,GAAG,gCAAgC;QACpD;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO;IACjC;AAEQ,IAAA,qBAAqB,CAAC,MAAc,EAAA;;AAC1C,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AAClE,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,UAAU;AAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,SAAS;QAC1C,IAAI,GAAG,EAAE;AACP,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAChC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EACX,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,EACtC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACZ;QACH;IACF;AAEQ,IAAA,MAAM,kBAAkB,CAC9B,MAAc,EACd,MAAe,EAAA;QAEf,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,GAAG;QAEnE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACvE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACrB,aAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5C,aAAA,MAAM,EAAE;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC;AACpB,aAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACzC,aAAA,MAAM,EAAE;QAEX,IAAI,CAAC,MAAM,EAAE;;YAEX,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC;AACjE,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;gBAC3B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,sBAAsB,GAAG;AACxD,oBAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,oBAAA,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC3B,SAAS;AACT,oBAAA,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;iBACtB;YACH;QACF;IACF;;IAGQ,MAAM,UAAU,CAAC,MAAc,EAAA;AACrC,QAAA,IAAI;AACF,YAAA,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;gBACnC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;gBACzD,IAAI,KAAK,EAAE;oBACT,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;oBACjD,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;oBACrC;AACA,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;oBAC3B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC;gBACpD;YACF;AAAO,iBAAA,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;gBAC1D,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;oBACpC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC;gBACrD;YACF;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC;QAC5D;IACF;AAEQ,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACzC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE;QACpD,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,iBAAiB;QACpD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,GAAG;QACpC;AACA,QAAA,OAAO,OAAO;IAChB;IAEQ,MAAM,gBAAgB,CAAC,MAAc,EAAA;;AAC3C,QAAA,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;QAC7D,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACzB;QACF;AACA,QAAA,IAAI,GAAG,KAAK,MAAM,EAAE;;AAElB,YAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;AACzC,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAC3B;QACF;AACA,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChE,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QACxC,MAAM,GAAG,GAAG;AACV,cAAE,MAAM,YAAY,CAAC,cAAc,CAAC,GAAG;cACrC,MAAM,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC7B;AAEQ,IAAA,cAAc,CAAC,MAAc,EAAA;;AACnC,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,SAAS;QAC3C,IAAI,GAAG,EAAE;AACP,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CACjC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EACX,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,EACtC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACZ;QACH;IACF;IAEQ,MAAM,iBAAiB,CAAC,MAAc,EAAA;;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC3D,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,GAAG;;;QAGlE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAC5D,IAAI,CAAC,QAAQ,EACb,IAAI,EACJ,QAAQ,EACR,OAAO,CACR;AAED,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB;QACvD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,aAAa,GAAG,IAAI,mBAAmB,CACrC,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,CACV;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,aAAa;;YAEnD,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAC9D,CAAC,CAAC,KAAgB,CAAC,YAAY,IAAI,CACpC;QACH;aAAO;YACL,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,uBAAuB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAEnC;YACb,IAAI,GAAG,EAAE;AACP,gBAAA,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC;AACpE,gBAAA,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;qBACvB,MAAM,CAAC,UAAU;qBACjB,cAAc,CAAC,SAAS,CAAC;AAC5B,gBAAA,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;qBACtB,MAAM,CAAC,SAAS;qBAChB,cAAc,CAAC,SAAS,CAAC;YAC9B;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,GAAG;AAC9C,YAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAA,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3B,SAAS;AACT,YAAA,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SACtB;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;;AAE3B,QAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,SAAS;IAC7C;AAEQ,IAAA,cAAc,CAAC,MAAgC,EAAA;;QACrD,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS;QACxC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,MAAM;YACrC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO;QACzC;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI;QAC/B;IACF;AAcQ,IAAA,mBAAmB,CAAC,QAA0B,EAAA;AACpD,QAAA,MAAM,OAAO,GAAG,CAAC,KAA4B,KAAI;AAC/C,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACnC,QAAA,CAAC;AACD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3C,QAAA,IAAI,CAAC,oBAAoB,GAAG,MAAK;AAC/B,YAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAChD,QAAA,CAAC;IACH;AAUQ,IAAA,qBAAqB,CAAC,KAA4B,EAAA;AACxD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;QACjC,IAAI,CAAC,SAAS,EAAE;YACd;QACF;AAEA,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC3B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAChC;AAED,QAAA,IAAI,CAAC,iBAAiB,IAAI,GAAG;QAC7B,IAAI,CAAC,yBAAyB,EAAE;IAClC;IAEQ,yBAAyB,GAAA;;QAC/B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;YACtD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;YACxD,IAAI,GAAG,EAAE;AACP,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CACjC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EACX,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,EACtC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACZ;YACH;YACA;QACF;QAEA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;YACvD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC;YACzD,IAAI,GAAG,EAAE;AACP,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAChC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EACX,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,EACtC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACZ;YACH;YACA;QACF;IACF;;AAGQ,IAAA,iBAAiB,CAAC,eAAkC,EAAA;;QAC1D,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,EAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAI;AACpD,QAAA,MAAM,OAAO,GACX,eAAe,KAAK;cAChB,cAAc,KAAK;AACnB,kBAAE,IAAI,CAAC,KAAK,CAAC;AACb,kBAAE;cACF,eAAe;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACxB,OAAO;YACP,mBAAmB,EACjB,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AACnE,SAAA,CAAC;IACJ;;AAGQ,IAAA,kBAAkB,CACxB,MAAc,EACd,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EAAA;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACvD;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,sBAAsB,CACrC,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,CACT;YACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI;QAChC;aAAO;YACL,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAA0B;AAC9D,YAAA,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC;AACpE,YAAA,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;iBACvB,MAAM,CAAC,UAAU;iBACjB,cAAc,CAAC,SAAS,CAAC;AAC5B,YAAA,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;iBACtB,MAAM,CAAC,SAAS;iBAChB,cAAc,CAAC,SAAS,CAAC;QAC9B;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE;YACzC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAA2B,CAAC,OAAO,EAAE;AAC9D,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS;QACrC;IACF;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,EAAE;AAC7C,YAAA,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,SAAS;QACjD;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,SAAS;IAChD;IAEQ,qBAAqB,GAAA;QAC3B,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IACE,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI;YACpC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,iBAAiB,EACtD;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;QAC9B;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS;IACzC;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB;AAC3C,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,OAAO,EAAE;AAC/D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI;QAC/B;AACA,QAAA,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,OAAO,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS;QACxC,IAAI,CAAC,wBAAwB,EAAE;IACjC;AACD;;;;"}
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":"AAAA;;;;;AAKG;AAcH;AACM,SAAU,yBAAyB,CACvC,OAAqC,EAAA;IAErC,MAAM,SAAS,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,oBAAoB;IAC/C,MAAM,IAAI,GAAG,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,UAAU;IAEpE,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE;IACnD;IAEA,OAAO;AACL,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,UAAU,EAAE,aAAa;KAC1B;AACH;AAEA;;;;;AAKG;MACU,4BAA4B,CAAA;IAMvC,WAAA,CACmB,KAAY,EACZ,QAAuB,EAAA;QADvB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAPnB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAC5B,IAAA,CAAA,cAAc,GAAwB,IAAI;QAC1C,IAAA,CAAA,cAAc,GAAG,CAAC;AACT,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,GAAG,EAAqB;IAKzE;AAEH,IAAA,MAAM,CAAC,MAAgC,EAAA;;QACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC;AAExD,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AACpE,QAAA,OAAO,MAAM;IACf;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,4BAA4B,CAAC;IACjE;IAEQ,gBAAgB,CACtB,QAAiB,EACjB,mBAAwC,EAAA;QAExC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,4BAA4B,CAAC;YAC/D;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;YAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AACnD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAClC;aAAO;YACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE;gBAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;YAC7C;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAChD,YAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;YAClC;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,wBAAwB,CAC3B,mBAAmB,EACnB,IAAI,CAAC,4BAA4B,CAClC;IACH;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B;QACF;QACA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc;QAC3C,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;AAChD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACnC;IAEQ,wBAAwB,CAC9B,OAA2B,EAC3B,UAAkC,EAAA;AAElC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC3B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;YACxC;AACA,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK;QACxB;IACF;AAEQ,IAAA,uBAAuB,CAAC,UAAkC,EAAA;QAChE,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,UAAU,EAAE;AAC7C,YAAA,MAAM,CAAC,OAAO,GAAG,UAAU;QAC7B;QACA,UAAU,CAAC,KAAK,EAAE;IACpB;AACD;;;;"}
@@ -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;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"distance-grabbable.js","sources":["../../src/grab/distance-grabbable.ts"],"sourcesContent":[null],"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
+ {"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":"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"}
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"grab-warnings.js","sources":["../../src/grab/grab-warnings.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAUH,IAAI,uBAAuB,GAAG,IAAI,OAAO,EAAoC;AAE7E,SAAS,oBAAoB,GAAA;;IAC3B,OAAO,CAAA,CAAA,EAAA,GAAC,MAAM,CAAC,IAAY,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,MAAK,KAAK;AAChD;AAEM,SAAU,kBAAkB,CAAC,MAAgB,EAAA;IACjD,IAAI,KAAK,GAAG,KAAK;AAEjB,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;QACxB,IAAI,KAAK,EAAE;YACT;QACF;QAEA,MAAM,IAAI,GAAG,KAAa;QAC1B,KAAK;YACH,IAAI,CAAC,MAAM,KAAK,IAAI;AACpB,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtB,gBAAA,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU;AACtC,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,uBAAuB,CACrC,MAA0C,EAC1C,aAAgC,EAAA;AAEhC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ;AAC9B,IAAA,IAAI,EAAE,MAAM,YAAY,QAAQ,CAAC,EAAE;QACjC;IACF;IAEA,IAAI,CAAC,oBAAoB,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;QACzD;IACF;IAEA,IAAI,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC;IAC1D,IAAI,CAAC,gBAAgB,EAAE;AACrB,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAE;AAC5B,QAAA,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACvD;AAEA,IAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QACvC;IACF;AAEA,IAAA,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC;AAEnC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC;UACvB,IAAI,MAAM,CAAC,IAAI,CAAA,SAAA,EAAY,MAAM,CAAC,KAAK,CAAA,CAAA;AACzC,UAAE,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,EAAE;IAEtB,OAAO,CAAC,IAAI,CACV,CAAA,eAAA,EAAkB,WAAW,CAAA,KAAA,EAAQ,aAAa,CAAA,gIAAA,CAAkI,CACrL;AACH;;;;"}
1
+ {"version":3,"file":"grab-warnings.js","sources":["../../src/grab/grab-warnings.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 { Entity } from '../ecs/entity.js';\nimport { Mesh, Object3D } from '../runtime/index.js';\n\ntype GrabComponentName =\n | 'DistanceGrabbable'\n | 'OneHandGrabbable'\n | 'TwoHandsGrabbable';\n\nlet warnedNoRaycastableMesh = new WeakMap<Object3D, Set<GrabComponentName>>();\n\nfunction shouldEmitDevWarning(): boolean {\n return (import.meta as any).env?.DEV !== false;\n}\n\nexport function hasRaycastableMesh(object: Object3D): boolean {\n let found = false;\n\n object.traverse((child) => {\n if (found) {\n return;\n }\n\n const mesh = child as Mesh;\n found =\n mesh.isMesh === true &&\n Boolean(mesh.geometry) &&\n typeof mesh.raycast === 'function';\n });\n\n return found;\n}\n\nexport function warnIfNoRaycastableMesh(\n entity: Pick<Entity, 'index' | 'object3D'>,\n componentName: GrabComponentName,\n): void {\n const object = entity.object3D;\n if (!(object instanceof Object3D)) {\n return;\n }\n\n if (!shouldEmitDevWarning() || hasRaycastableMesh(object)) {\n return;\n }\n\n let warnedComponents = warnedNoRaycastableMesh.get(object);\n if (!warnedComponents) {\n warnedComponents = new Set();\n warnedNoRaycastableMesh.set(object, warnedComponents);\n }\n\n if (warnedComponents.has(componentName)) {\n return;\n }\n\n warnedComponents.add(componentName);\n\n const entityLabel = object.name\n ? `\"${object.name}\" (index ${entity.index})`\n : `#${entity.index}`;\n\n console.warn(\n `[IWSDK] Entity ${entityLabel} has ${componentName} but no raycastable mesh in its Object3D subtree. Grab will not work. Attach a Mesh as a child or to the entity's root Object3D.`,\n );\n}\n\nexport function resetGrabWarningStateForTests(): void {\n warnedNoRaycastableMesh = new WeakMap();\n}\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAUH,IAAI,uBAAuB,GAAG,IAAI,OAAO,EAAoC;AAE7E,SAAS,oBAAoB,GAAA;;IAC3B,OAAO,CAAA,CAAA,EAAA,GAAC,MAAM,CAAC,IAAY,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,MAAK,KAAK;AAChD;AAEM,SAAU,kBAAkB,CAAC,MAAgB,EAAA;IACjD,IAAI,KAAK,GAAG,KAAK;AAEjB,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;QACxB,IAAI,KAAK,EAAE;YACT;QACF;QAEA,MAAM,IAAI,GAAG,KAAa;QAC1B,KAAK;YACH,IAAI,CAAC,MAAM,KAAK,IAAI;AACpB,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtB,gBAAA,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU;AACtC,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,uBAAuB,CACrC,MAA0C,EAC1C,aAAgC,EAAA;AAEhC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ;AAC9B,IAAA,IAAI,EAAE,MAAM,YAAY,QAAQ,CAAC,EAAE;QACjC;IACF;IAEA,IAAI,CAAC,oBAAoB,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;QACzD;IACF;IAEA,IAAI,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC;IAC1D,IAAI,CAAC,gBAAgB,EAAE;AACrB,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAE;AAC5B,QAAA,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACvD;AAEA,IAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QACvC;IACF;AAEA,IAAA,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC;AAEnC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC;UACvB,IAAI,MAAM,CAAC,IAAI,CAAA,SAAA,EAAY,MAAM,CAAC,KAAK,CAAA,CAAA;AACzC,UAAE,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,EAAE;IAEtB,OAAO,CAAC,IAAI,CACV,CAAA,eAAA,EAAkB,WAAW,CAAA,KAAA,EAAQ,aAAa,CAAA,gIAAA,CAAkI,CACrL;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"grabbed.js","sources":["../../src/grab/grabbed.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;AAYG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,iEAAiE;;;;"}
1
+ {"version":3,"file":"grabbed.js","sources":["../../src/grab/grabbed.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 { createComponent } from '../ecs/component.js';\n/**\n * Transient state tag indicating an entity is currently being grabbed.\n *\n * @remarks\n * - Managed by {@link GrabSystem}; do not add/remove this component manually.\n * - Added when a grab handle captures one or more pointers.\n * - Removed when all pointers are released and the grab ends.\n * - Often used to gate grab-state-specific logic (e.g. physics kinematic override).\n * - Works with {@link OneHandGrabbable}, {@link TwoHandsGrabbable}, and {@link DistanceGrabbable} entities.\n *\n * @category Grab\n * @hideineditor\n */\nexport const Grabbed = createComponent(\n 'Grabbed',\n {},\n 'A tag added by GrabSystem while the entity is actively grabbed.',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;AAYG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,iEAAiE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"handles.js","sources":["../../src/grab/handles.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handles.js","sources":["../../src/grab/handles.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 { HandleOptions, HandleStore } from '@pmndrs/handle';\nimport { Types, createComponent } from '../ecs/component.js';\nimport { Euler, Object3D, Quaternion, Vector3 } from '../runtime/index.js';\n\nexport const Handle = createComponent(\n 'Handle',\n {\n instance: { type: Types.Object, default: undefined },\n },\n 'Internal component storing an active interaction handle instance',\n);\n\n/** MovementMode for {@link DistanceGrabbable}. @category Grab */\nexport const MovementMode = {\n /** Object smoothly moves with the ray cast end point of the grabbing controller. */\n MoveFromTarget: 'MoveFromTarget',\n /** Object smoothly moves toward the input source that's grabbing. */\n MoveTowardsTarget: 'MoveTowardsTarget',\n /** Object moves relative to controller delta movement while maintaining distance. */\n MoveAtSource: 'MoveAtSource',\n /** Object rotates in place without translation or scaling. */\n RotateAtSource: 'RotateAtSource',\n};\n\nexport class DistanceGrabHandle<T> extends HandleStore<T> {\n private previousPointerOrigin: Vector3 | undefined;\n private isSnapped: boolean = false;\n private returnOriginCaptured = false;\n private returnTargetParent: Object3D | null = null;\n private readonly returnTargetPosition = new Vector3();\n private readonly returnTargetQuaternion = new Quaternion();\n private readonly returnTargetRotation = new Euler();\n private readonly returnTargetScale = new Vector3();\n private static SNAP_THRESHOLD = 0.005;\n private static MOVE_SPEED_SCALE = 100;\n private static _tmp = new Vector3();\n private static _tmpQuat = new Quaternion();\n private static _posHelper = new Vector3();\n private static _quatHelper = new Quaternion();\n private static _offsetPosHelper = new Vector3();\n private static _offsetQuatHelper = new Quaternion();\n\n constructor(\n readonly target_: Object3D | { current?: Object3D | null },\n readonly sceneRoot_: Object3D,\n public readonly getOptions: () => HandleOptions<T> = () => ({}),\n public readonly movementMode: string,\n public readonly returnToOrigin: boolean,\n public readonly moveSpeedFactor: number = 0.1,\n public readonly targetPosOffset: Vector3 = new Vector3(0, 0, 0),\n public readonly targetQuatOffset: Quaternion = new Quaternion(0, 0, 0, 1),\n public readonly detachOnGrab: boolean,\n ) {\n super(target_, getOptions);\n\n this.targetQuatOffset.normalize();\n }\n\n update(time: number) {\n const target = this.getTarget();\n\n if (this.inputState.size === 0) {\n // No active pointers: the grab was released, cancelled, or\n // force-released. Clear transient snap state so the next grab starts\n // unsnapped. This replaces the constructor's 'pointerup' DOM listener,\n // which was never removed (a listener leak) and also missed\n // forceRelease()/cancel() (which don't fire a DOM pointerup).\n this.isSnapped = false;\n }\n\n if (\n target == null ||\n this.inputState.size === 0 ||\n (this.latestMoveEvent == null &&\n (this.getOptions().alwaysUpdate ?? false) === false)\n ) {\n if (this.previousPointerOrigin != undefined) {\n this.previousPointerOrigin = undefined;\n }\n return;\n }\n\n if (this.detachOnGrab && target.parent != this.sceneRoot_) {\n this.sceneRoot_.attach(target);\n }\n\n if (\n this.movementMode === MovementMode.RotateAtSource ||\n this.movementMode === MovementMode.MoveFromTarget\n ) {\n super.update(time);\n return;\n }\n\n const pointerAmount = this.inputState.size;\n target.getWorldPosition(DistanceGrabHandle._posHelper);\n target.getWorldQuaternion(DistanceGrabHandle._quatHelper);\n const position = target.position;\n const quaternion = target.quaternion;\n const rotation = target.rotation;\n const scale = target.scale;\n\n switch (this.movementMode) {\n case MovementMode.MoveAtSource: {\n const [p1] = this.inputState.values();\n const current = p1.pointerWorldOrigin;\n if (this.previousPointerOrigin != undefined) {\n const delta = DistanceGrabHandle._tmp\n .copy(current)\n .sub(this.previousPointerOrigin);\n DistanceGrabHandle._posHelper.add(delta);\n } else {\n this.previousPointerOrigin = new Vector3().copy(current);\n }\n // Update stored previous for next frame\n this.previousPointerOrigin!.copy(current);\n break;\n }\n case MovementMode.MoveTowardsTarget: {\n const [p1] = this.inputState.values();\n const pointerOrigin = p1.pointerWorldOrigin;\n const pointerQuaternion = p1.pointerWorldQuaternion;\n\n // Calculate target position by applying position offset in pointer's local space\n const targetPosition = DistanceGrabHandle._offsetPosHelper\n .copy(this.targetPosOffset)\n .applyQuaternion(pointerQuaternion)\n .add(pointerOrigin);\n\n // Calculate target rotation by multiplying pointer rotation with rotation offset\n const targetQuaternion = DistanceGrabHandle._offsetQuatHelper\n .copy(pointerQuaternion)\n .multiply(this.targetQuatOffset);\n\n const distance = targetPosition.distanceTo(\n DistanceGrabHandle._posHelper,\n );\n const rawInterpolationAlpha =\n this.moveSpeedFactor * time * DistanceGrabHandle.MOVE_SPEED_SCALE;\n // Invalid timing/config input must never poison the target transform.\n // Freeze on NaN; clamp finite values and infinities to the valid lerp range.\n const interpolationAlpha = Number.isNaN(rawInterpolationAlpha)\n ? 0\n : Math.min(1, Math.max(0, rawInterpolationAlpha));\n\n if (!this.isSnapped && distance > DistanceGrabHandle.SNAP_THRESHOLD) {\n DistanceGrabHandle._posHelper.lerp(\n targetPosition,\n interpolationAlpha,\n );\n DistanceGrabHandle._quatHelper.slerp(\n targetQuaternion,\n interpolationAlpha,\n );\n } else {\n if (!this.isSnapped) {\n this.isSnapped = true;\n }\n DistanceGrabHandle._posHelper.copy(targetPosition);\n DistanceGrabHandle._quatHelper.copy(targetQuaternion);\n }\n\n break;\n }\n }\n\n // Convert world space transforms to local space\n if (target.parent) {\n // Get parent's inverse world matrix\n const parentWorldMatrixInverse = target.parent.matrixWorld\n .clone()\n .invert();\n\n // Transform desired world position to local space\n position\n .copy(DistanceGrabHandle._posHelper)\n .applyMatrix4(parentWorldMatrixInverse);\n\n // Transform desired world quaternion to local space\n const parentWorldQuaternionInverse = target.parent\n .getWorldQuaternion(DistanceGrabHandle._tmpQuat)\n .invert();\n quaternion\n .copy(DistanceGrabHandle._quatHelper)\n .premultiply(parentWorldQuaternionInverse);\n } else {\n // No parent, world space = local space\n position.copy(DistanceGrabHandle._posHelper);\n quaternion.copy(DistanceGrabHandle._quatHelper);\n }\n\n // Always apply during drag; if returnToOrigin is true,\n // the override in apply() will snap back on release.\n this.outputState.update(this.latestMoveEvent, {\n pointerAmount,\n position,\n quaternion,\n rotation,\n scale,\n time,\n });\n this.outputState.memo = this.apply(target);\n this.latestMoveEvent = undefined;\n }\n\n protected apply(target: Object3D): T {\n if (\n this.returnToOrigin &&\n this.inputState.size === 1 &&\n this.outputState.first &&\n !this.returnOriginCaptured\n ) {\n this.returnTargetParent = target.parent;\n this.returnTargetPosition.copy(target.position);\n this.returnTargetQuaternion.copy(target.quaternion);\n this.returnTargetRotation.copy(target.rotation);\n this.returnTargetScale.copy(target.scale);\n this.returnOriginCaptured = true;\n }\n\n // HandleStore intentionally saves a new manipulation baseline whenever a\n // second pointer joins or one pointer leaves. Return-to-origin needs the\n // transform from the start of the whole gesture, not a handoff baseline.\n if (\n this.returnToOrigin &&\n this.outputState.last &&\n this.returnOriginCaptured\n ) {\n if (this.detachOnGrab && target.parent !== this.returnTargetParent) {\n if (this.returnTargetParent == null) {\n target.removeFromParent();\n } else {\n this.returnTargetParent.add(target);\n }\n }\n target.position.copy(this.returnTargetPosition);\n target.rotation.order = this.returnTargetRotation.order;\n target.quaternion.copy(this.returnTargetQuaternion);\n target.scale.copy(this.returnTargetScale);\n this.returnTargetParent = null;\n this.returnOriginCaptured = false;\n // Do not call super.apply to avoid re-applying the drag transform.\n return undefined as unknown as T;\n }\n return super.apply(target);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/grab/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AAgBH;AACA,cAAc,CAAC,SAAS,CAAC,uBAAuB;AAC9C,IAAA,iCAAiC;AACnC,iBAAiB,CAAC,SAAS,CAAC,uBAAuB;AACjD,IAAA,oCAAoC;AACtC,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,0BAA0B"}
1
+ {"version":3,"file":"index.js","sources":["../../src/grab/index.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 { RayIntersector, SphereIntersector } from '@pmndrs/pointer-events';\nimport {\n patchedExecuteIntersection,\n patchedIntersectRayPointerCapture,\n patchedIntersectSpherePointerCapture,\n} from './pointer-events-patch.js';\n\nexport * from './grab-system.js';\nexport * from './grabbed.js';\nexport * from './one-hand-grabbable.js';\nexport * from './two-hands-grabbable.js';\nexport * from './distance-grabbable.js';\nexport { MovementMode } from './handles.js';\n\n// Apply monkeypatch once\nRayIntersector.prototype.intersectPointerCapture =\n patchedIntersectRayPointerCapture;\nSphereIntersector.prototype.intersectPointerCapture =\n patchedIntersectSpherePointerCapture;\nSphereIntersector.prototype.executeIntersection = patchedExecuteIntersection;\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AAgBH;AACA,cAAc,CAAC,SAAS,CAAC,uBAAuB;AAC9C,IAAA,iCAAiC;AACnC,iBAAiB,CAAC,SAAS,CAAC,uBAAuB;AACjD,IAAA,oCAAoC;AACtC,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,0BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"one-hand-grabbable.js","sources":["../../src/grab/one-hand-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CG;AAEI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB;;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;CACF,EACD,4DAA4D;;;;"}
1
+ {"version":3,"file":"one-hand-grabbable.js","sources":["../../src/grab/one-hand-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';\n/**\n * Component for enabling single‑hand object grabbing and manipulation.\n *\n * @remarks\n * - Allows users to grab and manipulate objects using a single VR controller or hand input.\n * - Supports independent control of rotation and translation (movement) axes.\n * - Rotation and translation can be constrained using min/max limits per axis.\n * - Works with the {@link GrabSystem} to automatically create interaction 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 * - Requires the entity to have an `object3D` for the interaction to work.\n *\n * @example Basic single‑hand grabbable object\n * ```ts\n * entity.addComponent(OneHandGrabbable, {})\n * ```\n *\n * @example Constrained manipulation (rotation‑only on Y axis)\n * ```ts\n * entity.addComponent(OneHandGrabbable, {\n * rotate: true,\n * rotateMin: [0, -Math.PI, 0],\n * rotateMax: [0, Math.PI, 0],\n * translate: false\n * })\n * ```\n *\n * @example Limited movement range\n * ```ts\n * entity.addComponent(OneHandGrabbable, {\n * rotate: true,\n * translate: true,\n * translateMin: [-2, 0, -2],\n * translateMax: [2, 3, 2]\n * })\n * ```\n *\n * @category Grab\n * @see {@link GrabSystem}\n * @see {@link TwoHandsGrabbable}\n * @see {@link DistanceGrabbable}\n */\n\nexport const OneHandGrabbable = createComponent(\n 'OneHandGrabbable',\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 },\n 'Component for single-hand object grabbing and manipulation',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CG;AAEI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB;;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;CACF,EACD,4DAA4D;;;;"}