@iwsdk/core 0.5.3 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/asset/cache-manager.js.map +1 -1
  6. package/dist/asset/loaders/audio-loader.js.map +1 -1
  7. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  8. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  9. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  10. package/dist/asset/loaders/texture-loader.js.map +1 -1
  11. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  12. package/dist/audio/audio-pool.js.map +1 -1
  13. package/dist/audio/audio-system.js.map +1 -1
  14. package/dist/audio/audio-utils.js.map +1 -1
  15. package/dist/audio/audio.js.map +1 -1
  16. package/dist/camera/camera-source.js.map +1 -1
  17. package/dist/camera/camera-system.d.ts +7 -3
  18. package/dist/camera/camera-system.d.ts.map +1 -1
  19. package/dist/camera/camera-system.js +81 -50
  20. package/dist/camera/camera-system.js.map +1 -1
  21. package/dist/camera/camera-utils.d.ts +5 -0
  22. package/dist/camera/camera-utils.d.ts.map +1 -1
  23. package/dist/camera/camera-utils.js +8 -1
  24. package/dist/camera/camera-utils.js.map +1 -1
  25. package/dist/camera/types.js.map +1 -1
  26. package/dist/depth/depth-occludable.js.map +1 -1
  27. package/dist/depth/depth-sensing-system.d.ts +3 -0
  28. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  29. package/dist/depth/depth-sensing-system.js +55 -1
  30. package/dist/depth/depth-sensing-system.js.map +1 -1
  31. package/dist/depth/depth-textures.js.map +1 -1
  32. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  33. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  34. package/dist/ecs/builtin-components.js.map +1 -1
  35. package/dist/ecs/component-editor-metadata.js.map +1 -1
  36. package/dist/ecs/component-manifest.js.map +1 -1
  37. package/dist/ecs/entity.js.map +1 -1
  38. package/dist/ecs/system.js.map +1 -1
  39. package/dist/ecs/world.d.ts +2 -0
  40. package/dist/ecs/world.d.ts.map +1 -1
  41. package/dist/ecs/world.js +4 -0
  42. package/dist/ecs/world.js.map +1 -1
  43. package/dist/environment/dome-gradient.js.map +1 -1
  44. package/dist/environment/dome-texture.js.map +1 -1
  45. package/dist/environment/environment-system.js.map +1 -1
  46. package/dist/environment/gradient-environment.js.map +1 -1
  47. package/dist/environment/ibl-gradient.js.map +1 -1
  48. package/dist/environment/ibl-texture.js.map +1 -1
  49. package/dist/environment/scene-ar-environment.js.map +1 -1
  50. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  51. package/dist/environment-raycast/raycast-target.js.map +1 -1
  52. package/dist/grab/distance-grabbable.d.ts +5 -0
  53. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  54. package/dist/grab/distance-grabbable.js +5 -0
  55. package/dist/grab/distance-grabbable.js.map +1 -1
  56. package/dist/grab/grab-helpers.js.map +1 -1
  57. package/dist/grab/grab-system.js.map +1 -1
  58. package/dist/grab/grab-warnings.js.map +1 -1
  59. package/dist/grab/grabbed.js.map +1 -1
  60. package/dist/grab/handles.d.ts +6 -0
  61. package/dist/grab/handles.d.ts.map +1 -1
  62. package/dist/grab/handles.js +46 -12
  63. package/dist/grab/handles.js.map +1 -1
  64. package/dist/grab/index.js.map +1 -1
  65. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  66. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  67. package/dist/grab/one-hand-grabbable.js +5 -0
  68. package/dist/grab/one-hand-grabbable.js.map +1 -1
  69. package/dist/grab/pointer-events-patch.js.map +1 -1
  70. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  71. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  72. package/dist/grab/two-hands-grabbable.js +5 -0
  73. package/dist/grab/two-hands-grabbable.js.map +1 -1
  74. package/dist/index.js +4 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/browser-camera.js.map +1 -1
  77. package/dist/init/index.d.ts +2 -2
  78. package/dist/init/index.d.ts.map +1 -1
  79. package/dist/init/player-camera.js.map +1 -1
  80. package/dist/init/session-grant.d.ts +34 -0
  81. package/dist/init/session-grant.d.ts.map +1 -0
  82. package/dist/init/session-grant.js +89 -0
  83. package/dist/init/session-grant.js.map +1 -0
  84. package/dist/init/world-initializer.d.ts +87 -4
  85. package/dist/init/world-initializer.d.ts.map +1 -1
  86. package/dist/init/world-initializer.js +45 -41
  87. package/dist/init/world-initializer.js.map +1 -1
  88. package/dist/init/xr.d.ts +19 -0
  89. package/dist/init/xr.d.ts.map +1 -1
  90. package/dist/init/xr.js +136 -41
  91. package/dist/init/xr.js.map +1 -1
  92. package/dist/input/canvas-pointer-system.d.ts +2 -0
  93. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  94. package/dist/input/canvas-pointer-system.js +33 -13
  95. package/dist/input/canvas-pointer-system.js.map +1 -1
  96. package/dist/input/input-actions.js.map +1 -1
  97. package/dist/input/input-manager.js.map +1 -1
  98. package/dist/input/input-system.d.ts.map +1 -1
  99. package/dist/input/input-system.js +5 -2
  100. package/dist/input/input-system.js.map +1 -1
  101. package/dist/input/state-tags.js.map +1 -1
  102. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  103. package/dist/input/stateful-keyboard.js.map +1 -1
  104. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  105. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  106. package/dist/layers/xr-cylinder-layer.js +2 -1
  107. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  108. package/dist/layers/xr-layer-init.d.ts +19 -0
  109. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  110. package/dist/layers/xr-layer-init.js +20 -0
  111. package/dist/layers/xr-layer-init.js.map +1 -0
  112. package/dist/layers/xr-layer-state.js.map +1 -1
  113. package/dist/layers/xr-layer-system.d.ts +41 -1
  114. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  115. package/dist/layers/xr-layer-system.js +506 -132
  116. package/dist/layers/xr-layer-system.js.map +1 -1
  117. package/dist/layers/xr-layer-transform.d.ts +18 -0
  118. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  119. package/dist/layers/xr-layer-transform.js +115 -0
  120. package/dist/layers/xr-layer-transform.js.map +1 -0
  121. package/dist/layers/xr-quad-layer.d.ts +2 -1
  122. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  123. package/dist/layers/xr-quad-layer.js +2 -1
  124. package/dist/layers/xr-quad-layer.js.map +1 -1
  125. package/dist/level/level-component-applier.d.ts +2 -0
  126. package/dist/level/level-component-applier.d.ts.map +1 -1
  127. package/dist/level/level-component-applier.js +24 -5
  128. package/dist/level/level-component-applier.js.map +1 -1
  129. package/dist/level/level-player-rig.js.map +1 -1
  130. package/dist/level/level-root.js.map +1 -1
  131. package/dist/level/level-scene-environment.js.map +1 -1
  132. package/dist/level/level-scene-json-importer.js.map +1 -1
  133. package/dist/level/level-scene-material.js.map +1 -1
  134. package/dist/level/level-scene-object.js.map +1 -1
  135. package/dist/level/level-scene-primitive.js.map +1 -1
  136. package/dist/level/level-system.js.map +1 -1
  137. package/dist/level/level-tag.js.map +1 -1
  138. package/dist/lighting/light-binding.js.map +1 -1
  139. package/dist/lighting/light-components.js.map +1 -1
  140. package/dist/lighting/light-system.js.map +1 -1
  141. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  142. package/dist/locomotion/locomotion-environment.js.map +1 -1
  143. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  144. package/dist/locomotion/locomotion.js.map +1 -1
  145. package/dist/locomotion/materials/line.js.map +1 -1
  146. package/dist/locomotion/slide.js.map +1 -1
  147. package/dist/locomotion/teleport.js.map +1 -1
  148. package/dist/locomotion/turn.js.map +1 -1
  149. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  150. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  151. package/dist/mcp/ecs-debug-tools.js +113 -10
  152. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  153. package/dist/mcp/index.d.ts +1 -0
  154. package/dist/mcp/index.d.ts.map +1 -1
  155. package/dist/mcp/mcp-runtime.d.ts +2 -0
  156. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  157. package/dist/mcp/mcp-runtime.js +41 -0
  158. package/dist/mcp/mcp-runtime.js.map +1 -1
  159. package/dist/mcp/scene-tools.js.map +1 -1
  160. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  161. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  162. package/dist/mcp/ui-debug-tools.js +412 -0
  163. package/dist/mcp/ui-debug-tools.js.map +1 -0
  164. package/dist/physics/index.js +1 -1
  165. package/dist/physics/physics-runtime.d.ts +22 -0
  166. package/dist/physics/physics-runtime.d.ts.map +1 -0
  167. package/dist/physics/physics-runtime.js +423 -0
  168. package/dist/physics/physics-runtime.js.map +1 -0
  169. package/dist/physics/physics-system.d.ts +84 -108
  170. package/dist/physics/physics-system.d.ts.map +1 -1
  171. package/dist/physics/physics-system.js +686 -555
  172. package/dist/physics/physics-system.js.map +1 -1
  173. package/dist/physics/physics-transport.d.ts +20 -0
  174. package/dist/physics/physics-transport.d.ts.map +1 -0
  175. package/dist/physics/physics-transport.js +111 -0
  176. package/dist/physics/physics-transport.js.map +1 -0
  177. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  178. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  179. package/dist/physics/physics-worker-protocol.js +41 -0
  180. package/dist/physics/physics-worker-protocol.js.map +1 -0
  181. package/dist/physics/physics-worker-utils.d.ts +8 -0
  182. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  183. package/dist/physics/physics-worker-utils.js +12 -0
  184. package/dist/physics/physics-worker-utils.js.map +1 -0
  185. package/dist/physics/physics-worker.d.ts +8 -0
  186. package/dist/physics/physics-worker.d.ts.map +1 -0
  187. package/dist/physics/physics-worker.js +66 -0
  188. package/dist/physics/physics-worker.js.map +1 -0
  189. package/dist/physics/physicsBody.js.map +1 -1
  190. package/dist/physics/physicsManipulation.js.map +1 -1
  191. package/dist/physics/physicsShape.js.map +1 -1
  192. package/dist/physics/utils.js.map +1 -1
  193. package/dist/project/normalize.js +7 -1
  194. package/dist/project/normalize.js.map +1 -1
  195. package/dist/project/paths.js.map +1 -1
  196. package/dist/project/types.d.ts +7 -1
  197. package/dist/project/types.d.ts.map +1 -1
  198. package/dist/project/types.js.map +1 -1
  199. package/dist/project/validation.js +36 -2
  200. package/dist/project/validation.js.map +1 -1
  201. package/dist/runtime/three.js.map +1 -1
  202. package/dist/scene-understanding/anchor.js.map +1 -1
  203. package/dist/scene-understanding/mesh.js.map +1 -1
  204. package/dist/scene-understanding/plane.js.map +1 -1
  205. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  206. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  207. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  208. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  209. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  210. package/dist/transform/synced-euler.js.map +1 -1
  211. package/dist/transform/synced-quaternion.js.map +1 -1
  212. package/dist/transform/synced-vector3.js.map +1 -1
  213. package/dist/transform/transform-component.js.map +1 -1
  214. package/dist/transform/transform-utils.js.map +1 -1
  215. package/dist/transform/transform.js.map +1 -1
  216. package/dist/ui/document.js.map +1 -1
  217. package/dist/ui/follow-component.js.map +1 -1
  218. package/dist/ui/follow.d.ts.map +1 -1
  219. package/dist/ui/follow.js +0 -1
  220. package/dist/ui/follow.js.map +1 -1
  221. package/dist/ui/panel-components.js.map +1 -1
  222. package/dist/ui/screenspace-component.js.map +1 -1
  223. package/dist/ui/screenspace.js.map +1 -1
  224. package/dist/ui/ui.js.map +1 -1
  225. package/dist/ui/uikitml-asset.js.map +1 -1
  226. package/dist/ui/uikitml.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dist/visibility/visibility-component.js.map +1 -1
  232. package/dist/visibility/visibility.js.map +1 -1
  233. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"scene-understanding-system.js","sources":["../../src/scene-understanding/scene-understanding-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene-understanding-system.js","sources":["../../src/scene-understanding/scene-understanding-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 { Types } from '../ecs/component.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport {\n BoxGeometry,\n BufferAttribute,\n BufferGeometry,\n Group,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n} from '../runtime/index.js';\nimport { XRAnchor } from './anchor.js';\nimport { XRMesh } from './mesh.js';\nimport { XRPlane } from './plane.js';\n\ntype PlaneGeometryState = {\n lastChangedTime: DOMHighResTimeStamp;\n polygon: XRPlane['polygon'];\n};\n\ntype MeshGeometryState = {\n indices: XRMesh['indices'];\n lastChangedTime: DOMHighResTimeStamp;\n semanticLabel: XRMesh['semanticLabel'];\n vertices: XRMesh['vertices'];\n};\n\ntype MeshMetadata = {\n dimensions: [number, number, number];\n isBounded3D: boolean;\n max: [number, number, number];\n min: [number, number, number];\n semanticLabel: string;\n};\n\n/**\n * Manages WebXR scene understanding features including plane detection, mesh detection, and anchoring.\n *\n * @remarks\n * - Automatically detects and visualizes real‑world planes and meshes in AR/VR environments.\n * - Creates entities with {@link XRPlane} components for detected planes (floors, walls, ceilings).\n * - Creates entities with {@link XRMesh} components for detected 3D geometry.\n * - Supports anchoring objects to real‑world positions using {@link XRAnchor} components.\n * - Requires WebXR session features: 'plane‑detection', 'mesh‑detection', 'anchor' when using the related features.\n * - Automatically manages entity lifecycle as real‑world geometry changes.\n * - Provides optional visual feedback with wireframe meshes for detected geometry.\n * - Objects with {@link XRAnchor} are automatically attached to a stable world‑anchored group.\n *\n * @example Basic scene understanding setup\n * ```ts\n * // WebXR session must request required features\n * World.create(document.getElementById('scene-container'), {\n * assets,\n * xr: {\n * sessionMode: SessionMode.ImmersiveAR,\n * features: { planeDetection: true, meshDetection: true, anchors: true },\n * }\n * })\n * \n * // Add to your world to enable scene understanding\n * world.addSystem(SceneUnderstandingSystem)\n *\n\n * ```\n *\n * @example Create an anchored object\n * ```ts\n * const cube = world.createTransformEntity(cubeObject)\n * cube.addComponent(XRAnchor) // Will be anchored to real-world position\n * ```\n *\n * @example React to detected planes\n * ```ts\n * // Planes are automatically created as entities with XRPlane component\n * system.query({ required: [XRPlane] }).subscribe('qualify', (entity) => {\n * const plane = entity.getValue(XRPlane, '_plane')\n * console.log('New plane detected:', plane.orientation)\n * })\n * ```\n *\n * @category Scene Understanding\n * @see {@link XRPlane}\n * @see {@link XRMesh}\n * @see {@link XRAnchor}\n */\nexport class SceneUnderstandingSystem extends createSystem(\n {\n planeEntities: { required: [XRPlane] },\n meshEntities: { required: [XRMesh] },\n anchoredEntities: { required: [XRAnchor] },\n },\n {\n showWireFrame: { type: Types.Boolean, default: false },\n },\n) {\n private planeFeatureEnabled: boolean | undefined;\n private meshFeatureEnabled: boolean | undefined;\n private anchorFeatureEnabled: boolean | undefined;\n\n /** Tracks whether an anchor creation request is in progress to prevent duplicate requests */\n private anchorRequested: boolean = false;\n\n /** Delays between failed native anchor requests. */\n private static readonly ANCHOR_RETRY_DELAYS_SECONDS = [\n 0.25, 0.5, 1, 2, 5,\n ] as const;\n\n /** Render-clock deadline before another native anchor request may start. */\n private nextAnchorRequestTime: number = 0;\n\n /** Index of the delay assigned to the next failed native anchor request. */\n private anchorRetryDelayIndex: number = 0;\n\n /** Latest elapsed render-clock time, in seconds. */\n private anchorRetryClockTime: number = 0;\n\n /** Invalidates asynchronous anchor work when the active XR session changes. */\n private anchorRequestGeneration: number = 0;\n\n /** Prevents duplicate native-anchor disposal across async teardown paths. */\n private deletedAnchors = new WeakSet<XRAnchor>();\n\n /** The current XRAnchor instance for this session. Reset on session end to prevent stale XRSpace references. */\n private xrAnchor: XRAnchor | undefined;\n\n private currentPlanes = new Map<XRPlane, Entity>();\n private currentMeshes = new Map<XRMesh, Entity>();\n private planeGeometryStates = new Map<XRPlane, PlaneGeometryState>();\n private meshGeometryStates = new Map<XRMesh, MeshGeometryState>();\n\n /** Group that holds all anchored objects, positioned to match the XRAnchor's world pose */\n private anchoredGroup: Group = new Group();\n private anchoredGroupEntity: Entity | undefined;\n\n private matrixBuffer = new Matrix4();\n\n /** Shared material for all plane visualization meshes */\n private planeMaterial!: MeshBasicMaterial;\n\n /** Shared material for all mesh visualization meshes */\n private meshMaterial!: MeshBasicMaterial;\n\n /** localStorage key for storing the persistent anchor UUID */\n private static readonly ANCHOR_UUID_STORAGE_KEY = 'iwsdk_scene_anchor_uuid';\n\n init(): void {\n // Create shared materials for performance\n this.planeMaterial = new MeshBasicMaterial({\n color: 0xffffff,\n transparent: true,\n wireframe: true,\n opacity: 0.3,\n });\n\n this.meshMaterial = new MeshBasicMaterial({\n color: 0x3383e6,\n transparent: true,\n wireframe: true,\n opacity: 0.3,\n });\n\n const onSessionStart = async () => {\n this.updateEnabledFeatures(this.xrManager.getSession());\n\n // Attempt to restore a persistent anchor from previous sessions\n // This allows anchored objects to maintain their world position across sessions\n if (this.anchorFeatureEnabled) {\n await this.tryRestorePersistentAnchor();\n }\n\n // Temporarily disabling initiateRoomCapture API call due to the anhor wiping issue.\n // const planes = this.xrManager.getFrame()?.detectedPlanes;\n // const meshes = this.xrManager.getFrame()?.detectedMeshes;\n // if (\n // \t(!planes || planes.size === 0) &&\n // \t(!meshes || meshes.size === 0) &&\n // \t(this.planeFeatureEnabled || this.meshFeatureEnabled)\n // ) {\n // \tawait this.xrManager.getSession()?.initiateRoomCapture();\n // }\n };\n\n const onSessionEnd = () => {\n // Clean up all plane and mesh entities to prevent stale XRSpace references\n // XRSpace objects (like planeSpace, meshSpace, anchorSpace) are tied to a specific\n // XRSession and become invalid when the session ends. Using them with a new session's\n // XRFrame will cause \"XRSpace and XRFrame sessions do not match\" errors.\n this.disposeDetectedEntities();\n\n // Clear session-specific state to prevent stale references\n // Note: The persistent anchor UUID in localStorage is preserved for the next session\n this.resetSessionState();\n };\n\n this.xrManager.addEventListener('sessionstart', onSessionStart);\n this.xrManager.addEventListener('sessionend', onSessionEnd);\n\n this.anchoredGroupEntity = this.world.createTransformEntity(\n this.anchoredGroup,\n {\n parent: this.world.sceneEntity,\n persistent: true,\n },\n );\n\n this.cleanupFuncs.push(\n () => this.xrManager.removeEventListener('sessionstart', onSessionStart),\n () => this.xrManager.removeEventListener('sessionend', onSessionEnd),\n this.config.showWireFrame.subscribe((value) => {\n this.queries.planeEntities.entities.forEach((planeEntity) => {\n const planeObject = planeEntity.object3D;\n if (planeObject instanceof Mesh) {\n planeObject.visible = value;\n }\n });\n\n this.queries.meshEntities.entities.forEach((meshEntity) => {\n const meshObject = meshEntity.object3D;\n if (meshObject instanceof Mesh) {\n meshObject.visible = value;\n }\n });\n }),\n () => {\n this.disposeDetectedEntities();\n this.resetSessionState();\n\n for (const entity of [...this.queries.anchoredEntities.entities]) {\n const object = entity.object3D;\n if (object?.parent === this.anchoredGroup) {\n this.scene.attach(object);\n }\n if (entity.active) {\n entity.setValue(XRAnchor, 'attached', false);\n }\n }\n this.anchoredGroup.removeFromParent();\n if (this.anchoredGroupEntity?.active) {\n this.anchoredGroupEntity.destroy();\n }\n this.anchoredGroupEntity = undefined;\n this.planeMaterial.dispose();\n this.meshMaterial.dispose();\n },\n );\n }\n\n update(_delta: number, time: number): void {\n this.anchorRetryClockTime = time;\n const frame = this.xrFrame;\n const planes = frame?.detectedPlanes;\n const meshes = frame?.detectedMeshes;\n const referenceSpace = this.xrManager.getReferenceSpace();\n\n if (this.planeFeatureEnabled) {\n this.updatePlanes(planes, referenceSpace);\n }\n\n if (this.meshFeatureEnabled) {\n this.updateMeshes(meshes, referenceSpace);\n }\n\n if (\n this.anchorFeatureEnabled &&\n this.xrAnchor === undefined &&\n !this.anchorRequested &&\n time >= this.nextAnchorRequestTime\n ) {\n this.createAnchor(referenceSpace);\n }\n\n if (this.xrAnchor && referenceSpace) {\n this.updateAnchoredObject();\n const pose = this.xrManager\n .getFrame()\n ?.getPose(this.xrAnchor.anchorSpace, referenceSpace);\n if (pose) {\n this.matrixBuffer.fromArray(pose.transform.matrix);\n this.matrixBuffer.decompose(\n this.anchoredGroup.position,\n this.anchoredGroup.quaternion,\n this.anchoredGroup.scale,\n );\n }\n }\n }\n\n /**\n * Dispose only the per-object geometry for a plane/mesh entity being removed.\n * The plane/mesh materials are shared singletons (`planeMaterial` /\n * `meshMaterial`), so they must NOT be disposed here.\n */\n private disposeEntityGeometry(entity: Entity): void {\n const object3D = entity.object3D;\n if (object3D instanceof Mesh) {\n object3D.geometry.dispose();\n }\n }\n\n private disposeDetectedEntities(): void {\n const entities = new Set([\n ...this.queries.planeEntities.entities,\n ...this.queries.meshEntities.entities,\n ]);\n for (const entity of entities) {\n this.disposeEntityGeometry(entity);\n if (entity.active) {\n entity.destroy();\n }\n }\n this.currentPlanes.clear();\n this.currentMeshes.clear();\n this.planeGeometryStates.clear();\n this.meshGeometryStates.clear();\n }\n\n private resetSessionState(): void {\n this.anchorRequestGeneration++;\n this.anchorRequested = false;\n this.resetAnchorRetryState();\n this.clearActiveAnchor();\n this.planeFeatureEnabled = undefined;\n this.meshFeatureEnabled = undefined;\n this.anchorFeatureEnabled = undefined;\n }\n\n private isAnchorRequestCurrent(\n session: XRSession,\n requestGeneration: number,\n ): boolean {\n return (\n requestGeneration === this.anchorRequestGeneration &&\n session === this.xrManager.getSession()\n );\n }\n\n private deleteAnchor(anchor: XRAnchor | null | undefined): void {\n if (!anchor || this.deletedAnchors.has(anchor)) {\n return;\n }\n this.deletedAnchors.add(anchor);\n try {\n anchor.delete();\n } catch (_error) {\n // The session may already have ended, but the anchor must still be\n // forgotten locally and must never be installed into a later session.\n }\n }\n\n private clearActiveAnchor(): void {\n const anchor = this.xrAnchor;\n this.xrAnchor = undefined;\n this.deleteAnchor(anchor);\n }\n\n private resetAnchorRetryState(): void {\n this.nextAnchorRequestTime = 0;\n this.anchorRetryDelayIndex = 0;\n }\n\n private increaseAnchorRetryDelay(\n session: XRSession,\n requestGeneration: number,\n requestDelayIndex: number,\n ): void {\n if (!this.isAnchorRequestCurrent(session, requestGeneration)) {\n return;\n }\n this.nextAnchorRequestTime =\n this.anchorRetryClockTime +\n SceneUnderstandingSystem.ANCHOR_RETRY_DELAYS_SECONDS[requestDelayIndex];\n this.anchorRetryDelayIndex = Math.min(\n requestDelayIndex + 1,\n SceneUnderstandingSystem.ANCHOR_RETRY_DELAYS_SECONDS.length - 1,\n );\n }\n\n private updatePlanes(\n planes: XRPlaneSet | undefined,\n referenceSpace: XRReferenceSpace | null,\n ) {\n this.currentPlanes.clear();\n this.queries.planeEntities.entities.forEach((planeEntity) => {\n if (planes?.has(planeEntity.getValue(XRPlane, '_plane') as XRPlane)) {\n this.currentPlanes.set(\n planeEntity.getValue(XRPlane, '_plane') as XRPlane,\n planeEntity,\n );\n } else {\n this.planeGeometryStates.delete(\n planeEntity.getValue(XRPlane, '_plane') as XRPlane,\n );\n this.disposeEntityGeometry(planeEntity);\n planeEntity.destroy();\n }\n });\n\n if (planes) {\n planes.forEach((plane) => {\n if (referenceSpace != null) {\n const pose = this.xrManager\n .getFrame()\n .getPose(plane.planeSpace, referenceSpace);\n if (!pose) {\n return;\n }\n this.matrixBuffer.fromArray(pose.transform.matrix);\n\n if (this.currentPlanes.has(plane) === false) {\n const polygon = plane.polygon;\n const geometry = this.createPlaneGeometry(polygon);\n const mesh = new Mesh(geometry, this.planeMaterial);\n mesh.visible = this.config.showWireFrame.value;\n mesh.position.setFromMatrixPosition(this.matrixBuffer);\n mesh.quaternion.setFromRotationMatrix(this.matrixBuffer);\n this.scene.add(mesh);\n const planeEntity = this.world.createTransformEntity(mesh);\n planeEntity.addComponent(XRPlane, {\n _plane: plane,\n });\n this.planeGeometryStates.set(plane, {\n lastChangedTime: plane.lastChangedTime,\n polygon,\n });\n } else {\n const planeObject = this.currentPlanes.get(plane)?.object3D;\n const previousState = this.planeGeometryStates.get(plane);\n if (\n planeObject instanceof Mesh &&\n (previousState === undefined ||\n previousState.lastChangedTime !== plane.lastChangedTime)\n ) {\n const polygon = plane.polygon;\n // Conforming runtimes replace changed topology arrays. Keep the\n // identity guard because some emulators advance the timestamp on\n // every frame even when their topology is unchanged.\n if (previousState?.polygon !== polygon) {\n const previousGeometry = planeObject.geometry;\n planeObject.geometry = this.createPlaneGeometry(polygon);\n previousGeometry.dispose();\n }\n this.planeGeometryStates.set(plane, {\n lastChangedTime: plane.lastChangedTime,\n polygon,\n });\n }\n planeObject?.position.setFromMatrixPosition(this.matrixBuffer);\n planeObject?.quaternion.setFromRotationMatrix(this.matrixBuffer);\n }\n }\n });\n }\n }\n\n private updateMeshes(\n meshes: XRMeshSet | undefined,\n referenceSpace: XRReferenceSpace | null,\n ) {\n this.currentMeshes.clear();\n this.queries.meshEntities.entities.forEach((meshEntity) => {\n if (meshes?.has(meshEntity.getValue(XRMesh, '_mesh') as XRMesh)) {\n this.currentMeshes.set(\n meshEntity.getValue(XRMesh, '_mesh') as XRMesh,\n meshEntity,\n );\n } else {\n this.meshGeometryStates.delete(\n meshEntity.getValue(XRMesh, '_mesh') as XRMesh,\n );\n this.disposeEntityGeometry(meshEntity);\n meshEntity.destroy();\n }\n });\n\n if (meshes) {\n meshes.forEach((mesh) => {\n if (referenceSpace != null) {\n const pose = this.xrManager\n .getFrame()\n .getPose(mesh.meshSpace, referenceSpace);\n if (!pose) {\n return;\n }\n this.matrixBuffer.fromArray(pose.transform.matrix);\n\n if (this.currentMeshes.has(mesh) === false) {\n const vertices = mesh.vertices;\n const indices = mesh.indices;\n const metadata = this.tryGetMeshMetadata(\n vertices,\n mesh.semanticLabel,\n );\n if (metadata === undefined) {\n return;\n }\n const geometry = this.createMeshGeometry(vertices, indices);\n const threeMesh = new Mesh(geometry, this.meshMaterial);\n threeMesh.visible = this.config.showWireFrame.value;\n this.scene.add(threeMesh);\n const meshEntity = this.world.createTransformEntity(threeMesh);\n threeMesh.position.setFromMatrixPosition(this.matrixBuffer);\n threeMesh.quaternion.setFromRotationMatrix(this.matrixBuffer);\n\n meshEntity.addComponent(XRMesh, {\n _mesh: mesh,\n ...metadata,\n });\n this.meshGeometryStates.set(mesh, {\n indices,\n lastChangedTime: mesh.lastChangedTime,\n semanticLabel: mesh.semanticLabel,\n vertices,\n });\n } else {\n const meshEntity = this.currentMeshes.get(mesh);\n const meshObject = meshEntity?.object3D;\n const previousState = this.meshGeometryStates.get(mesh);\n if (\n meshEntity !== undefined &&\n meshObject instanceof Mesh &&\n (previousState === undefined ||\n previousState.lastChangedTime !== mesh.lastChangedTime)\n ) {\n const vertices = mesh.vertices;\n const indices = mesh.indices;\n const semanticLabel = mesh.semanticLabel;\n // See the plane path above: timestamp changes alone are noisy in\n // some emulators, while conforming topology updates replace the\n // vertex or index array.\n const topologyChanged =\n previousState?.vertices !== vertices ||\n previousState?.indices !== indices;\n const metadataChanged =\n topologyChanged ||\n previousState?.semanticLabel !== semanticLabel;\n const metadata = metadataChanged\n ? this.tryGetMeshMetadata(vertices, semanticLabel)\n : undefined;\n if (metadataChanged && metadata === undefined) {\n // Keep the last known-good geometry and component metadata.\n // A later valid topology update can still replace them.\n meshObject.position.setFromMatrixPosition(this.matrixBuffer);\n meshObject.quaternion.setFromRotationMatrix(this.matrixBuffer);\n return;\n }\n if (topologyChanged) {\n const previousGeometry = meshObject.geometry;\n meshObject.geometry = this.createMeshGeometry(\n vertices,\n indices,\n );\n previousGeometry.dispose();\n }\n if (metadata !== undefined) {\n this.updateMeshMetadata(meshEntity, metadata);\n }\n this.meshGeometryStates.set(mesh, {\n indices,\n lastChangedTime: mesh.lastChangedTime,\n semanticLabel,\n vertices,\n });\n }\n meshObject?.position.setFromMatrixPosition(this.matrixBuffer);\n meshObject?.quaternion.setFromRotationMatrix(this.matrixBuffer);\n }\n }\n });\n }\n }\n\n private createPlaneGeometry(polygon: XRPlane['polygon']): BoxGeometry {\n let minX = Number.MAX_SAFE_INTEGER;\n let maxX = Number.MIN_SAFE_INTEGER;\n let minZ = Number.MAX_SAFE_INTEGER;\n let maxZ = Number.MIN_SAFE_INTEGER;\n\n for (const point of polygon) {\n minX = Math.min(minX, point.x);\n maxX = Math.max(maxX, point.x);\n minZ = Math.min(minZ, point.z);\n maxZ = Math.max(maxZ, point.z);\n }\n\n return new BoxGeometry(maxX - minX, 0.001, maxZ - minZ);\n }\n\n private createMeshGeometry(\n vertices: XRMesh['vertices'],\n indices: XRMesh['indices'],\n ): BufferGeometry {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(vertices, 3));\n geometry.setIndex(new BufferAttribute(indices, 1));\n return geometry;\n }\n\n private getMeshMetadata(\n vertices: XRMesh['vertices'],\n semanticLabel: XRMesh['semanticLabel'],\n ): MeshMetadata {\n if (semanticLabel === 'global mesh') {\n return {\n dimensions: [0, 0, 0],\n isBounded3D: false,\n max: [0, 0, 0],\n min: [0, 0, 0],\n semanticLabel: '',\n };\n }\n\n const { minEntry, maxEntry } = findAxisAlignedBounds(vertices);\n return {\n dimensions: [\n maxEntry.x - minEntry.x,\n maxEntry.y - minEntry.y,\n maxEntry.z - minEntry.z,\n ],\n isBounded3D: true,\n max: [maxEntry.x, maxEntry.y, maxEntry.z],\n min: [minEntry.x, minEntry.y, minEntry.z],\n semanticLabel: semanticLabel ?? '',\n };\n }\n\n private tryGetMeshMetadata(\n vertices: XRMesh['vertices'],\n semanticLabel: XRMesh['semanticLabel'],\n ): MeshMetadata | undefined {\n try {\n return this.getMeshMetadata(vertices, semanticLabel);\n } catch (error) {\n console.warn(\n '[SceneUnderstandingSystem] Skipping mesh with invalid vertex data.',\n error,\n );\n return undefined;\n }\n }\n\n private updateMeshMetadata(entity: Entity, metadata: MeshMetadata): void {\n entity.getVectorView(XRMesh, 'min').set(metadata.min);\n entity.getVectorView(XRMesh, 'max').set(metadata.max);\n entity.getVectorView(XRMesh, 'dimensions').set(metadata.dimensions);\n if (entity.getValue(XRMesh, 'semanticLabel') !== metadata.semanticLabel) {\n entity.setValue(XRMesh, 'semanticLabel', metadata.semanticLabel);\n }\n if (entity.getValue(XRMesh, 'isBounded3D') !== metadata.isBounded3D) {\n entity.setValue(XRMesh, 'isBounded3D', metadata.isBounded3D);\n }\n }\n\n private updateEnabledFeatures(xrSession: XRSession | null) {\n if (!xrSession) {\n console.log(\n 'Warning: xrSession is null when trying to query enabled features. Scene understanding features are disabled.',\n );\n return;\n }\n\n const enabledFeatures = xrSession.enabledFeatures;\n this.planeFeatureEnabled = enabledFeatures?.includes('plane-detection');\n this.meshFeatureEnabled = enabledFeatures?.includes('mesh-detection');\n this.anchorFeatureEnabled = enabledFeatures?.includes('anchors');\n\n if (!this.planeFeatureEnabled) {\n console.log(\n 'Warning: plane-detection feature not enabled for WebXR session. Partial Scene Understanding features are disabled.',\n );\n }\n\n if (!this.meshFeatureEnabled) {\n console.log(\n 'Warning: mesh-detection feature not enabled for WebXR session. Partial Scene Understanding features are disabled.',\n );\n }\n\n if (!this.anchorFeatureEnabled) {\n console.log(\n 'Warning: anchor feature not enabled for WebXR session. Partial Scene Understanding features are disabled.',\n );\n }\n }\n\n /**\n * Attempts to restore a persistent anchor from a previous session.\n *\n * Persistent anchors allow anchored objects to maintain their world position\n * across XR sessions. The anchor UUID is stored in localStorage and used to\n * restore the same anchor when a new session starts.\n *\n * If restoration fails (e.g., user cleared the space, runtime doesn't support\n * persistence, or the anchor was deleted), this fails gracefully and a new\n * anchor will be created in the update loop.\n */\n private async tryRestorePersistentAnchor() {\n let requestGeneration: number | undefined;\n let session: XRSession | null = null;\n\n try {\n // Load the saved anchor UUID from localStorage\n const savedUuid = localStorage.getItem(\n SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY,\n );\n\n if (!savedUuid) {\n return;\n }\n\n session = this.xrManager.getSession();\n if (!session) {\n return;\n }\n\n if (!session.restorePersistentAnchor) {\n console.warn('XRSession.restorePersistentAnchor not supported');\n return;\n }\n\n // Each async request owns a generation. Session end, system teardown, or\n // a subsequent restore invalidates it so a late result cannot install an\n // XRAnchor whose XRSpace belongs to an obsolete XRSession.\n requestGeneration = ++this.anchorRequestGeneration;\n this.anchorRequested = true;\n const restoredAnchor = (await session.restorePersistentAnchor(\n savedUuid,\n )) as XRAnchor | null;\n\n if (!this.isAnchorRequestCurrent(session, requestGeneration)) {\n this.deleteAnchor(restoredAnchor);\n return;\n }\n\n if (!restoredAnchor) {\n this.clearActiveAnchor();\n return;\n }\n\n if (this.xrAnchor !== restoredAnchor) {\n this.clearActiveAnchor();\n this.xrAnchor = restoredAnchor;\n }\n this.resetAnchorRetryState();\n } catch (_error) {\n // Only the current session's failure proves that its saved UUID is\n // invalid. A superseded session may reject merely because it ended.\n if (\n requestGeneration === undefined ||\n (session !== null &&\n this.isAnchorRequestCurrent(session, requestGeneration))\n ) {\n try {\n localStorage.removeItem(\n SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY,\n );\n } catch (_storageError) {\n // Storage access can be unavailable in privacy-restricted contexts.\n }\n }\n } finally {\n // A stale request must not clear the in-flight marker owned by the next\n // session's restore.\n if (requestGeneration === this.anchorRequestGeneration) {\n this.anchorRequested = false;\n }\n }\n }\n\n /**\n * Creates a new XR anchor at the origin of the reference space.\n *\n * The anchor is used to attach virtual objects to a stable real-world position.\n * After creation, attempts to request a persistent handle so the anchor can be\n * restored in future sessions. If persistence is not supported, the anchor\n * will only last for the current session.\n */\n private async createAnchor(referenceSpace: XRReferenceSpace | null) {\n let requestGeneration: number | undefined;\n let session: XRSession | null = null;\n let createdAnchor: XRAnchor | null | undefined;\n let requestDelayIndex: number | undefined;\n\n try {\n session = this.xrManager.getSession();\n const frame = this.xrManager.getFrame();\n if (!session || !frame?.createAnchor || !referenceSpace) {\n return;\n }\n\n requestGeneration = ++this.anchorRequestGeneration;\n this.anchorRequested = true;\n requestDelayIndex = this.anchorRetryDelayIndex;\n console.log(\n '[SceneUnderstandingSystem] Anchor needed but not present, triggering creation',\n );\n createdAnchor = (await frame.createAnchor(\n new XRRigidTransform(),\n referenceSpace,\n )) as XRAnchor | null;\n\n if (!createdAnchor) {\n this.increaseAnchorRetryDelay(\n session,\n requestGeneration,\n requestDelayIndex,\n );\n return;\n }\n\n if (!this.isAnchorRequestCurrent(session, requestGeneration)) {\n this.deleteAnchor(createdAnchor);\n return;\n }\n\n if (this.xrAnchor !== createdAnchor) {\n this.clearActiveAnchor();\n this.xrAnchor = createdAnchor;\n }\n this.resetAnchorRetryState();\n\n if (createdAnchor.requestPersistentHandle) {\n const uuid = await createdAnchor.requestPersistentHandle();\n if (\n !this.isAnchorRequestCurrent(session, requestGeneration) ||\n this.xrAnchor !== createdAnchor\n ) {\n if (this.xrAnchor === createdAnchor) {\n this.xrAnchor = undefined;\n }\n this.deleteAnchor(createdAnchor);\n return;\n }\n localStorage.setItem(\n SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY,\n uuid,\n );\n }\n } catch (_error) {\n // Anchor creation and persistence are optional. A current created anchor\n // remains usable when only persistence fails; a stale one is discarded.\n if (\n !createdAnchor &&\n requestGeneration !== undefined &&\n requestDelayIndex !== undefined &&\n session !== null\n ) {\n this.increaseAnchorRetryDelay(\n session,\n requestGeneration,\n requestDelayIndex,\n );\n }\n if (\n createdAnchor &&\n requestGeneration !== undefined &&\n session !== null &&\n (!this.isAnchorRequestCurrent(session, requestGeneration) ||\n this.xrAnchor !== createdAnchor)\n ) {\n if (this.xrAnchor === createdAnchor) {\n this.xrAnchor = undefined;\n }\n this.deleteAnchor(createdAnchor);\n }\n } finally {\n if (requestGeneration === this.anchorRequestGeneration) {\n this.anchorRequested = false;\n }\n }\n }\n\n private updateAnchoredObject() {\n this.queries.anchoredEntities.entities.forEach((entity) => {\n const object = entity.object3D;\n if (object && !entity.getValue(XRAnchor, 'attached')) {\n this.anchoredGroup.attach(object);\n entity.setValue(XRAnchor, 'attached', true);\n }\n });\n }\n}\n\ntype Vec3 = { x: number; y: number; z: number };\n\n/**\n * From a flat `[x,y,z, x,y,z, ...]` vertex buffer, return its axis-aligned\n * minimum and maximum coordinates. The extrema can come from different source\n * vertices; treating one smallest-sum and one largest-sum vertex as bounds\n * under-reports skewed meshes.\n */\nexport function findAxisAlignedBounds(arr: Float32Array): {\n minEntry: Vec3;\n maxEntry: Vec3;\n} {\n if (!arr || arr.length === 0 || arr.length % 3 !== 0) {\n throw new Error('Array length must be a positive multiple of 3.');\n }\n let minX = arr[0];\n let minY = arr[1];\n let minZ = arr[2];\n let maxX = minX;\n let maxY = minY;\n let maxZ = minZ;\n for (let i = 3; i < arr.length; i += 3) {\n minX = Math.min(minX, arr[i]);\n minY = Math.min(minY, arr[i + 1]);\n minZ = Math.min(minZ, arr[i + 2]);\n maxX = Math.max(maxX, arr[i]);\n maxY = Math.max(maxY, arr[i + 1]);\n maxZ = Math.max(maxZ, arr[i + 2]);\n }\n return {\n minEntry: { x: minX, y: minY, z: minZ },\n maxEntry: { x: maxX, y: maxY, z: maxZ },\n };\n}\n\n/**\n * From a flat `[x,y,z, x,y,z, ...]` vertex buffer, return the source\n * vertices with the smallest and largest coordinate sums.\n *\n * @deprecated This legacy helper does not calculate an axis-aligned bounding\n * box. Use {@link findAxisAlignedBounds} for bounds and dimensions.\n */\nexport function findExtremeVertices(arr: Float32Array): {\n minEntry: Vec3;\n maxEntry: Vec3;\n} {\n if (!arr || arr.length === 0 || arr.length % 3 !== 0) {\n throw new Error('Array length must be a positive multiple of 3.');\n }\n let minIndex = 0;\n let maxIndex = 0;\n let minSum = arr[0] + arr[1] + arr[2];\n let maxSum = minSum;\n for (let i = 3; i < arr.length; i += 3) {\n const sum = arr[i] + arr[i + 1] + arr[i + 2];\n if (sum < minSum) {\n minSum = sum;\n minIndex = i;\n }\n if (sum > maxSum) {\n maxSum = sum;\n maxIndex = i;\n }\n }\n return {\n minEntry: { x: arr[minIndex], y: arr[minIndex + 1], z: arr[minIndex + 2] },\n maxEntry: { x: arr[maxIndex], y: arr[maxIndex + 1], z: arr[maxIndex + 2] },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -115,6 +115,7 @@
115
115
  "offer": { "enum": ["none", "once", "always"] },
116
116
  "referenceSpace": { "$ref": "#/$defs/referenceSpace" },
117
117
  "restoreCameraOnExit": { "type": "boolean" },
118
+ "launchOnSessionGranted": { "type": "boolean", "default": false },
118
119
  "features": { "$ref": "#/$defs/xrFeatures" }
119
120
  }
120
121
  }
@@ -205,6 +206,24 @@
205
206
  }
206
207
  ]
207
208
  },
209
+ "physics": {
210
+ "oneOf": [
211
+ { "type": "boolean" },
212
+ {
213
+ "type": "object",
214
+ "additionalProperties": false,
215
+ "properties": {
216
+ "useWorker": { "type": "boolean" },
217
+ "updateFrequency": {
218
+ "type": "number",
219
+ "exclusiveMinimum": 0,
220
+ "maximum": 240
221
+ },
222
+ "interpolation": { "type": "boolean" }
223
+ }
224
+ }
225
+ ]
226
+ },
208
227
  "sceneUnderstanding": {
209
228
  "oneOf": [
210
229
  { "type": "boolean" },
@@ -237,7 +256,7 @@
237
256
  "properties": {
238
257
  "locomotion": { "$ref": "#/$defs/locomotion" },
239
258
  "grabbing": { "$ref": "#/$defs/grabbing" },
240
- "physics": { "type": "boolean" },
259
+ "physics": { "$ref": "#/$defs/physics" },
241
260
  "sceneUnderstanding": { "$ref": "#/$defs/sceneUnderstanding" },
242
261
  "environmentRaycast": { "type": "boolean" },
243
262
  "camera": { "type": "boolean" },
@@ -1 +1 @@
1
- {"version":3,"file":"synced-euler.js","sources":["../../src/transform/synced-euler.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synced-euler.js","sources":["../../src/transform/synced-euler.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 { Euler } from '../runtime/three.js';\nimport type { SyncedQuaternion } from './synced-quaternion.js';\n\n/**\n * Euler rotation that stays automatically synced with a SyncedQuaternion using lazy evaluation.\n *\n * @remarks\n * - When you modify rotation.x/y/z, it automatically updates the synced quaternion\n * - When the quaternion is updated (via methods OR direct buffer writes), rotation is recomputed\n * - Rotation values are lazily computed from quaternion only when read (performance optimization)\n * - Multiple reads in the same frame use cached values (quaternion comparison detects changes)\n * - This is MORE performant than Three.js's default behavior which always syncs immediately\n *\n * @category Scene\n */\nexport class SyncedEuler extends Euler {\n private syncedQuaternion: SyncedQuaternion | null = null;\n private __x: number = 0;\n private __y: number = 0;\n private __z: number = 0;\n private __order: string = 'XYZ';\n private isDirty: boolean = false;\n // Cache last quaternion values to detect external buffer modifications\n private lastQuatX: number = 0;\n private lastQuatY: number = 0;\n private lastQuatZ: number = 0;\n private lastQuatW: number = 1;\n\n constructor(x = 0, y = 0, z = 0, order: any = 'XYZ') {\n super(x, y, z, order);\n // Preserve values from parent constructor\n this.__x = (this as any)._x;\n this.__y = (this as any)._y;\n this.__z = (this as any)._z;\n this.__order = (this as any)._order;\n this.setupProperties();\n }\n\n private setupProperties() {\n // Override internal properties with lazy sync behavior\n Object.defineProperty(this, '_x', {\n get: () => {\n // Check if quaternion changed externally (e.g., direct buffer write)\n this.checkQuaternionChanged();\n // Lazily sync from quaternion if dirty\n if (this.isDirty) {\n this.syncFromQuaternion();\n }\n return this.__x;\n },\n set: (value: number) => {\n this.__x = value;\n this.isDirty = false; // Values are fresh since we just set them\n this.updateQuaternion();\n // Call parent's onChange callback for any listeners\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, '_y', {\n get: () => {\n // Check if quaternion changed externally (e.g., direct buffer write)\n this.checkQuaternionChanged();\n // Lazily sync from quaternion if dirty\n if (this.isDirty) {\n this.syncFromQuaternion();\n }\n return this.__y;\n },\n set: (value: number) => {\n this.__y = value;\n this.isDirty = false; // Values are fresh since we just set them\n this.updateQuaternion();\n // Call parent's onChange callback for any listeners\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, '_z', {\n get: () => {\n // Check if quaternion changed externally (e.g., direct buffer write)\n this.checkQuaternionChanged();\n // Lazily sync from quaternion if dirty\n if (this.isDirty) {\n this.syncFromQuaternion();\n }\n return this.__z;\n },\n set: (value: number) => {\n this.__z = value;\n this.isDirty = false; // Values are fresh since we just set them\n this.updateQuaternion();\n // Call parent's onChange callback for any listeners\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, '_order', {\n get: () => {\n // Order doesn't need sync from quaternion, but check dirty for consistency\n if (this.isDirty) {\n this.syncFromQuaternion();\n }\n return this.__order;\n },\n set: (value: string) => {\n this.__order = value;\n this.isDirty = false; // Values are fresh since we just set them\n this.updateQuaternion();\n // Call parent's onChange callback for any listeners\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Link this Euler to a SyncedQuaternion for automatic bidirectional sync.\n */\n setSyncedQuaternion(quaternion: SyncedQuaternion): this {\n this.syncedQuaternion = quaternion;\n\n // Initialize cached quaternion values\n this.lastQuatX = quaternion.x;\n this.lastQuatY = quaternion.y;\n this.lastQuatZ = quaternion.z;\n this.lastQuatW = quaternion.w;\n\n // Register callback that marks rotation dirty when quaternion changes from external sources\n // The callback is automatically suppressed when rotation updates quaternion\n quaternion._onChangeWithSuppression(() => {\n this.markDirty();\n });\n\n return this;\n }\n\n /**\n * Check if quaternion values changed (e.g., via direct buffer writes).\n * If changed, mark as dirty so we recompute on next read.\n * This is cheap: just 4 float comparisons!\n */\n private checkQuaternionChanged(): void {\n if (!this.syncedQuaternion || this.isDirty) {\n return; // Already dirty, no need to check\n }\n\n // Compare current quaternion values to cached values\n // This catches external buffer modifications that bypass onChange callbacks\n if (\n this.syncedQuaternion.x !== this.lastQuatX ||\n this.syncedQuaternion.y !== this.lastQuatY ||\n this.syncedQuaternion.z !== this.lastQuatZ ||\n this.syncedQuaternion.w !== this.lastQuatW\n ) {\n this.isDirty = true;\n }\n }\n\n /**\n * Mark rotation as dirty (needs recompute from quaternion).\n * Called automatically when quaternion changes.\n * This is cheap - just a flag flip, no computation!\n */\n private markDirty(): void {\n this.isDirty = true;\n }\n\n /**\n * Update the synced quaternion from current Euler values.\n * Called automatically when Euler values change.\n */\n private updateQuaternion(): void {\n if (!this.syncedQuaternion) {\n return;\n }\n\n // Suppress the onChange callback to prevent marking rotation dirty\n // when we're the ones updating the quaternion!\n this.syncedQuaternion._withSuppressedOnChange(() => {\n // Use setFromEuler to convert Euler to quaternion\n this.syncedQuaternion!.setFromEuler(this, false);\n });\n\n // Update cached quaternion values since we just changed it\n this.lastQuatX = this.syncedQuaternion.x;\n this.lastQuatY = this.syncedQuaternion.y;\n this.lastQuatZ = this.syncedQuaternion.z;\n this.lastQuatW = this.syncedQuaternion.w;\n }\n\n /**\n * Update Euler values from the synced quaternion.\n * Called lazily when rotation is read and marked dirty.\n * After this, isDirty is cleared and values are cached.\n */\n private syncFromQuaternion(): void {\n if (!this.syncedQuaternion || !this.isDirty) {\n return;\n }\n\n // Update internal values from quaternion (without triggering setters)\n const euler = new Euler().setFromQuaternion(\n this.syncedQuaternion,\n this.__order as any,\n false,\n );\n\n this.__x = (euler as any)._x;\n this.__y = (euler as any)._y;\n this.__z = (euler as any)._z;\n\n // Cache current quaternion values so we can detect external changes\n this.lastQuatX = this.syncedQuaternion.x;\n this.lastQuatY = this.syncedQuaternion.y;\n this.lastQuatZ = this.syncedQuaternion.z;\n this.lastQuatW = this.syncedQuaternion.w;\n\n // Clear dirty flag - values are now fresh and cached\n this.isDirty = false;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"synced-quaternion.js","sources":["../../src/transform/synced-quaternion.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synced-quaternion.js","sources":["../../src/transform/synced-quaternion.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 { Quaternion } from '../runtime/three.js';\n\n/**\n * Quaternion whose internal `_x/_y/_z/_w` are backed by a Float32Array.\n *\n * @remarks\n * - Three.js quaternion math reads/writes the internal fields; by replacing\n * those with array‑backed accessors, all operations become zero‑copy against\n * the ECS component buffer.\n * - When no target is set, it behaves like a normal `Quaternion`.\n *\n * @category Scene\n */\nexport class SyncedQuaternion extends Quaternion {\n private target: Float32Array | null = null;\n private targetOffset: number = 0;\n private __x: number = 0;\n private __y: number = 0;\n private __z: number = 0;\n private __w: number = 1;\n private suppressOnChange: boolean = false;\n\n constructor(x = 0, y = 0, z = 0, w = 1) {\n super(x, y, z, w);\n // Preserve the values set by parent constructor before overriding properties\n this.__x = (this as any)._x;\n this.__y = (this as any)._y;\n this.__z = (this as any)._z;\n this.__w = (this as any)._w;\n this.setupProperties();\n }\n\n private setupProperties() {\n // Override the internal _x, _y, _z, _w properties to sync with target\n // This approach leverages the existing Three.js getter/setter architecture\n // All Three.js methods will automatically sync because they use these internal properties\n\n Object.defineProperty(this, '_x', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset];\n }\n // Fallback to a private property when no target is set\n return this.__x;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset] = value;\n } else {\n this.__x = value;\n }\n // Always call onChange - the callback will check if it should act\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, '_y', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset + 1];\n }\n return this.__y;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset + 1] = value;\n } else {\n this.__y = value;\n }\n // Always call onChange - the callback will check if it should act\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, '_z', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset + 2];\n }\n return this.__z;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset + 2] = value;\n } else {\n this.__z = value;\n }\n // Always call onChange - the callback will check if it should act\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, '_w', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset + 3];\n }\n return this.__w;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset + 3] = value;\n } else {\n this.__w = value;\n }\n // Always call onChange - the callback will check if it should act\n (this as any)._onChangeCallback();\n },\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Bind this quaternion to a packed float array.\n * @param target Float32Array to read/write (xyzw at consecutive indices).\n * @param offset Starting index within the array (x at `offset`).\n */\n setTarget(target: Float32Array, offset = 0): this {\n this.target = target;\n this.targetOffset = offset;\n return this;\n }\n\n /**\n * Register a callback that will be called when quaternion changes from external sources.\n * The callback is suppressed when changes originate from rotation to prevent loops.\n */\n _onChangeWithSuppression(callback: () => void): void {\n (this as any)._onChange(() => {\n if (!this.suppressOnChange) {\n callback();\n }\n });\n }\n\n /**\n * Temporarily suppress onChange callbacks while executing a function.\n * Used when rotation updates quaternion to prevent circular updates.\n */\n _withSuppressedOnChange(fn: () => void): void {\n this.suppressOnChange = true;\n fn();\n this.suppressOnChange = false;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"synced-vector3.js","sources":["../../src/transform/synced-vector3.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synced-vector3.js","sources":["../../src/transform/synced-vector3.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 { Vector3 } from '../runtime/three.js';\n\n/**\n * Vector3 whose x/y/z accessors read from and write to a target Float32Array.\n *\n * @remarks\n * - Used by {@link TransformSystem} to bind Object3D.position/scale directly to\n * ECS component storage for zero‑copy updates.\n * - When no target is set, falls back to internal fields so it behaves like a\n * normal `Vector3`.\n *\n * @category Scene\n */\nexport class SyncedVector3 extends Vector3 {\n private target: Float32Array | null = null;\n private targetOffset: number = 0;\n private __x: number = 0;\n private __y: number = 0;\n private __z: number = 0;\n\n constructor(x = 0, y = 0, z = 0) {\n super(x, y, z);\n // Preserve the values set by parent constructor before overriding properties\n this.__x = this.x;\n this.__y = this.y;\n this.__z = this.z;\n this.setupProperties();\n }\n\n private setupProperties() {\n // Override x, y, z properties to sync with target\n Object.defineProperty(this, 'x', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset];\n }\n // Fallback to a private property when no target is set\n return this.__x;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset] = value;\n } else {\n this.__x = value;\n }\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, 'y', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset + 1];\n }\n return this.__y;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset + 1] = value;\n } else {\n this.__y = value;\n }\n },\n enumerable: true,\n configurable: true,\n });\n\n Object.defineProperty(this, 'z', {\n get: () => {\n if (this.target) {\n return this.target[this.targetOffset + 2];\n }\n return this.__z;\n },\n set: (value: number) => {\n if (this.target) {\n this.target[this.targetOffset + 2] = value;\n } else {\n this.__z = value;\n }\n },\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Bind this vector to a packed float array.\n * @param target Float32Array to read/write.\n * @param offset Starting index within the array (x at `offset`).\n */\n setTarget(target: Float32Array, offset = 0): this {\n this.target = target;\n this.targetOffset = offset;\n return this;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform-component.js","sources":["../../src/transform/transform-component.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKH;;;;;AAKG;MACU,SAAS,GAAG,0BAA0B,CACjD,eAAe,CACb,WAAW,EACX;AACE,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AACxD,IAAA,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AAChE,IAAA,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IACrD,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAgB,EAAE;AAC1D,CAAA,EACD,6DAA6D,CAC9D,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;;;;"}
1
+ {"version":3,"file":"transform-component.js","sources":["../../src/transform/transform-component.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 { setComponentEditorMetadata } from '../ecs/component-editor-metadata.js';\nimport { Types, createComponent } from '../ecs/component.js';\n\n/**\n * 3D transform component that binds an entity to a Three.js Object3D.\n *\n * @category Scene\n * @hideineditor\n */\nexport const Transform = setComponentEditorMetadata(\n createComponent(\n 'Transform',\n {\n position: { type: Types.Vec3, default: [NaN, NaN, NaN] },\n orientation: { type: Types.Vec4, default: [NaN, NaN, NaN, NaN] },\n scale: { type: Types.Vec3, default: [NaN, NaN, NaN] },\n parent: { type: Types.Entity, default: undefined as any },\n },\n 'Component for 3D transformation (position, rotation, scale)',\n ),\n { hidden: true, intrinsic: true },\n);\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKH;;;;;AAKG;MACU,SAAS,GAAG,0BAA0B,CACjD,eAAe,CACb,WAAW,EACX;AACE,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AACxD,IAAA,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AAChE,IAAA,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IACrD,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAgB,EAAE;AAC1D,CAAA,EACD,6DAA6D,CAC9D,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform-utils.js","sources":["../../src/transform/transform-utils.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACA,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AACzB,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE;AAC5B,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE;AAC/B,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;AAE5B;;;;;;AAMG;AACG,SAAU,gBAAgB,CAC9B,MAAgB,EAChB,aAAsB,EAAA;AAEtB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;IACrC;SAAO;AACL,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AACrC,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;IACvD;AACF;AAEA;;;;;;AAMG;AACG,SAAU,kBAAkB,CAChC,MAAgB,EAChB,eAA2B,EAAA;AAE3B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;IACzC;SAAO;AACL,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;;QAErC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC;AACpD,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACnE;AACF;;;;"}
1
+ {"version":3,"file":"transform-utils.js","sources":["../../src/transform/transform-utils.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 { Matrix4, Object3D, Quaternion, Vector3 } from 'three';\n\n// Reusable objects to avoid allocations in hot paths\nconst _m1 = new Matrix4();\nconst _q1 = new Quaternion();\nconst _position = new Vector3();\nconst _scale = new Vector3();\n\n/**\n * Sets an object's position such that its world position matches the given world position.\n * Handles parent transforms correctly.\n *\n * @param object - The Object3D to set the position on\n * @param worldPosition - The desired world position\n */\nexport function setWorldPosition(\n object: Object3D,\n worldPosition: Vector3,\n): void {\n const parent = object.parent;\n if (parent === null) {\n object.position.copy(worldPosition);\n } else {\n parent.updateWorldMatrix(true, false);\n _m1.copy(parent.matrixWorld).invert();\n object.position.copy(worldPosition).applyMatrix4(_m1);\n }\n}\n\n/**\n * Sets an object's quaternion such that its world quaternion matches the given world quaternion.\n * Handles parent transforms correctly, including parents with non-uniform scale.\n *\n * @param object - The Object3D to set the quaternion on\n * @param worldQuaternion - The desired world quaternion\n */\nexport function setWorldQuaternion(\n object: Object3D,\n worldQuaternion: Quaternion,\n): void {\n const parent = object.parent;\n if (parent === null) {\n object.quaternion.copy(worldQuaternion);\n } else {\n parent.updateWorldMatrix(true, false);\n // Extract parent's world quaternion via decompose (handles non-uniform scale correctly)\n parent.matrixWorld.decompose(_position, _q1, _scale);\n object.quaternion.copy(worldQuaternion).premultiply(_q1.invert());\n }\n}\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACA,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AACzB,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE;AAC5B,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE;AAC/B,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;AAE5B;;;;;;AAMG;AACG,SAAU,gBAAgB,CAC9B,MAAgB,EAChB,aAAsB,EAAA;AAEtB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;IACrC;SAAO;AACL,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AACrC,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;IACvD;AACF;AAEA;;;;;;AAMG;AACG,SAAU,kBAAkB,CAChC,MAAgB,EAChB,eAA2B,EAAA;AAE3B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;IACzC;SAAO;AACL,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;;QAErC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC;AACpD,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACnE;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sources":["../../src/transform/transform.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.js","sources":["../../src/transform/transform.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, NullEntity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { LevelTag } from '../level/index.js';\nimport { Quaternion, Vector3, Euler } from '../runtime/three.js';\nimport { SyncedEuler } from './synced-euler.js';\nimport { SyncedQuaternion } from './synced-quaternion.js';\nimport { SyncedVector3 } from './synced-vector3.js';\nimport { Transform } from './transform-component.js';\n\nexport { Transform } from './transform-component.js';\n\nfunction attachToEntity(entity: Entity): void {\n const object3D = entity.object3D;\n if (!object3D) {\n return;\n }\n if ((object3D as any).__transformAttached) {\n return;\n }\n (object3D as any).__transformAttached = true;\n\n object3D.entityIdx = entity.index;\n object3D.positionView = entity.getVectorView(\n Transform,\n 'position',\n ) as Float32Array;\n object3D.quaternionView = entity.getVectorView(\n Transform,\n 'orientation',\n ) as Float32Array;\n object3D.scaleView = entity.getVectorView(Transform, 'scale') as Float32Array;\n\n // if component values contains NaN, keep original values instead\n if (object3D.positionView.some(Number.isNaN)) {\n object3D.position.toArray(object3D.positionView);\n }\n if (object3D.quaternionView.some(Number.isNaN)) {\n object3D.quaternion.toArray(object3D.quaternionView);\n }\n if (object3D.scaleView.some(Number.isNaN)) {\n object3D.scale.toArray(object3D.scaleView);\n }\n\n Object.defineProperty(object3D, 'position', {\n value: new SyncedVector3().setTarget(object3D.positionView),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n const syncedQuat = new SyncedQuaternion().setTarget(object3D.quaternionView);\n\n Object.defineProperty(object3D, 'quaternion', {\n value: syncedQuat,\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n // Replace rotation with SyncedEuler that stays in sync with the quaternion\n Object.defineProperty(object3D, 'rotation', {\n value: new SyncedEuler()\n .copy(object3D.rotation)\n .setSyncedQuaternion(syncedQuat),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n Object.defineProperty(object3D, 'scale', {\n value: new SyncedVector3().setTarget(object3D.scaleView),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n object3D._parent = object3D.parent; // save original parent\n Object.defineProperty(object3D, 'parent', {\n get: () => {\n return object3D._parent;\n },\n set: (value) => {\n object3D._parent = value;\n Transform.data.parent[entity.index] = value?.entityIdx ?? NullEntity;\n },\n configurable: true,\n enumerable: true,\n });\n}\n\nfunction detachFromEntity(entity: Entity): void {\n const object3D = entity.object3D;\n if (!object3D) {\n return;\n }\n if (!(object3D as any).__transformAttached) {\n return;\n }\n\n delete object3D.entityIdx;\n delete object3D.positionView;\n delete object3D.quaternionView;\n delete object3D.scaleView;\n\n Object.defineProperty(object3D, 'position', {\n value: new Vector3().copy(object3D.position),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n Object.defineProperty(object3D, 'quaternion', {\n value: new Quaternion().copy(object3D.quaternion),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n Object.defineProperty(object3D, 'rotation', {\n value: new Euler().copy(object3D.rotation),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n Object.defineProperty(object3D, 'scale', {\n value: new Vector3().copy(object3D.scale),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n\n Object.defineProperty(object3D, 'parent', {\n value: object3D._parent,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n\n delete object3D._parent;\n delete (object3D as any).__transformAttached;\n}\n\n/**\n * Keeps Object3D and Transform component in sync and manages parenting.\n *\n * @remarks\n * - Replaces Object3D accessors with synced views for fast ECS writes.\n * - Ensures entities without an explicit `parent` attach to the level root\n * (or the scene for persistent objects).\n * - If an Object3D is manually reparented under another entity, the component\n * `parent` value is updated to match.\n *\n * @category Scene\n */\nexport class TransformSystem extends createSystem({\n transform: { required: [Transform] },\n}) {\n init(): void {\n this.queries.transform.subscribe('qualify', attachToEntity);\n this.queries.transform.subscribe('disqualify', detachFromEntity);\n }\n\n update(): void {\n this.queries.transform.entities.forEach((entity) => {\n const object = entity.object3D;\n if (!object || object === this.world.scene) {\n return;\n }\n const parentEntity = entity.getValue(Transform, 'parent');\n const parentObject = parentEntity?.object3D;\n\n if (!parentObject) {\n // no valid parent specified in Transform\n if (object.parent?.entityIdx !== undefined) {\n // check whether object is already parented under an entity, if so, update parent in Transform\n Transform.data.parent[entity.index] = object.parent.entityIdx;\n } else {\n // Default parent: active level if entity has LevelTag; otherwise scene (persistent)\n const targetEntity = entity.hasComponent(LevelTag)\n ? this.world.activeLevel.value\n : this.world.sceneEntity;\n console.warn(\n `Entity ${entity.index} is being parented under ${entity.hasComponent(LevelTag) ? 'active level root' : 'scene root'} by default because it doesn't have a valid parent entity.`,\n );\n targetEntity.object3D!.add(object);\n entity.setValue(Transform, 'parent', targetEntity);\n }\n } else if (parentObject !== object.parent) {\n // parent changed in Transform\n parentObject.add(object);\n }\n });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sources":["../../src/ui/document.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sources":["../../src/ui/document.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 { Component } from '@pmndrs/uikit';\nimport { signal, Signal } from '@preact/signals-core';\nimport { Group, Object3D } from 'three';\n\n/**\n * Lightweight DOM-like wrapper around a UIKit root `Component` that lives in the 3D scene.\n *\n * @remarks\n * - Provides query helpers (`getElementById`, `getElementsByClassName`, `querySelector(All)`).\n * - Maintains reactive target dimensions via {@link targetWidth}/{@link targetHeight} and\n * scales the group to fit while preserving aspect ratio.\n * - Intended to be attached to an entity's `object3D` in world space or to the `camera` for\n * screen‑space UI. Use together with {@link PanelUISystem} and {@link ScreenSpaceUISystem}.\n *\n * @category UI\n */\nexport class UIKitDocument extends Group {\n private elementMap = new Map<string, Component<any>>();\n private classMap = new Map<string, Component<any>[]>();\n private _rootElement: Component<any>;\n private _abortController = new AbortController();\n private _disposed = false;\n\n /** Reactive target width in meters. Set via {@link setTargetDimensions}. */\n readonly targetWidth: Signal<number> = signal(0);\n /** Reactive target height in meters. Set via {@link setTargetDimensions}. */\n readonly targetHeight: Signal<number> = signal(0);\n\n /**\n * Create a document backed by a UIKit root component.\n * @param rootComponent The root `Component` produced from a UIKitML document.\n */\n constructor(rootComponent: Component<any>) {\n super();\n\n this._rootElement = rootComponent;\n this.add(this._rootElement);\n this.indexElements(rootComponent);\n\n this.setupReactiveResizing();\n }\n\n /**\n * Return the first element with a matching `id` (UIKit property).\n * @param id The element identifier without the `#` prefix.\n */\n getElementById<T extends Component<any> = Component<any>>(\n id: string,\n ): T | null {\n return (this.elementMap.get(id) as T | undefined) ?? null;\n }\n\n /** Return a typed element or throw a source-oriented lookup error. */\n requireElementById<T extends Component<any> = Component<any>>(id: string): T {\n const element = this.getElementById<T>(id);\n if (!element) {\n throw new Error(`UIKitML element \"#${id}\" was not found`);\n }\n return element;\n }\n\n /**\n * Return all elements that include `className` in their class list.\n * @param className The class without the preceding dot.\n */\n getElementsByClassName(className: string): Component<any>[] {\n return this.classMap.get(className) || [];\n }\n\n /**\n * Return the first element matching a simple CSS‑like selector.\n *\n * @remarks\n * Supported selectors:\n * - `#id`\n * - `.class`\n * - Descendant combinations, e.g. `#parent .child`\n */\n querySelector(selector: string): Component<any> | null {\n const results = this.querySelectorAll(selector);\n return results.length > 0 ? results[0] : null;\n }\n\n /**\n * Return all elements matching a simple CSS‑like selector. See {@link querySelector}.\n */\n querySelectorAll(selector: string): Component<any>[] {\n // Handle descendant selectors (e.g., \"#parent .child\")\n if (selector.includes(' ')) {\n return this.parseDescendantSelector(selector);\n }\n\n // Handle simple selectors\n if (selector.startsWith('#')) {\n const element = this.getElementById(selector.substring(1));\n return element ? [element] : [];\n }\n if (selector.startsWith('.')) {\n return this.getElementsByClassName(selector.substring(1));\n }\n\n return [];\n }\n\n /** Parse descendant selectors like `#parent .child`. */\n private parseDescendantSelector(selector: string): Component<any>[] {\n const parts = selector.trim().split(/\\s+/);\n if (parts.length < 2) {\n return [];\n }\n\n // Start with elements matching the first selector\n let currentElements = this.querySelectorAll(parts[0]);\n\n // For each subsequent selector part, find descendants\n for (let i = 1; i < parts.length; i++) {\n const nextSelector = parts[i];\n const descendants: Component<any>[] = [];\n\n for (const parent of currentElements) {\n const childMatches = this.findDescendants(parent, nextSelector);\n descendants.push(...childMatches);\n }\n\n currentElements = descendants;\n if (currentElements.length === 0) {\n break;\n }\n }\n\n return currentElements;\n }\n\n /** Find all descendants of a parent that match a selector. */\n private findDescendants(\n parent: Component<any>,\n selector: string,\n ): Component<any>[] {\n const results: Component<any>[] = [];\n this.searchDescendants(parent, selector, results);\n return results;\n }\n\n /** Recursively search for descendants matching a selector. */\n private searchDescendants(\n parent: Object3D,\n selector: string,\n results: Component<any>[],\n ): void {\n for (const child of parent.children) {\n if (child instanceof Component) {\n if (this.matchesSelector(child as Component<any>, selector)) {\n results.push(child as any);\n }\n }\n // Continue searching in children regardless of whether current child matched\n this.searchDescendants(child, selector, results);\n }\n }\n\n /** Check if a component matches a simple selector (`#id` or `.class`). */\n private matchesSelector(\n component: Component<any>,\n selector: string,\n ): boolean {\n if (selector.startsWith('#')) {\n const id = component.properties?.signal?.id?.value;\n return id === selector.substring(1);\n }\n\n if (selector.startsWith('.')) {\n const className = selector.substring(1);\n const classList = component.classList\n ? ((component.classList as any).list?.filter(\n (c: any) => typeof c === 'string',\n ) as string[]) || []\n : [];\n return classList.includes(className);\n }\n\n return false;\n }\n\n /**\n * Check if `element` is a descendant of `ancestor`.\n * @returns `true` if `ancestor` appears in the parent chain of `element`.\n */\n isDescendantOf(element: Component<any>, ancestor: Component<any>): boolean {\n let current = element.parent;\n while (current) {\n if (current === ancestor) {\n return true;\n }\n current = current.parent;\n }\n return false;\n }\n\n /** Convenience for `querySelectorAll(\"${parent} ${child}\")`. */\n querySelectorAllWithin(\n parentSelector: string,\n childSelector: string,\n ): Component<any>[] {\n return this.querySelectorAll(`${parentSelector} ${childSelector}`);\n }\n /** Convenience for the first match of `querySelectorAllWithin`. */\n querySelectorWithin(\n parentSelector: string,\n childSelector: string,\n ): Component<any> | null {\n return this.querySelector(`${parentSelector} ${childSelector}`);\n }\n /** Set up reactivity that rescales the group when size or target changes. */\n private setupReactiveResizing(): void {\n const abortSignal = this._abortController.signal;\n\n // React to changes in target dimensions or root component size to apply scaling\n const targetWidthUnsubscribe = this.targetWidth.subscribe(() =>\n this.updateScaling(),\n );\n const targetHeightUnsubscribe = this.targetHeight.subscribe(() =>\n this.updateScaling(),\n );\n const sizeUnsubscribe = this._rootElement.size?.subscribe(() =>\n this.updateScaling(),\n );\n\n abortSignal.addEventListener('abort', () => {\n targetWidthUnsubscribe();\n targetHeightUnsubscribe();\n sizeUnsubscribe?.();\n });\n }\n\n /** Compute uniform scale to fit the target width/height while preserving aspect ratio. */\n private updateScaling(): void {\n const targetWorldWidth = this.targetWidth.value;\n const targetWorldHeight = this.targetHeight.value;\n const uiNaturalSize = this._rootElement.size?.value;\n\n if (targetWorldWidth <= 0 || targetWorldHeight <= 0) {\n this.scale.setScalar(1);\n return;\n }\n\n if (\n uiNaturalSize &&\n Array.isArray(uiNaturalSize) &&\n uiNaturalSize.length >= 2\n ) {\n const [uiWidth, uiHeight] = uiNaturalSize;\n if (\n typeof uiWidth === 'number' &&\n typeof uiHeight === 'number' &&\n uiWidth > 0 &&\n uiHeight > 0\n ) {\n // Convert UIKit dimensions to world space units (UIKit uses cm units)\n const uiWidthInWorldUnits = uiWidth / 100;\n const uiHeightInWorldUnits = uiHeight / 100;\n\n const scaleX = targetWorldWidth / uiWidthInWorldUnits;\n const scaleY = targetWorldHeight / uiHeightInWorldUnits;\n const optimalScale = Math.min(scaleX, scaleY);\n\n // Apply scale to the Group (this), not the root element\n this.scale.setScalar(optimalScale);\n }\n }\n }\n\n /**\n * Set desired dimensions for the UI in meters. The document computes a uniform scale\n * that fits these constraints while preserving aspect ratio.\n * @param width Target width in meters.\n * @param height Target height in meters.\n */\n setTargetDimensions(width: number, height: number): void {\n this.targetWidth.value = width;\n this.targetHeight.value = height;\n }\n\n /** Restore intrinsic UIKit size so the parent entity transform owns scaling. */\n clearTargetDimensions(): void {\n this.targetWidth.value = 0;\n this.targetHeight.value = 0;\n }\n\n /**\n * Current intrinsic size of the UIKit root component (in UIKit units, centimeters),\n * if available from the underlying component's `size` signal.\n */\n get computedSize(): { width: number; height: number } | null {\n const sizeValue = this._rootElement.size?.value;\n if (sizeValue && Array.isArray(sizeValue) && sizeValue.length >= 2) {\n const [width, height] = sizeValue;\n if (typeof width === 'number' && typeof height === 'number') {\n return { width, height };\n }\n }\n return null;\n }\n\n /** Return the most recently requested target size in meters. */\n get targetSize(): { width: number; height: number } {\n return {\n width: this.targetWidth.value,\n height: this.targetHeight.value,\n };\n }\n\n /** The root UIKit component for this document. */\n get rootElement(): Component<any> {\n return this._rootElement;\n }\n\n /** Whether this document has released its UIKit resources. */\n get disposed(): boolean {\n return this._disposed;\n }\n\n /**\n * Dispose of internal resources and detach children. Safe to call multiple times.\n */\n dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n\n // Abort all effects to clean up signal subscriptions\n this._abortController.abort();\n\n // Dispose of the root UIKit Component which will clean up all resources\n if (this._rootElement && typeof this._rootElement.dispose === 'function') {\n this._rootElement.dispose();\n }\n\n // Remove root element from this Group\n this.remove(this._rootElement);\n\n // Clear internal maps\n this.elementMap.clear();\n this.classMap.clear();\n }\n\n /** String summary useful for debugging. */\n toString(): string {\n const elementCount = this.elementMap.size;\n const classCount = this.classMap.size;\n const computed = this.computedSize;\n const target = this.targetSize;\n return `UIKitDocument { elements: ${elementCount}, classes: ${classCount}, computed: ${computed ? `${computed.width}x${computed.height}` : 'none'}, target: ${target.width}x${target.height} }`;\n }\n\n /** Index IDs and classes for DOM‑like queries. */\n private indexElements(object: Object3D): void {\n // Only index UIKit Components, not all Object3Ds\n if (object instanceof Component) {\n // Access id from UIKit's properties system\n const id = object.properties?.signal?.id?.value;\n // Access classes from UIKit's ClassList - work around iterator bug by accessing private list\n const classList = object.classList\n ? ((object.classList as any).list?.filter(\n (c: any) => typeof c === 'string',\n ) as string[]) || []\n : [];\n\n // Index by ID\n if (id) {\n this.elementMap.set(id, object as any);\n }\n\n // Index by class names\n for (const className of classList) {\n if (!this.classMap.has(className)) {\n this.classMap.set(className, []);\n }\n this.classMap.get(className)!.push(object as any);\n }\n }\n\n // Recursively index children\n for (const child of object.children) {\n this.indexElements(child);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"follow-component.js","sources":["../../src/ui/follow-component.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACO,MAAM,cAAc,GAAG;AAC5B,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,UAAU,EAAE,aAAa;;AAG3B;AACO,MAAM,QAAQ,GAAG,eAAe,CACrC,UAAU,EACV;AACE,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,CAAC,MAAM;AAClB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,IAAI,EAAE,gDAAgD;AACvD,KAAA;AACD,IAAA,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACxD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,cAAc,CAAC,MAAM;AAC/B,KAAA;IACD,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;IAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;IAC1C,iBAAiB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AACzD,IAAA,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;CACxD,EACD,wCAAwC;;;;"}
1
+ {"version":3,"file":"follow-component.js","sources":["../../src/ui/follow-component.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/** Behavior modes for {@link Follower}. @category UI */\nexport const FollowBehavior = {\n FaceTarget: 'face-target',\n PivotY: 'pivot-y',\n NoRotation: 'no-rotation',\n};\n\n/** Makes an entity follow a target Object3D. */\nexport const Follower = createComponent(\n 'Follower',\n {\n target: {\n type: Types.Object,\n default: undefined,\n widget: 'entity',\n required: true,\n help: 'Drag an authored or built-in scene entity here',\n },\n offsetPosition: { type: Types.Vec3, default: [0, 0, 0] },\n behavior: {\n type: Types.Enum,\n enum: FollowBehavior,\n default: FollowBehavior.PivotY,\n },\n maxAngle: { type: Types.Float32, default: 30 },\n tolerance: { type: Types.Float32, default: 0.4 },\n speed: { type: Types.Float32, default: 1 },\n needsPositionSync: { type: Types.Boolean, default: true },\n _followTarget: { type: Types.Vec3, default: [0, 0, 0] },\n },\n 'Component for following another object',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACO,MAAM,cAAc,GAAG;AAC5B,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,UAAU,EAAE,aAAa;;AAG3B;AACO,MAAM,QAAQ,GAAG,eAAe,CACrC,UAAU,EACV;AACE,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,CAAC,MAAM;AAClB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,IAAI,EAAE,gDAAgD;AACvD,KAAA;AACD,IAAA,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACxD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,cAAc,CAAC,MAAM;AAC/B,KAAA;IACD,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;IAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;IAC1C,iBAAiB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AACzD,IAAA,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;CACxD,EACD,wCAAwC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"follow.d.ts","sourceRoot":"","sources":["../../src/ui/follow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAEhC;IACA,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,KAAK,CAAe;IAE5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAqE5B"}
1
+ {"version":3,"file":"follow.d.ts","sourceRoot":"","sources":["../../src/ui/follow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAEhC;IACA,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,KAAK,CAAe;IAE5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAoE5B"}
package/dist/ui/follow.js CHANGED
@@ -66,7 +66,6 @@ class FollowSystem extends createSystem({
66
66
  if (behavior === FollowBehavior.PivotY) {
67
67
  this.targetForward.y = 0;
68
68
  this.deltaVec3.y = 0;
69
- this.strictFollowTarget.y = this.targetPosition.y;
70
69
  }
71
70
  if (entity.getValue(Follower, 'needsPositionSync')) {
72
71
  object.position
@@ -1 +1 @@
1
- {"version":3,"file":"follow.js","sources":["../../src/ui/follow.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"follow.js","sources":["../../src/ui/follow.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 { createSystem } from '../ecs/system.js';\nimport {\n Euler,\n MathUtils,\n Object3D,\n Quaternion,\n Vector3,\n} from '../runtime/index.js';\nimport { FollowBehavior, Follower } from './follow-component.js';\n\nexport { FollowBehavior, Follower } from './follow-component.js';\n\n/**\n * Angle in degrees from the dot product of two unit vectors, robust to\n * floating-point error. A normalized dot product can land slightly outside\n * [-1, 1] (e.g. 1.0000001), which makes `Math.acos` return `NaN`; that `NaN`\n * would then poison the follow re-target comparison. Clamp before `acos`.\n */\nexport function clampedAcosDeg(dot: number): number {\n return MathUtils.radToDeg(Math.acos(MathUtils.clamp(dot, -1, 1)));\n}\n\n/**\n * Updates entities with {@link Follower} to chase a target using smoothed motion,\n * with constraints on angle and distance.\n *\n * @category UI\n */\nexport class FollowSystem extends createSystem({\n follower: { required: [Follower] },\n}) {\n private followTarget = new Vector3();\n private strictFollowTarget = new Vector3();\n private deltaVec3 = new Vector3();\n private targetPosition = new Vector3();\n private followerPosition = new Vector3();\n private targetForward = new Vector3();\n private quat = new Quaternion();\n private euler = new Euler();\n\n update(delta: number): void {\n this.queries.follower.entities.forEach((entity) => {\n const object = entity.object3D;\n const target = entity.getValue(Follower, 'target') as Object3D;\n if (!object || !target || !object.parent) {\n return;\n }\n const followTargetVecView = entity.getVectorView(\n Follower,\n '_followTarget',\n );\n this.followTarget.fromArray(followTargetVecView);\n const behavior = entity.getValue(Follower, 'behavior');\n const offsetPosition = entity.getVectorView(Follower, 'offsetPosition');\n target.getWorldQuaternion(this.quat);\n target.getWorldPosition(this.targetPosition);\n if (behavior === FollowBehavior.PivotY) {\n this.euler.setFromQuaternion(this.quat, 'YXZ');\n this.euler.x = 0;\n this.euler.z = 0;\n this.quat.setFromEuler(this.euler);\n }\n this.strictFollowTarget\n .fromArray(offsetPosition)\n .applyQuaternion(this.quat)\n .add(this.targetPosition);\n this.targetForward.set(0, 0, -1).applyQuaternion(this.quat);\n object.getWorldPosition(this.deltaVec3).sub(this.targetPosition);\n if (behavior === FollowBehavior.PivotY) {\n this.targetForward.y = 0;\n this.deltaVec3.y = 0;\n }\n if (entity.getValue(Follower, 'needsPositionSync')) {\n object.position\n .copy(this.strictFollowTarget)\n .toArray(followTargetVecView);\n entity.setValue(Follower, 'needsPositionSync', false);\n } else {\n const distance = object.parent\n .worldToLocal(this.strictFollowTarget)\n .distanceTo(this.followTarget);\n const deltaAngle = clampedAcosDeg(\n this.targetForward.normalize().dot(this.deltaVec3.normalize()),\n );\n if (\n distance > entity.getValue(Follower, 'tolerance')! ||\n deltaAngle > entity.getValue(Follower, 'maxAngle')!\n ) {\n this.followTarget\n .copy(this.strictFollowTarget)\n .toArray(followTargetVecView);\n }\n const speed = entity.getValue(Follower, 'speed');\n object.position.lerp(this.followTarget, delta * speed!);\n }\n if (\n behavior === FollowBehavior.FaceTarget ||\n behavior === FollowBehavior.PivotY\n ) {\n if (behavior === FollowBehavior.PivotY) {\n this.targetPosition.y = object.getWorldPosition(\n this.followerPosition,\n ).y;\n }\n object.lookAt(this.targetPosition);\n }\n });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"panel-components.js","sources":["../../src/ui/panel-components.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAII,MAAM,eAAe,GAAG;AAC7B,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,MAAM;;AAUP,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT;IACE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;CAC5C,EACD,6DAA6D;AAGxD,MAAM,aAAa,GAAG,eAAe,CAC1C,eAAe,EACf;IACE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;CACrD,EACD,kDAAkD;;;;"}
1
+ {"version":3,"file":"panel-components.js","sources":["../../src/ui/panel-components.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\nexport const ColorSchemeType = {\n System: 'system',\n Light: 'light',\n Dark: 'dark',\n} as const;\n\nexport type ColorScheme =\n (typeof ColorSchemeType)[keyof typeof ColorSchemeType];\n\nexport interface PanelUIProps {\n config: string;\n}\n\nexport const PanelUI = createComponent(\n 'PanelUI',\n {\n config: { type: Types.String, default: '' },\n },\n 'Component for 3D panel UI elements backed by a UIKitML file',\n);\n\nexport const PanelDocument = createComponent(\n 'PanelDocument',\n {\n document: { type: Types.Object, default: undefined },\n },\n 'Internal component containing loaded UI document',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAII,MAAM,eAAe,GAAG;AAC7B,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,MAAM;;AAUP,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT;IACE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;CAC5C,EACD,6DAA6D;AAGxD,MAAM,aAAa,GAAG,eAAe,CAC1C,eAAe,EACf;IACE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;CACrD,EACD,kDAAkD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"screenspace-component.js","sources":["../../src/ui/screenspace-component.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACO,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;IACE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9C,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC/C,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;CAC/C,EACD,2CAA2C;;;;"}
1
+ {"version":3,"file":"screenspace-component.js","sources":["../../src/ui/screenspace-component.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/** CSS-like screen-space layout for a PanelUI. */\nexport const ScreenSpace = createComponent(\n 'ScreenSpace',\n {\n height: { type: Types.String, default: '25vh' },\n width: { type: Types.String, default: '25vw' },\n top: { type: Types.String, default: 'auto' },\n bottom: { type: Types.String, default: 'auto' },\n left: { type: Types.String, default: 'auto' },\n right: { type: Types.String, default: 'auto' },\n zOffset: { type: Types.Float32, default: 0.2 },\n },\n 'Component for screen-space UI positioning',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACO,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;IACE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9C,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC/C,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;CAC/C,EACD,2CAA2C;;;;"}