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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/asset/asset-manager.js.map +1 -1
  2. package/dist/asset/cache-manager.js.map +1 -1
  3. package/dist/asset/loaders/audio-loader.js.map +1 -1
  4. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  5. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  7. package/dist/asset/loaders/texture-loader.js.map +1 -1
  8. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  9. package/dist/audio/audio-pool.js.map +1 -1
  10. package/dist/audio/audio-system.js.map +1 -1
  11. package/dist/audio/audio-utils.js.map +1 -1
  12. package/dist/audio/audio.js.map +1 -1
  13. package/dist/camera/camera-source.js.map +1 -1
  14. package/dist/camera/camera-system.js.map +1 -1
  15. package/dist/camera/camera-utils.js.map +1 -1
  16. package/dist/camera/types.js.map +1 -1
  17. package/dist/depth/depth-occludable.js.map +1 -1
  18. package/dist/depth/depth-sensing-system.js.map +1 -1
  19. package/dist/depth/depth-textures.js.map +1 -1
  20. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  21. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  22. package/dist/ecs/builtin-components.js.map +1 -1
  23. package/dist/ecs/component-editor-metadata.js.map +1 -1
  24. package/dist/ecs/component-manifest.js.map +1 -1
  25. package/dist/ecs/entity.js.map +1 -1
  26. package/dist/ecs/system.js.map +1 -1
  27. package/dist/ecs/world.js.map +1 -1
  28. package/dist/environment/dome-gradient.js.map +1 -1
  29. package/dist/environment/dome-texture.js.map +1 -1
  30. package/dist/environment/environment-system.js.map +1 -1
  31. package/dist/environment/gradient-environment.js.map +1 -1
  32. package/dist/environment/ibl-gradient.js.map +1 -1
  33. package/dist/environment/ibl-texture.js.map +1 -1
  34. package/dist/environment/scene-ar-environment.js.map +1 -1
  35. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  36. package/dist/environment-raycast/raycast-target.js.map +1 -1
  37. package/dist/grab/distance-grabbable.js.map +1 -1
  38. package/dist/grab/grab-helpers.js.map +1 -1
  39. package/dist/grab/grab-system.js.map +1 -1
  40. package/dist/grab/grab-warnings.js.map +1 -1
  41. package/dist/grab/grabbed.js.map +1 -1
  42. package/dist/grab/handles.js.map +1 -1
  43. package/dist/grab/index.js.map +1 -1
  44. package/dist/grab/one-hand-grabbable.js.map +1 -1
  45. package/dist/grab/pointer-events-patch.js.map +1 -1
  46. package/dist/grab/two-hands-grabbable.js.map +1 -1
  47. package/dist/index.js +3 -3
  48. package/dist/index.js.map +1 -1
  49. package/dist/init/browser-camera.js.map +1 -1
  50. package/dist/init/player-camera.js.map +1 -1
  51. package/dist/init/session-grant.js.map +1 -1
  52. package/dist/init/world-initializer.js +2 -3
  53. package/dist/init/world-initializer.js.map +1 -1
  54. package/dist/init/xr.js.map +1 -1
  55. package/dist/input/canvas-pointer-system.js.map +1 -1
  56. package/dist/input/input-actions.js.map +1 -1
  57. package/dist/input/input-manager.js.map +1 -1
  58. package/dist/input/input-system.js.map +1 -1
  59. package/dist/input/state-tags.js.map +1 -1
  60. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  61. package/dist/input/stateful-keyboard.js.map +1 -1
  62. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  63. package/dist/layers/xr-layer-init.js.map +1 -1
  64. package/dist/layers/xr-layer-state.js.map +1 -1
  65. package/dist/layers/xr-layer-system.js.map +1 -1
  66. package/dist/layers/xr-layer-transform.js.map +1 -1
  67. package/dist/layers/xr-quad-layer.js.map +1 -1
  68. package/dist/level/level-component-applier.js.map +1 -1
  69. package/dist/level/level-player-rig.js.map +1 -1
  70. package/dist/level/level-root.js.map +1 -1
  71. package/dist/level/level-scene-environment.js.map +1 -1
  72. package/dist/level/level-scene-json-importer.js.map +1 -1
  73. package/dist/level/level-scene-material.js.map +1 -1
  74. package/dist/level/level-scene-object.js.map +1 -1
  75. package/dist/level/level-scene-primitive.js.map +1 -1
  76. package/dist/level/level-system.js.map +1 -1
  77. package/dist/level/level-tag.js.map +1 -1
  78. package/dist/lighting/light-binding.js.map +1 -1
  79. package/dist/lighting/light-components.js.map +1 -1
  80. package/dist/lighting/light-system.js.map +1 -1
  81. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  82. package/dist/locomotion/locomotion-environment.js.map +1 -1
  83. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  84. package/dist/locomotion/locomotion.js.map +1 -1
  85. package/dist/locomotion/materials/line.js.map +1 -1
  86. package/dist/locomotion/slide.js.map +1 -1
  87. package/dist/locomotion/teleport.js.map +1 -1
  88. package/dist/locomotion/turn.js.map +1 -1
  89. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  90. package/dist/mcp/mcp-runtime.js.map +1 -1
  91. package/dist/mcp/scene-tools.js.map +1 -1
  92. package/dist/mcp/ui-debug-tools.js.map +1 -1
  93. package/dist/physics/physics-runtime.js.map +1 -1
  94. package/dist/physics/physics-system.js.map +1 -1
  95. package/dist/physics/physics-transport.js.map +1 -1
  96. package/dist/physics/physics-worker-protocol.js.map +1 -1
  97. package/dist/physics/physics-worker-utils.js.map +1 -1
  98. package/dist/physics/physics-worker.js.map +1 -1
  99. package/dist/physics/physicsBody.js.map +1 -1
  100. package/dist/physics/physicsManipulation.js.map +1 -1
  101. package/dist/physics/physicsShape.js.map +1 -1
  102. package/dist/physics/utils.js.map +1 -1
  103. package/dist/project/normalize.js.map +1 -1
  104. package/dist/project/paths.js.map +1 -1
  105. package/dist/project/types.js.map +1 -1
  106. package/dist/project/validation.js.map +1 -1
  107. package/dist/runtime/three.js.map +1 -1
  108. package/dist/scene-understanding/anchor.js.map +1 -1
  109. package/dist/scene-understanding/mesh.js.map +1 -1
  110. package/dist/scene-understanding/plane.js.map +1 -1
  111. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  112. package/dist/transform/synced-euler.js.map +1 -1
  113. package/dist/transform/synced-quaternion.js.map +1 -1
  114. package/dist/transform/synced-vector3.js.map +1 -1
  115. package/dist/transform/transform-component.js.map +1 -1
  116. package/dist/transform/transform-utils.js.map +1 -1
  117. package/dist/transform/transform.js.map +1 -1
  118. package/dist/ui/document.js.map +1 -1
  119. package/dist/ui/follow-component.js.map +1 -1
  120. package/dist/ui/follow.js.map +1 -1
  121. package/dist/ui/panel-components.js.map +1 -1
  122. package/dist/ui/screenspace-component.js.map +1 -1
  123. package/dist/ui/screenspace.js.map +1 -1
  124. package/dist/ui/ui.js.map +1 -1
  125. package/dist/ui/uikitml-asset.js.map +1 -1
  126. package/dist/ui/uikitml.js.map +1 -1
  127. package/dist/version.d.ts +1 -1
  128. package/dist/version.js +1 -1
  129. package/dist/version.js.map +1 -1
  130. package/dist/visibility/visibility-component.js.map +1 -1
  131. package/dist/visibility/visibility.js.map +1 -1
  132. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"camera-system.js","sources":["../../src/camera/camera-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera-system.js","sources":["../../src/camera/camera-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 { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { VisibilityState } from '../ecs/world.js';\nimport { LinearFilter, VideoTexture } from '../runtime/three.js';\nimport { CameraSource } from './camera-source.js';\nimport { CameraUtils } from './camera-utils.js';\nimport {\n CameraFacing,\n CameraState,\n type CameraFacingType,\n type CameraStateType,\n} from './types.js';\n\n/**\n * CameraSystem - Manages camera stream lifecycle for CameraSource components\n * Automatically starts streams when the world is visible, including browser\n * non-immersive mode and immersive XR sessions.\n */\nexport class CameraSystem extends createSystem({\n cameras: { required: [CameraSource] },\n}) {\n private readonly operationIds = new WeakMap<Entity, number>();\n\n init() {\n const stopIfDocumentHidden = () => {\n if (document.visibilityState === 'hidden') {\n this.stopAllCameras();\n }\n };\n const hasDocumentVisibility =\n typeof document !== 'undefined' &&\n typeof document.addEventListener === 'function';\n if (hasDocumentVisibility) {\n document.addEventListener('visibilitychange', stopIfDocumentHidden);\n }\n\n this.cleanupFuncs.push(\n this.world.visibilityState.subscribe((state) => {\n if (state === VisibilityState.Hidden) {\n this.stopAllCameras();\n }\n }),\n this.queries.cameras.subscribe('disqualify', (entity) => {\n this.stopCamera(entity);\n }),\n () => {\n if (hasDocumentVisibility) {\n document.removeEventListener(\n 'visibilitychange',\n stopIfDocumentHidden,\n );\n }\n this.stopAllCameras();\n },\n );\n }\n\n update() {\n // CameraSource uses browser media APIs and works outside immersive XR.\n const documentHidden =\n typeof document !== 'undefined' && document.visibilityState === 'hidden';\n if (\n documentHidden ||\n this.world.visibilityState.value === VisibilityState.Hidden\n ) {\n return;\n }\n\n for (const entity of this.queries.cameras.entities) {\n const state = entity.getValue(CameraSource, 'state') as CameraStateType;\n\n // Error is terminal until callers explicitly set the source inactive.\n if (state === CameraState.Inactive) {\n this.startCamera(entity);\n }\n }\n }\n\n /**\n * Start camera stream for an entity\n * Async operation - sets state to Starting, then Active when complete\n * Users should check state or null-check texture/videoElement before using\n *\n * Checks an operation generation after each async operation so a restarted\n * camera cannot be overwritten by an older request that resolves later.\n */\n private async startCamera(entity: Entity) {\n const operationId = this.beginOperation(entity);\n this.releaseCameraResources(entity);\n\n // Set state to Starting to prevent duplicate attempts\n entity.setValue(CameraSource, 'state', CameraState.Starting);\n let stream: MediaStream | null = null;\n let video: HTMLVideoElement | null = null;\n let texture: VideoTexture | null = null;\n\n try {\n let deviceId = entity.getValue(CameraSource, 'deviceId') as string;\n\n // Auto-select camera if no deviceId provided\n if (!deviceId) {\n const devices = await CameraUtils.getDevices();\n\n if (!this.isCurrentStart(entity, operationId)) {\n return; // Aborted\n }\n\n const facing = entity.getValue(\n CameraSource,\n 'facing',\n ) as CameraFacingType;\n\n if (facing === CameraFacing.Unknown) {\n // Unknown = any camera is fine, use first available\n if (devices.length > 0) {\n deviceId = devices[0].deviceId;\n entity.setValue(CameraSource, 'deviceId', deviceId);\n } else {\n console.error('No cameras available');\n entity.setValue(CameraSource, 'state', CameraState.Error);\n return;\n }\n } else {\n // Specific facing requested - must match or fail\n const selected = CameraUtils.findByFacing(devices, facing);\n\n if (selected) {\n deviceId = selected.deviceId;\n entity.setValue(CameraSource, 'deviceId', deviceId);\n } else {\n const facingStr = facing === CameraFacing.Back ? 'back' : 'front';\n console.error(\n `No ${facingStr}-facing camera available (found ${devices.length} camera(s))`,\n );\n entity.setValue(CameraSource, 'state', CameraState.Error);\n return;\n }\n }\n }\n\n // Get stream constraints\n const width = entity.getValue(CameraSource, 'width');\n const height = entity.getValue(CameraSource, 'height');\n const frameRate = entity.getValue(CameraSource, 'frameRate');\n\n // Request camera stream\n stream = await navigator.mediaDevices.getUserMedia({\n video: {\n deviceId: { exact: deviceId },\n width: { ideal: width as number | undefined },\n height: { ideal: height as number | undefined },\n frameRate: { ideal: frameRate as number | undefined },\n },\n });\n\n if (!this.isCurrentStart(entity, operationId)) {\n // Aborted - clean up the stream we just created\n this.cleanupCameraResources(stream, null, null);\n return;\n }\n\n // Create video element\n const createdVideo = document.createElement('video');\n video = createdVideo;\n createdVideo.setAttribute('playsinline', '');\n createdVideo.setAttribute('autoplay', '');\n createdVideo.muted = true;\n createdVideo.srcObject = stream;\n\n // Wait for video to be ready\n await new Promise<void>((resolve, reject) => {\n const onCanPlay = () => {\n createdVideo.removeEventListener('canplay', onCanPlay);\n createdVideo.removeEventListener('error', onError);\n resolve();\n };\n\n const onError = (error: Event) => {\n createdVideo.removeEventListener('canplay', onCanPlay);\n createdVideo.removeEventListener('error', onError);\n reject(error);\n };\n\n createdVideo.addEventListener('canplay', onCanPlay);\n createdVideo.addEventListener('error', onError);\n });\n\n if (!this.isCurrentStart(entity, operationId)) {\n // Aborted - clean up everything\n this.cleanupCameraResources(stream, video, null);\n return;\n }\n\n // Start playback\n await createdVideo.play();\n\n // Create VideoTexture\n texture = new VideoTexture(createdVideo);\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n if (!this.isCurrentStart(entity, operationId)) {\n // Aborted at the last moment - clean up everything\n this.cleanupCameraResources(stream, video, texture);\n return;\n }\n\n // Commit all resources atomically\n entity.setValue(CameraSource, 'stream', stream);\n entity.setValue(CameraSource, 'videoElement', video);\n entity.setValue(CameraSource, 'texture', texture);\n entity.setValue(CameraSource, 'state', CameraState.Active);\n } catch (error) {\n this.cleanupCameraResources(stream, video, texture);\n if (this.isCurrentStart(entity, operationId)) {\n console.error('Failed to start camera:', error);\n entity.setValue(CameraSource, 'stream', null);\n entity.setValue(CameraSource, 'videoElement', null);\n entity.setValue(CameraSource, 'texture', null);\n entity.setValue(CameraSource, 'state', CameraState.Error);\n }\n }\n }\n\n /**\n * Stop camera stream for an entity\n */\n private stopCamera(entity: Entity) {\n this.beginOperation(entity);\n this.releaseCameraResources(entity);\n entity.setValue(CameraSource, 'state', CameraState.Inactive);\n }\n\n private releaseCameraResources(entity: Entity): void {\n const stream = entity.getValue(\n CameraSource,\n 'stream',\n ) as MediaStream | null;\n const video = entity.getValue(\n CameraSource,\n 'videoElement',\n ) as HTMLVideoElement | null;\n const texture = entity.getValue(\n CameraSource,\n 'texture',\n ) as VideoTexture | null;\n\n this.cleanupCameraResources(stream, video, texture);\n\n entity.setValue(CameraSource, 'stream', null);\n entity.setValue(CameraSource, 'videoElement', null);\n entity.setValue(CameraSource, 'texture', null);\n }\n\n private stopAllCameras(): void {\n for (const entity of this.queries.cameras.entities) {\n this.stopCamera(entity);\n }\n }\n\n private beginOperation(entity: Entity): number {\n const operationId = (this.operationIds.get(entity) ?? 0) + 1;\n this.operationIds.set(entity, operationId);\n return operationId;\n }\n\n private isCurrentStart(entity: Entity, operationId: number): boolean {\n return (\n this.operationIds.get(entity) === operationId &&\n entity.getValue(CameraSource, 'state') === CameraState.Starting\n );\n }\n\n /**\n * Clean up camera resources (stream, video element, texture)\n */\n private cleanupCameraResources(\n stream: MediaStream | null,\n video: HTMLVideoElement | null,\n texture: VideoTexture | null,\n ) {\n if (stream) {\n stream.getTracks().forEach((track) => track.stop());\n }\n if (video) {\n video.pause();\n video.srcObject = null;\n }\n if (texture) {\n texture.dispose();\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"camera-utils.js","sources":["../../src/camera/camera-utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera-utils.js","sources":["../../src/camera/camera-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 { Entity } from '../ecs/entity.js';\nimport { CameraSource } from './camera-source.js';\nimport {\n CameraFacing,\n CameraState,\n type CameraDeviceInfo,\n type CameraFacingType,\n} from './types.js';\n\n/**\n * CameraUtils - Static utilities for camera discovery and selection\n * Handles permission requests and device enumeration with caching\n */\nexport class CameraUtils {\n private static cachedDevices: CameraDeviceInfo[] | null = null;\n\n /**\n * Get available camera devices\n *\n * On first call or if refresh=true:\n * - Requests camera permission (if not granted)\n * - Enumerates all video input devices\n * - Caches results for subsequent calls\n *\n * On subsequent calls with refresh=false:\n * - Returns cached results immediately\n *\n * @param refresh - Force re-enumeration (useful for hot-plugged devices)\n * @returns Array of available camera devices\n */\n static async getDevices(refresh = false): Promise<CameraDeviceInfo[]> {\n // Return cache if available and not forcing refresh\n if (this.cachedDevices && !refresh) {\n return this.cachedDevices;\n }\n\n try {\n // Request permission by getting a temporary stream\n const tempStream = await navigator.mediaDevices.getUserMedia({\n video: true,\n });\n\n // Immediately stop the stream - we just needed permission\n tempStream.getTracks().forEach((track) => track.stop());\n\n // Enumerate all video devices\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter((d) => d.kind === 'videoinput');\n\n // Map to our interface with facing detection\n this.cachedDevices = videoDevices.map((device) => {\n const label = device.label.toLowerCase();\n let facing: CameraFacingType = CameraFacing.Unknown;\n\n if (\n label.includes('back') ||\n label.includes('environment') ||\n label.includes('rear')\n ) {\n facing = CameraFacing.Back;\n } else if (\n label.includes('front') ||\n label.includes('user') ||\n label.includes('face')\n ) {\n facing = CameraFacing.Front;\n }\n\n return {\n deviceId: device.deviceId,\n label: device.label,\n facing,\n };\n });\n\n return this.cachedDevices;\n } catch (error) {\n console.error('Failed to enumerate camera devices:', error);\n throw error;\n }\n }\n\n /**\n * Find camera by facing direction from device list\n */\n static findByFacing(\n devices: CameraDeviceInfo[],\n facing: CameraFacingType,\n ): CameraDeviceInfo | null {\n return devices.find((d) => d.facing === facing) || null;\n }\n\n /**\n * Check if camera permission is granted (doesn't request)\n */\n static async hasPermission(): Promise<boolean> {\n try {\n const result = await navigator.permissions.query({\n name: 'camera' as PermissionName,\n });\n return result.state === 'granted';\n } catch {\n // Permissions API not supported\n return false;\n }\n }\n\n /**\n * Restart a camera source after changing its configuration or handling an\n * error. CameraSystem releases the previous resources before starting again.\n */\n static restart(entity: Entity): void {\n entity.setValue(CameraSource, 'state', CameraState.Inactive);\n }\n\n /**\n * Capture current video frame as a canvas\n * Returns canvas at full video resolution, ready for processing\n *\n * @param entity - Entity with CameraSource component\n * @returns HTMLCanvasElement or null if camera not ready\n *\n * @example\n * // Simple texture creation\n * const canvas = CameraUtils.captureFrame(cameraEntity);\n * if (canvas) {\n * const texture = new CanvasTexture(canvas);\n * }\n *\n * @example\n * // With post-processing\n * const canvas = CameraUtils.captureFrame(cameraEntity);\n * if (canvas) {\n * const ctx = canvas.getContext('2d');\n * ctx.filter = 'blur(2px)';\n * const texture = new CanvasTexture(canvas);\n * }\n */\n static captureFrame(entity: Entity): HTMLCanvasElement | null {\n // Get video element from CameraSource component\n const videoElement = entity.getValue(\n CameraSource,\n 'videoElement',\n ) as HTMLVideoElement | null;\n\n if (!videoElement) {\n return null;\n }\n\n // Validate video has valid dimensions\n if (videoElement.videoWidth === 0 || videoElement.videoHeight === 0) {\n return null;\n }\n\n // Create canvas at video resolution\n const canvas = document.createElement('canvas');\n canvas.width = videoElement.videoWidth;\n canvas.height = videoElement.videoHeight;\n\n // Draw current video frame to canvas\n const ctx = canvas.getContext('2d', { colorSpace: 'srgb' });\n if (!ctx) {\n return null;\n }\n\n ctx.drawImage(videoElement, 0, 0);\n\n return canvas;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../src/camera/types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAEI,MAAM,YAAY,GAAG;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,SAAS;;AAWpB;;AAEG;AACI,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../src/camera/types.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\nexport const CameraFacing = {\n Back: 'back',\n Front: 'front',\n Unknown: 'unknown',\n} as const;\n\nexport type CameraFacingType = (typeof CameraFacing)[keyof typeof CameraFacing];\n\nexport interface CameraDeviceInfo {\n deviceId: string;\n label: string;\n facing: CameraFacingType;\n}\n\n/**\n * Camera stream state lifecycle\n */\nexport const CameraState = {\n Inactive: 'inactive', // Not started\n Starting: 'starting', // Async initialization in progress\n Active: 'active', // Stream running\n Error: 'error', // Failed to start\n} as const;\n\nexport type CameraStateType = (typeof CameraState)[keyof typeof CameraState];\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAEI,MAAM,YAAY,GAAG;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,SAAS;;AAWpB;;AAEG;AACI,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"depth-occludable.js","sources":["../../src/depth/depth-occludable.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;AACO,MAAM,oBAAoB,GAAG;;AAElC,IAAA,aAAa,EAAE,eAAe;;AAE9B,IAAA,aAAa,EAAE,eAAe;;AAE9B,IAAA,mBAAmB,EAAE,qBAAqB;;AAG5C;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,eAAe,GAAG,eAAe,CAC5C,iBAAiB,EACjB;AACE,IAAA,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,oBAAoB,CAAC,aAAa;AAC5C,KAAA;CACF,EACD,iDAAiD;;;;"}
1
+ {"version":3,"file":"depth-occludable.js","sources":["../../src/depth/depth-occludable.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/** Occlusion shader mode for {@link DepthOccludable}. @category Depth Sensing */\nexport const OcclusionShadersMode = {\n /** Soft occlusion with 13-tap blur sampling for smooth edges. */\n SoftOcclusion: 'SoftOcclusion',\n /** Hard occlusion with a single depth sample per fragment. */\n HardOcclusion: 'HardOcclusion',\n /** MinMax soft occlusion with depth preprocessing for edge-aware smooth edges. */\n MinMaxSoftOcclusion: 'MinMaxSoftOcclusion',\n};\n\n/**\n * Component for entities that should be occluded by real-world depth.\n * Add this component to entities that should be hidden when behind real-world surfaces.\n * NOTE: The depth occlusion feature may not be compatible with custom shaders.\n *\n * @example\n * ```ts\n * // Create an entity with soft occlusion (default)\n * const entity = world.createTransformEntity(mesh);\n * entity.addComponent(DepthOccludable);\n *\n * // Create an entity with hard occlusion (no blur)\n * entity.addComponent(DepthOccludable, { mode: OcclusionShadersMode.HardOcclusion });\n * ```\n *\n * @category Depth Sensing\n */\nexport const DepthOccludable = createComponent(\n 'DepthOccludable',\n {\n mode: {\n type: Types.Enum,\n enum: OcclusionShadersMode,\n default: OcclusionShadersMode.SoftOcclusion,\n },\n },\n 'Entity that can be occluded by real-world depth',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;AACO,MAAM,oBAAoB,GAAG;;AAElC,IAAA,aAAa,EAAE,eAAe;;AAE9B,IAAA,aAAa,EAAE,eAAe;;AAE9B,IAAA,mBAAmB,EAAE,qBAAqB;;AAG5C;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,eAAe,GAAG,eAAe,CAC5C,iBAAiB,EACjB;AACE,IAAA,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,oBAAoB,CAAC,aAAa;AAC5C,KAAA;CACF,EACD,iDAAiD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"depth-sensing-system.js","sources":["../../src/depth/depth-sensing-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"depth-sensing-system.js","sources":["../../src/depth/depth-sensing-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 { type IUniform, Mesh, Texture, Vector2 } from '../runtime/three.js';\nimport { DepthOccludable, OcclusionShadersMode } from './depth-occludable.js';\nimport { DepthTextures } from './depth-textures.js';\nimport { DepthPreprocessingPass } from './occlusion/preprocessing-pass.js';\n\ntype ShaderUniforms = { [uniform: string]: IUniform };\n\ninterface Shader {\n uniforms: ShaderUniforms;\n defines?: { [key: string]: unknown };\n vertexShader: string;\n fragmentShader: string;\n}\n\n/**\n * DepthSensingSystem - Manages WebXR depth sensing and occlusion.\n *\n * @remarks\n * - Automatically retrieves and processes depth data from WebXR sessions.\n * - Supports both CPU-optimized and GPU-optimized depth sensing.\n * - Enables occlusion of virtual objects behind real-world surfaces.\n * - Requires WebXR session feature: 'depth-sensing'.\n * NOTE: The depth occlusion feature may not be compatible with custom shaders.\n *\n * @example Basic depth sensing setup\n * ```ts\n * // Configure world with depth sensing\n * World.create(document.getElementById('scene-container'), {\n * xr: {\n * sessionMode: SessionMode.ImmersiveAR,\n * features: {\n * depthSensing: { usage: 'gpu-optimized', format: 'float32' }\n * },\n * }\n * })\n *\n * // Add the depth sensing system\n * world.registerSystem(DepthSensingSystem)\n * ```\n *\n * @example Enable occlusion for an object\n * ```ts\n * const cube = world.createTransformEntity(cubeObject)\n * cube.addComponent(DepthOccludable) // Will be occluded by real-world geometry\n * ```\n *\n * @category Depth Sensing\n * @see {@link DepthOccludable}\n */\nexport class DepthSensingSystem extends createSystem(\n {\n occludables: { required: [DepthOccludable] },\n },\n {\n enableOcclusion: { type: Types.Boolean, default: true },\n enableDepthTexture: { type: Types.Boolean, default: true },\n useFloat32: { type: Types.Boolean, default: true },\n blurRadius: { type: Types.Float32, default: 20.0 },\n },\n) {\n private depthFeatureEnabled: boolean | undefined;\n\n // Depth data storage\n cpuDepthData: XRCPUDepthInformation[] = [];\n gpuDepthData: XRWebGLDepthInformation[] = [];\n private hasCurrentFrameDepthData = false;\n private depthTextures?: DepthTextures;\n\n // Occlusion\n private entityShaderMap = new Map<Entity, Set<ShaderUniforms>>();\n private readonly viewportSize = new Vector2();\n private preprocessingPass?: DepthPreprocessingPass;\n private minMaxEntityCount = 0;\n\n /**\n * Get the raw value to meters conversion factor.\n */\n get rawValueToMeters(): number {\n if (this.cpuDepthData.length) {\n return this.cpuDepthData[0].rawValueToMeters;\n } else if (this.gpuDepthData.length) {\n return this.gpuDepthData[0].rawValueToMeters;\n }\n return 0;\n }\n\n init(): void {\n const onSessionStart = () => {\n this.cleanup();\n this.updateEnabledFeatures(this.xrManager.getSession());\n };\n const onSessionEnd = () => {\n this.cleanup();\n };\n this.xrManager.addEventListener('sessionstart', onSessionStart);\n this.xrManager.addEventListener('sessionend', onSessionEnd);\n this.cleanupFuncs.push(() => {\n this.xrManager.removeEventListener('sessionstart', onSessionStart);\n this.xrManager.removeEventListener('sessionend', onSessionEnd);\n });\n\n // React to config changes. subscribe() returns an unsubscribe function;\n // register it for teardown so the callback (and its closure over `this`)\n // does not outlive the system.\n this.cleanupFuncs.push(\n this.config.enableDepthTexture.subscribe((enabled) => {\n if (enabled && !this.depthTextures) {\n this.initializeDepthTextures();\n }\n }),\n );\n\n this.cleanupFuncs.push(\n this.queries.occludables.subscribe(\n 'qualify',\n (entity: Entity) => {\n this.attachOcclusionToEntity(entity);\n if (\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.MinMaxSoftOcclusion\n ) {\n this.minMaxEntityCount++;\n }\n },\n true,\n ),\n this.queries.occludables.subscribe('disqualify', (entity: Entity) => {\n if (\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.MinMaxSoftOcclusion\n ) {\n this.minMaxEntityCount--;\n }\n this.detachOcclusionFromEntity(entity);\n }),\n );\n\n // Release GPU-backed resources on system teardown. `depthTextures` is\n // created once (the enableDepthTexture subscription fires immediately) and\n // reused across XR sessions, so it must be disposed on destroy() rather\n // than in cleanup() (sessionend) — disposing it per session would leave a\n // subsequent session with no depth textures. preprocessingPass is normally\n // released in cleanup() on sessionend; dispose it here too in case the\n // system is torn down mid-session.\n this.cleanupFuncs.push(() => {\n this.clearAllOcclusionUniforms();\n this.depthTextures?.dispose();\n this.depthTextures = undefined;\n this.preprocessingPass?.dispose();\n this.preprocessingPass = undefined;\n });\n }\n\n private initializeDepthTextures(): void {\n this.depthTextures = new DepthTextures(this.config.useFloat32.value);\n }\n\n /**\n * Injects inline depth occlusion shader code into all materials of an entity.\n */\n private attachOcclusionToEntity(entity: Entity): void {\n const object3D = entity.object3D;\n if (!object3D) {\n return;\n }\n\n const entityUniforms = new Set<ShaderUniforms>();\n this.entityShaderMap.set(entity, entityUniforms);\n\n object3D.traverse((child) => {\n if (!(child instanceof Mesh)) {\n return;\n }\n\n const materials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n\n for (const material of materials) {\n if (!material) {\n continue;\n }\n material.transparent = true;\n const existingCallback = material.onBeforeCompile?.bind(material);\n material.onBeforeCompile = (shader: any, renderer: any) => {\n if (existingCallback) {\n existingCallback(shader, renderer);\n }\n // Only inject occlusion if not already present\n if (!shader.uniforms.occlusionEnabled) {\n DepthSensingSystem.addOcclusionToShader(shader);\n }\n material.userData.shader = shader;\n entityUniforms.add(shader.uniforms);\n };\n material.needsUpdate = true;\n }\n });\n }\n\n private detachOcclusionFromEntity(entity: Entity): void {\n const entityUniforms = this.entityShaderMap.get(entity);\n\n if (entityUniforms) {\n this.clearOcclusionUniforms(entityUniforms);\n }\n\n this.entityShaderMap.delete(entity);\n }\n\n private clearOcclusionUniforms(\n entityUniforms: Iterable<ShaderUniforms>,\n ): void {\n for (const uniforms of entityUniforms) {\n uniforms.occlusionEnabled.value = false;\n uniforms.uXRDepthTextureArray.value = null;\n uniforms.uMinMaxTexture0.value = null;\n uniforms.uMinMaxTexture1.value = null;\n }\n }\n\n private clearAllOcclusionUniforms(): void {\n for (const entityUniforms of this.entityShaderMap.values()) {\n this.clearOcclusionUniforms(entityUniforms);\n }\n }\n\n /**\n * Modifies a material's shader in-place to incorporate inline depth-based\n * occlusion. Compares the virtual fragment's view-space depth against the\n * real-world depth from the XR depth texture array.\n * Both GPU-optimized (ExternalTexture) and CPU-optimized (DataArrayTexture)\n * paths use sampler2DArray with VIEW_ID for correct stereo depth sampling.\n * @param shader - The shader object provided by onBeforeCompile.\n */\n private static addOcclusionToShader(shader: Shader): void {\n shader.uniforms.occlusionEnabled = { value: false };\n shader.uniforms.uXRDepthTextureArray = { value: null };\n shader.uniforms.uRawValueToMeters = { value: 0.001 };\n shader.uniforms.uIsGPUDepth = { value: false };\n shader.uniforms.uDepthNear = { value: 0 };\n shader.uniforms.uViewportSize = { value: new Vector2() };\n shader.uniforms.uOcclusionBlurRadius = { value: 20.0 };\n shader.uniforms.uOcclusionHardMode = { value: false };\n shader.uniforms.uOcclusionMinMaxMode = { value: false };\n shader.uniforms.uMinMaxTexture0 = { value: null };\n shader.uniforms.uMinMaxTexture1 = { value: null };\n\n shader.defines = {\n ...(shader.defines ?? {}),\n USE_UV: true,\n };\n\n // Vertex shader: compute view-space depth for occlusion comparison\n shader.vertexShader = shader.vertexShader\n .replace(\n '#include <common>',\n ['varying float vOcclusionViewDepth;', '#include <common>'].join('\\n'),\n )\n .replace(\n '#include <fog_vertex>',\n [\n '#include <fog_vertex>',\n 'vec4 occlusion_view_pos = modelViewMatrix * vec4(position, 1.0);',\n 'vOcclusionViewDepth = -occlusion_view_pos.z;',\n ].join('\\n'),\n );\n\n // Fragment shader: sample XR depth array and compare against virtual depth\n shader.fragmentShader = shader.fragmentShader\n .replace(\n 'uniform vec3 diffuse;',\n [\n 'uniform vec3 diffuse;',\n 'uniform bool occlusionEnabled;',\n 'uniform float uRawValueToMeters;',\n 'uniform bool uIsGPUDepth;',\n 'uniform float uDepthNear;',\n 'uniform vec2 uViewportSize;',\n 'uniform float uOcclusionBlurRadius;',\n 'uniform bool uOcclusionHardMode;',\n 'uniform bool uOcclusionMinMaxMode;',\n 'uniform sampler2D uMinMaxTexture0;',\n 'uniform sampler2D uMinMaxTexture1;',\n 'varying float vOcclusionViewDepth;',\n '',\n 'uniform sampler2DArray uXRDepthTextureArray;',\n '',\n '// Fallback for non-multiview sessions',\n '#ifndef VIEW_ID',\n '#define VIEW_ID 0',\n '#endif',\n '',\n 'float OcclusionDepthGetMeters(in vec2 uv) {',\n ' float textureValue = texture(uXRDepthTextureArray, vec3(uv.x, uv.y, float(VIEW_ID))).r;',\n ' if (uIsGPUDepth) {',\n ' return uRawValueToMeters * uDepthNear / (1.0 - textureValue);',\n ' }',\n ' return textureValue * uRawValueToMeters;',\n '}',\n '',\n 'float OcclusionGetSample(in vec2 depthUV, in vec2 offset) {',\n ' float sampleDepth = OcclusionDepthGetMeters(depthUV + offset);',\n ' return smoothstep(0.0, 0.05, sampleDepth - vOcclusionViewDepth);',\n '}',\n ].join('\\n'),\n )\n .replace(\n 'vec4 diffuseColor = vec4( diffuse, opacity );',\n [\n 'vec4 diffuseColor = vec4( diffuse, opacity );',\n 'if (occlusionEnabled) {',\n ' vec2 screenUV = gl_FragCoord.xy / uViewportSize;',\n ' vec2 depthUV = uIsGPUDepth ? screenUV : vec2(screenUV.x, 1.0 - screenUV.y);',\n ' float occlusion_value;',\n ' if (uOcclusionMinMaxMode) {',\n ' // MinMax soft occlusion — two-cluster edge-aware blending',\n ' vec4 mmData;',\n ' if (uint(VIEW_ID) == 0u) {',\n ' mmData = texture2D(uMinMaxTexture0, depthUV);',\n ' } else {',\n ' mmData = texture2D(uMinMaxTexture1, depthUV);',\n ' }',\n ' float minAvgDepth = mmData.r;',\n ' float maxAvgDepth = mmData.g;',\n ' float midAvgDepth = mmData.r + mmData.b;',\n ' float fadeRange = vOcclusionViewDepth * 0.04;',\n ' float fadeRangeInv = 1.0 / max(fadeRange, 0.001);',\n ' vec3 envDepths = vec3(minAvgDepth, maxAvgDepth, midAvgDepth);',\n ' vec3 occAlphas = clamp((envDepths - vOcclusionViewDepth) * fadeRangeInv, 0.0, 1.0);',\n ' occlusion_value = occAlphas.z;',\n ' float alphaDiff = occAlphas.y - occAlphas.x;',\n ' if (alphaDiff > 0.03) {',\n ' float denom = mmData.a;',\n ' float interp = denom > 0.001 ? mmData.b / denom : 0.5;',\n ' occlusion_value = mix(occAlphas.x, occAlphas.y, smoothstep(0.2, 0.8, interp));',\n ' }',\n ' } else if (uOcclusionHardMode) {',\n ' occlusion_value = OcclusionGetSample(depthUV, vec2(0.0));',\n ' } else {',\n ' vec2 texelSize = uOcclusionBlurRadius / uViewportSize;',\n ' // 13-tap two-ring sampling pattern for smooth occlusion edges',\n ' // Center sample',\n ' occlusion_value = OcclusionGetSample(depthUV, vec2(0.0));',\n ' // Inner ring: 6 samples at 40% radius, 60 degree intervals',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.4, 0.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.2, 0.346));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.2, 0.346));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.4, 0.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.2, -0.346));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.2, -0.346));',\n ' // Outer ring: 6 samples at full radius, offset 30 degrees',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.866, 0.5));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.0, 1.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.866, 0.5));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.866, -0.5));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.0, -1.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.866, -0.5));',\n ' occlusion_value /= 13.0;',\n ' }',\n ' if (occlusion_value < 0.01) {',\n ' discard;',\n ' }',\n ' diffuseColor.a *= occlusion_value;',\n '}',\n ].join('\\n'),\n );\n }\n\n private cleanup(): void {\n this.depthFeatureEnabled = undefined;\n this.cpuDepthData = [];\n this.gpuDepthData = [];\n this.hasCurrentFrameDepthData = false;\n\n // The occlusion materials continue rendering after an immersive session\n // ends. Clear every session-owned texture before disposing the min/max\n // render targets, otherwise WebGL attempts to bind those deleted textures\n // in the non-immersive frame (and again when the next session starts).\n this.clearAllOcclusionUniforms();\n\n this.preprocessingPass?.dispose();\n this.preprocessingPass = undefined;\n }\n\n private updateEnabledFeatures(xrSession: XRSession | null): void {\n if (!xrSession) {\n return;\n }\n\n const enabledFeatures = xrSession.enabledFeatures;\n this.depthFeatureEnabled = enabledFeatures?.includes('depth-sensing');\n\n if (!this.depthFeatureEnabled) {\n console.log(\n 'Warning: depth-sensing feature not enabled for WebXR session. Depth sensing features are disabled.',\n );\n }\n }\n\n update(): void {\n if (!this.depthFeatureEnabled) {\n return;\n }\n\n // XR depth information is frame-scoped. A runtime may temporarily return\n // no depth data while the session remains active, so never carry readiness\n // (or the public depth information objects) across animation frames.\n this.hasCurrentFrameDepthData = false;\n this.cpuDepthData.length = 0;\n this.gpuDepthData.length = 0;\n\n const frame = this.xrFrame;\n if (frame) {\n this.updateLocalDepth(frame);\n }\n\n if (!this.hasCurrentFrameDepthData) {\n this.clearAllOcclusionUniforms();\n return;\n }\n\n if (this.config.enableOcclusion.value) {\n this.runMinMaxPreprocessing();\n this.updateOcclusionUniforms();\n } else {\n this.clearAllOcclusionUniforms();\n }\n }\n\n /**\n * Runs the MinMax depth preprocessing pass if any entity uses MinMaxSoftOcclusion.\n * Renders a fullscreen pass per eye that computes min/max/avg depth in a 4×4\n * neighborhood, outputting to per-view 2D render targets.\n */\n private get isGPUDepth(): boolean {\n const session = this.xrManager.getSession();\n return session?.depthUsage === 'gpu-optimized';\n }\n\n private getDepthTextureArray(): Texture | undefined {\n if (!this.hasCurrentFrameDepthData) {\n return undefined;\n }\n\n return this.isGPUDepth\n ? this.depthTextures?.getNativeTexture()\n : this.depthTextures?.getDataArrayTexture();\n }\n\n private runMinMaxPreprocessing(): void {\n if (this.minMaxEntityCount === 0) {\n return;\n }\n\n const depthTextureArray = this.getDepthTextureArray();\n if (!depthTextureArray) {\n return;\n }\n\n const isGPUDepth = this.isGPUDepth;\n const depthNear =\n (this.gpuDepthData[0] as unknown as { depthNear: number } | undefined)\n ?.depthNear ?? 0;\n\n if (!this.preprocessingPass) {\n this.preprocessingPass = new DepthPreprocessingPass();\n }\n\n this.preprocessingPass.setDepthTexture(\n depthTextureArray,\n this.rawValueToMeters,\n isGPUDepth,\n depthNear,\n );\n\n // Determine depth texture dimensions\n let depthWidth: number;\n let depthHeight: number;\n if (this.cpuDepthData[0]) {\n depthWidth = this.cpuDepthData[0].width;\n depthHeight = this.cpuDepthData[0].height;\n } else if (this.gpuDepthData[0]) {\n // GPU depth textures have their own resolution (typically ~256×192),\n // which is much smaller than the drawing buffer.\n depthWidth = this.gpuDepthData[0].width;\n depthHeight = this.gpuDepthData[0].height;\n } else {\n return; // No depth data available\n }\n\n // Render preprocessing for both eyes\n this.preprocessingPass.render(this.renderer, depthWidth, depthHeight, 0);\n this.preprocessingPass.render(this.renderer, depthWidth, depthHeight, 1);\n }\n\n /**\n * Updates depth data from the XR frame.\n */\n private updateLocalDepth(frame: XRFrame): void {\n const session = frame.session;\n const binding = this.renderer.xr.getBinding();\n\n const xrRefSpace = this.renderer.xr.getReferenceSpace();\n if (xrRefSpace) {\n const pose = frame.getViewerPose(xrRefSpace);\n if (pose) {\n if (session.depthUsage === 'gpu-optimized') {\n // GPU path: the native texture is a texture array containing all\n // views. We only need to update the ExternalTexture once using the\n // first view's depth data.\n const view = pose.views[0];\n if (!view) {\n return;\n }\n const depthData = binding.getDepthInformation(view);\n if (depthData) {\n this.updateGPUDepthData(depthData);\n this.hasCurrentFrameDepthData = true;\n }\n } else {\n // CPU path: each view has its own DataTexture.\n const frameDepthData: XRCPUDepthInformation[] = [];\n for (let viewId = 0; viewId < pose.views.length; ++viewId) {\n const view = pose.views[viewId];\n const depthData = frame.getDepthInformation(view);\n if (!depthData) {\n return;\n }\n frameDepthData.push(depthData);\n }\n\n // Commit the stereo sample atomically. Updating one eye before the\n // other reports missing would create a mixed-frame depth texture.\n for (let viewId = 0; viewId < frameDepthData.length; ++viewId) {\n this.updateCPUDepthData(frameDepthData[viewId], viewId);\n }\n this.hasCurrentFrameDepthData = frameDepthData.length > 0;\n }\n }\n }\n }\n\n /**\n * Update with CPU-optimized depth data.\n */\n private updateCPUDepthData(\n depthData: XRCPUDepthInformation,\n viewId = 0,\n ): void {\n this.cpuDepthData[viewId] = depthData;\n\n if (this.config.enableDepthTexture.value && this.depthTextures) {\n this.depthTextures.updateData(depthData, viewId);\n }\n }\n\n /**\n * Update with GPU-optimized depth data.\n */\n private updateGPUDepthData(depthData: XRWebGLDepthInformation): void {\n this.gpuDepthData[0] = depthData;\n\n if (this.config.enableDepthTexture.value && this.depthTextures) {\n this.depthTextures.updateNativeTexture(depthData, this.renderer);\n }\n }\n\n /**\n * Updates depth texture uniforms on all occludable materials each frame.\n * Both GPU and CPU paths set the texture array uniform; the shader uses\n * VIEW_ID to select the correct stereo layer.\n */\n private updateOcclusionUniforms(): void {\n const depthTextureArray = this.getDepthTextureArray();\n if (!depthTextureArray) {\n this.clearAllOcclusionUniforms();\n return;\n }\n\n const isGPUDepth = this.isGPUDepth;\n const depthNear =\n (this.gpuDepthData[0] as unknown as { depthNear: number } | undefined)\n ?.depthNear ?? 0;\n\n this.renderer.getDrawingBufferSize(this.viewportSize);\n\n for (const [entity, entityUniforms] of this.entityShaderMap) {\n const isHardMode =\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.HardOcclusion;\n const isMinMaxMode =\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.MinMaxSoftOcclusion;\n\n for (const uniforms of entityUniforms) {\n uniforms.uXRDepthTextureArray.value = depthTextureArray;\n uniforms.uRawValueToMeters.value = this.rawValueToMeters;\n uniforms.uIsGPUDepth.value = isGPUDepth;\n uniforms.uDepthNear.value = depthNear;\n (uniforms.uViewportSize.value as Vector2).copy(this.viewportSize);\n uniforms.uOcclusionBlurRadius.value = this.config.blurRadius.value;\n uniforms.uOcclusionHardMode.value = isHardMode;\n uniforms.uOcclusionMinMaxMode.value = isMinMaxMode;\n uniforms.occlusionEnabled.value = this.config.enableOcclusion.value;\n\n if (isMinMaxMode && this.preprocessingPass) {\n uniforms.uMinMaxTexture0.value = this.preprocessingPass.getTexture(0);\n uniforms.uMinMaxTexture1.value = this.preprocessingPass.getTexture(1);\n }\n }\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"depth-textures.js","sources":["../../src/depth/depth-textures.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"depth-textures.js","sources":["../../src/depth/depth-textures.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n DataArrayTexture,\n ExternalTexture,\n FloatType,\n RedFormat,\n RGFormat,\n UnsignedByteType,\n WebGLRenderer,\n} from '../runtime/three.js';\n/**\n * Manages depth textures from WebXR depth sensing.\n * Supports both CPU-optimized (DataArrayTexture) and GPU-optimized (ExternalTexture) depth data.\n */\nexport class DepthTextures {\n private nativeTexture?: ExternalTexture;\n private dataArrayTexture?: DataArrayTexture;\n private combinedArray?: Float32Array | Uint8Array;\n\n constructor(private useFloat32: boolean) {}\n\n /**\n * Create or recreate the DataArrayTexture for stereo CPU depth.\n * Packs per-view depth data into a single texture array (depth=2)\n * so the shader can select the correct layer via VIEW_ID.\n */\n private createDataArrayTexture(width: number, height: number): void {\n if (this.dataArrayTexture) {\n this.dataArrayTexture.dispose();\n }\n const depth = 2; // stereo: left + right eye\n if (this.useFloat32) {\n const pixelsPerLayer = width * height;\n this.combinedArray = new Float32Array(pixelsPerLayer * depth);\n this.dataArrayTexture = new DataArrayTexture(\n this.combinedArray,\n width,\n height,\n depth,\n );\n this.dataArrayTexture.format = RedFormat;\n this.dataArrayTexture.type = FloatType;\n } else {\n const bytesPerLayer = width * height * 2;\n this.combinedArray = new Uint8Array(bytesPerLayer * depth);\n this.dataArrayTexture = new DataArrayTexture(\n this.combinedArray,\n width,\n height,\n depth,\n );\n this.dataArrayTexture.format = RGFormat;\n this.dataArrayTexture.type = UnsignedByteType;\n }\n }\n\n /**\n * Update the depth texture with new CPU depth data.\n * Copies per-view data into the correct layer of the DataArrayTexture.\n * @param depthData - The CPU depth information from WebXR.\n * @param viewId - The view index (0 for left eye, 1 for right eye).\n */\n updateData(depthData: XRCPUDepthInformation, viewId: number): void {\n // Recreate the DataArrayTexture if dimensions changed or it doesn't exist\n if (\n !this.dataArrayTexture ||\n this.dataArrayTexture.image.width !== depthData.width ||\n this.dataArrayTexture.image.height !== depthData.height\n ) {\n this.createDataArrayTexture(depthData.width, depthData.height);\n }\n\n if (this.useFloat32) {\n const viewData = new Float32Array(depthData.data);\n const layerSize = depthData.width * depthData.height;\n (this.combinedArray as Float32Array).set(viewData, viewId * layerSize);\n } else {\n const viewData = new Uint8Array(depthData.data);\n const layerSize = depthData.width * depthData.height * 2;\n (this.combinedArray as Uint8Array).set(viewData, viewId * layerSize);\n }\n\n this.dataArrayTexture!.addLayerUpdate(viewId);\n this.dataArrayTexture!.needsUpdate = true;\n }\n\n /**\n * Update the depth texture with native GPU texture from WebXR.\n * The native texture is a texture array containing both eyes' depth data.\n * @param depthData - The GPU depth information from WebXR.\n * @param renderer - The WebGL renderer.\n */\n updateNativeTexture(\n depthData: XRWebGLDepthInformation,\n renderer: WebGLRenderer,\n ): void {\n if (!this.nativeTexture) {\n this.nativeTexture = new ExternalTexture(depthData.texture);\n } else {\n this.nativeTexture.sourceTexture = depthData.texture;\n }\n // Update the texture properties for three.js\n const textureProperties = renderer.properties.get(this.nativeTexture) as {\n __webglTexture: WebGLTexture;\n __version: number;\n };\n textureProperties.__webglTexture = depthData.texture;\n textureProperties.__version = 1;\n }\n\n /**\n * Get the native GPU depth texture array.\n * Contains both eyes' depth data; the shader uses VIEW_ID to select the layer.\n */\n getNativeTexture(): ExternalTexture | undefined {\n return this.nativeTexture;\n }\n\n /**\n * Get the CPU depth data as a DataArrayTexture.\n * Contains per-view depth packed into layers; the shader uses VIEW_ID to select the layer.\n */\n getDataArrayTexture(): DataArrayTexture | undefined {\n return this.dataArrayTexture;\n }\n\n /**\n * Dispose of all depth textures.\n */\n dispose(): void {\n this.dataArrayTexture?.dispose();\n this.dataArrayTexture = undefined;\n this.combinedArray = undefined;\n this.nativeTexture = undefined;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preprocessing-pass.js","sources":["../../../src/depth/occlusion/preprocessing-pass.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preprocessing-pass.js","sources":["../../../src/depth/occlusion/preprocessing-pass.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 { FullScreenQuad } from 'three/examples/jsm/postprocessing/Pass.js';\nimport {\n FloatType,\n RGBAFormat,\n ShaderMaterial,\n Texture,\n Vector2,\n WebGLRenderer,\n WebGLRenderTarget,\n} from '../../runtime/three.js';\nimport { DepthPreprocessingShader } from './preprocessing-shader.glsl.js';\n\n/**\n * Depth preprocessing pass — ported from Meta SDK DepthPreprocessing.shader.\n *\n * Runs a single fullscreen pass on the raw XR depth texture at depth texture\n * resolution (~256×192). For each output texel it samples a 4×4 neighborhood\n * and computes min/max/avg depth, writing the result to an RGBA float target:\n *\n * RGBA = (minAvg, maxAvg, avg - minAvg, maxAvg - minAvg) in meters\n *\n * The material shader then samples this preprocessed texture to apply soft\n * occlusion without requiring scene-override renders or Kawase blur.\n */\nexport class DepthPreprocessingPass {\n private material: ShaderMaterial;\n private renderTargets: [WebGLRenderTarget, WebGLRenderTarget];\n private fsQuad: FullScreenQuad;\n\n constructor() {\n this.material = new ShaderMaterial({\n name: 'DepthPreprocessing',\n uniforms: {\n uXRDepthTextureArray: { value: null },\n uRawValueToMeters: { value: 0.001 },\n uViewId: { value: 0 },\n uDepthTextureSize: { value: new Vector2() },\n uIsGPUDepth: { value: false },\n uDepthNear: { value: 0 },\n },\n vertexShader: DepthPreprocessingShader.vertexShader,\n fragmentShader: DepthPreprocessingShader.fragmentShader,\n });\n\n const rtOptions = { format: RGBAFormat, type: FloatType };\n this.renderTargets = [\n new WebGLRenderTarget(1, 1, rtOptions),\n new WebGLRenderTarget(1, 1, rtOptions),\n ];\n\n this.fsQuad = new FullScreenQuad(this.material);\n }\n\n /**\n * Set the depth texture source for preprocessing.\n * @param depthTexture - The XR depth texture array (ExternalTexture or DataArrayTexture).\n * @param rawValueToMeters - Conversion factor from raw depth values to meters.\n * @param isGPUDepth - Whether the depth data is GPU-optimized (inverse depth).\n * @param depthNear - The near plane distance for GPU depth conversion.\n */\n setDepthTexture(\n depthTexture: Texture,\n rawValueToMeters: number,\n isGPUDepth: boolean,\n depthNear: number,\n ): void {\n this.material.uniforms.uXRDepthTextureArray.value = depthTexture;\n this.material.uniforms.uRawValueToMeters.value = rawValueToMeters;\n this.material.uniforms.uIsGPUDepth.value = isGPUDepth;\n this.material.uniforms.uDepthNear.value = depthNear;\n }\n\n /**\n * Render the preprocessing pass.\n * @param renderer - The three.js WebGL renderer.\n * @param depthWidth - Width of the depth texture.\n * @param depthHeight - Height of the depth texture.\n * @param viewId - The view index to render (default 0).\n */\n render(\n renderer: WebGLRenderer,\n depthWidth: number,\n depthHeight: number,\n viewId = 0,\n ): void {\n const target = this.renderTargets[viewId];\n // Only resize if dimensions actually changed\n if (target.width !== depthWidth || target.height !== depthHeight) {\n target.setSize(depthWidth, depthHeight);\n }\n this.material.uniforms.uViewId.value = viewId;\n (this.material.uniforms.uDepthTextureSize.value as Vector2).set(\n depthWidth,\n depthHeight,\n );\n\n const originalRenderTarget = renderer.getRenderTarget();\n // Temporarily disable XR so FullScreenQuad renders with its own\n // identity camera instead of the XR stereo/multiview cameras.\n const xrEnabled = renderer.xr.enabled;\n renderer.xr.enabled = false;\n renderer.setRenderTarget(target);\n this.fsQuad.render(renderer);\n renderer.setRenderTarget(originalRenderTarget);\n renderer.xr.enabled = xrEnabled;\n }\n\n /**\n * Get the preprocessed depth texture for a given view.\n * RGBA = (minAvg, maxAvg, avg - minAvg, maxAvg - minAvg) in meters.\n * @param viewId - The view index (0 for left eye, 1 for right eye).\n */\n getTexture(viewId = 0): Texture {\n return this.renderTargets[viewId].texture;\n }\n\n /**\n * Dispose of all resources.\n */\n dispose(): void {\n for (const target of this.renderTargets) {\n target.dispose();\n }\n this.material.dispose();\n this.fsQuad.dispose();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preprocessing-shader.glsl.js","sources":["../../../src/depth/occlusion/preprocessing-shader.glsl.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAEH;;;;;;;;;AASG;AACI,MAAM,wBAAwB,GAAG;AACtC,IAEA,YAAY,aAAa;;;;;;;AAO1B,CAAA;IAEC,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF5B,CAAA;;;;;"}
1
+ {"version":3,"file":"preprocessing-shader.glsl.js","sources":["../../../src/depth/occlusion/preprocessing-shader.glsl.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Depth preprocessing shader — ported from Meta SDK DepthPreprocessing.shader.\n *\n * A single fullscreen pass on the raw XR depth texture that computes\n * min/max/avg depth in a 4×4 neighborhood, written to an RGBA float target.\n *\n * Output: vec4(minAvg, maxAvg, avg - minAvg, maxAvg - minAvg) in meters.\n * The interpolation ratio (avg-minAvg)/(maxAvg-minAvg) is deferred to the\n * occlusion shader to preserve bilinear interpolation properties.\n */\nexport const DepthPreprocessingShader = {\n name: 'DepthPreprocessingShader',\n\n vertexShader: /* glsl */ `\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n`,\n\n fragmentShader: /* glsl */ `\nprecision highp float;\n\nuniform sampler2DArray uXRDepthTextureArray;\nuniform float uRawValueToMeters;\nuniform int uViewId;\nuniform vec2 uDepthTextureSize;\nuniform bool uIsGPUDepth;\nuniform float uDepthNear;\n\nvarying vec2 vUv;\n\nfloat depthToMeters(float textureValue) {\n\tif (uIsGPUDepth) {\n\t\treturn uRawValueToMeters * uDepthNear / (1.0 - textureValue);\n\t}\n\treturn textureValue * uRawValueToMeters;\n}\n\nvoid main() {\n\tvec2 texelSize = 1.0 / uDepthTextureSize;\n\tvec2 baseUV = vUv - texelSize * 1.5;\n\n\t// Single pass: sample 4×4 neighborhood, convert, and store in 4 vec4s\n\tvec4 depths[4];\n\tfloat rawMin = 1e20;\n\tfloat rawMax = 0.0;\n\tfloat sum = 0.0;\n\tint count = 0;\n\n\tfor (int row = 0; row < 4; row++) {\n\t\tfor (int col = 0; col < 4; col++) {\n\t\t\tvec2 sampleUV = baseUV + vec2(float(col), float(row)) * texelSize;\n\t\t\tfloat rawValue = texture(uXRDepthTextureArray, vec3(sampleUV, float(uViewId))).r;\n\t\t\tfloat meters = depthToMeters(rawValue);\n\t\t\tdepths[row][col] = meters;\n\n\t\t\tif (meters > 0.0) {\n\t\t\t\trawMin = min(rawMin, meters);\n\t\t\t\trawMax = max(rawMax, meters);\n\t\t\t\tsum += meters;\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (count == 0) {\n\t\tgl_FragColor = vec4(0.0);\n\t\treturn;\n\t}\n\n\tfloat avg = sum / float(count);\n\n\t// Group samples near the min (within 115%) and near the max (within 85%)\n\t// to compute stable minAvg and maxAvg — ported from CalculateMinMaxDepth\n\tfloat minThreshold = rawMin * 1.15;\n\tfloat maxThreshold = rawMax * 0.85;\n\n\t// Degenerate case: neighborhood is uniform (within both thresholds)\n\tif (maxThreshold < rawMin && minThreshold > rawMax) {\n\t\tgl_FragColor = vec4(avg, avg, 0.0, 0.0);\n\t\treturn;\n\t}\n\n\t// Vectorized clustering using stored depths — no second sampling loop\n\tfloat minSumDepth = 0.0;\n\tfloat minSumCount = 0.0;\n\tfloat maxSumDepth = 0.0;\n\tfloat maxSumCount = 0.0;\n\n\tfor (int i = 0; i < 4; i++) {\n\t\tvec4 valid = vec4(greaterThan(depths[i], vec4(0.0)));\n\t\tvec4 minMask = vec4(lessThanEqual(depths[i], vec4(minThreshold))) * valid;\n\t\tvec4 maxMask = vec4(greaterThanEqual(depths[i], vec4(maxThreshold))) * valid;\n\t\tminSumDepth += dot(minMask, depths[i]);\n\t\tminSumCount += dot(minMask, vec4(1.0));\n\t\tmaxSumDepth += dot(maxMask, depths[i]);\n\t\tmaxSumCount += dot(maxMask, vec4(1.0));\n\t}\n\n\tfloat minAvg = minSumCount > 0.0 ? minSumDepth / minSumCount : rawMin;\n\tfloat maxAvg = maxSumCount > 0.0 ? maxSumDepth / maxSumCount : rawMax;\n\n\tgl_FragColor = vec4(minAvg, maxAvg, avg - minAvg, maxAvg - minAvg);\n}\n`,\n};\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAEH;;;;;;;;;AASG;AACI,MAAM,wBAAwB,GAAG;AACtC,IAEA,YAAY,aAAa;;;;;;;AAO1B,CAAA;IAEC,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF5B,CAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-components.js","sources":["../../src/ecs/builtin-components.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AAgDH;AACO,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;IACvD,WAAW;IACX,qBAAqB;IACrB,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,YAAY;IACZ,WAAW;IACX,wBAAwB;IACxB,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,wBAAwB;IACxB,WAAW;IACX,UAAU;IACV,SAAS;IACT,QAAQ;IACR,qBAAqB;IACrB,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,OAAO;IACP,eAAe;IACf,sBAAsB;IACtB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACR,eAAe;IACf,YAAY;IACZ,MAAM;IACN,OAAO;IACP,WAAW;AACH,CAAA;;;;"}
1
+ {"version":3,"file":"builtin-components.js","sources":["../../src/ecs/builtin-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 { AudioSource } from '../audio/audio.js';\nimport { CameraSource } from '../camera/camera-source.js';\nimport { DepthOccludable } from '../depth/depth-occludable.js';\nimport { DomeGradient } from '../environment/dome-gradient.js';\nimport { DomeTexture } from '../environment/dome-texture.js';\nimport { IBLGradient } from '../environment/ibl-gradient.js';\nimport { IBLTexture } from '../environment/ibl-texture.js';\nimport { EnvironmentRaycastTarget } from '../environment-raycast/raycast-target.js';\nimport { DistanceGrabbable } from '../grab/distance-grabbable.js';\nimport { Grabbed } from '../grab/grabbed.js';\nimport { Handle } from '../grab/handles.js';\nimport { OneHandGrabbable } from '../grab/one-hand-grabbable.js';\nimport { TwoHandsGrabbable } from '../grab/two-hands-grabbable.js';\nimport {\n Hovered,\n PokeInteractable,\n Pressed,\n RayInteractable,\n} from '../input/state-tags.js';\nimport { XRCylinderLayer } from '../layers/xr-cylinder-layer.js';\nimport { XRLayerState } from '../layers/xr-layer-state.js';\nimport { XRQuadLayer } from '../layers/xr-quad-layer.js';\nimport { LevelRoot } from '../level/level-root.js';\nimport { LevelTag } from '../level/level-tag.js';\nimport {\n AmbientLightComponent,\n DirectionalLightComponent,\n HemisphereLightComponent,\n PointLightComponent,\n RectAreaLightComponent,\n SpotLightComponent,\n} from '../lighting/light-components.js';\nimport { LocomotionEnvironment } from '../locomotion/locomotion-environment.js';\nimport { PhysicsBody } from '../physics/physicsBody.js';\nimport { PhysicsManipulation } from '../physics/physicsManipulation.js';\nimport { PhysicsShape } from '../physics/physicsShape.js';\nimport { XRAnchor } from '../scene-understanding/anchor.js';\nimport { XRMesh } from '../scene-understanding/mesh.js';\nimport { XRPlane } from '../scene-understanding/plane.js';\nimport { Transform } from '../transform/transform-component.js';\nimport { Follower } from '../ui/follow-component.js';\nimport { PanelDocument, PanelUI } from '../ui/panel-components.js';\nimport { ScreenSpace } from '../ui/screenspace-component.js';\nimport { Visibility } from '../visibility/visibility-component.js';\nimport { defineComponents } from './component-manifest.js';\n\n/** Complete editor-visible IWSDK component catalog in deterministic order. */\nexport const IWSDK_BUILTIN_COMPONENTS = defineComponents([\n AudioSource,\n AmbientLightComponent,\n CameraSource,\n DepthOccludable,\n DistanceGrabbable,\n DirectionalLightComponent,\n DomeGradient,\n DomeTexture,\n EnvironmentRaycastTarget,\n Follower,\n Grabbed,\n Handle,\n Hovered,\n HemisphereLightComponent,\n IBLGradient,\n IBLTexture,\n LevelRoot,\n LevelTag,\n LocomotionEnvironment,\n OneHandGrabbable,\n PanelDocument,\n PanelUI,\n PhysicsBody,\n PhysicsManipulation,\n PhysicsShape,\n PointLightComponent,\n PokeInteractable,\n Pressed,\n RayInteractable,\n RectAreaLightComponent,\n ScreenSpace,\n SpotLightComponent,\n Transform,\n TwoHandsGrabbable,\n Visibility,\n XRAnchor,\n XRCylinderLayer,\n XRLayerState,\n XRMesh,\n XRPlane,\n XRQuadLayer,\n] as const);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AAgDH;AACO,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;IACvD,WAAW;IACX,qBAAqB;IACrB,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,YAAY;IACZ,WAAW;IACX,wBAAwB;IACxB,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,wBAAwB;IACxB,WAAW;IACX,UAAU;IACV,SAAS;IACT,QAAQ;IACR,qBAAqB;IACrB,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,OAAO;IACP,eAAe;IACf,sBAAsB;IACtB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACR,eAAe;IACf,YAAY;IACZ,MAAM;IACN,OAAO;IACP,WAAW;AACH,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-editor-metadata.js","sources":["../../src/ecs/component-editor-metadata.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAYH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAGpC;AAEH;AACM,SAAU,0BAA0B,CACxC,SAAY,EACZ,QAAiC,EAAA;AAEjC,IAAA,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AAClE,IAAA,OAAO,SAAS;AAClB;AAEA;AACM,SAAU,0BAA0B,CACxC,SAAuB,EAAA;AAEvB,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C;;;;"}
1
+ {"version":3,"file":"component-editor-metadata.js","sources":["../../src/ecs/component-editor-metadata.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { AnyComponent } from './component.js';\n\n/** Presentation and lifecycle hints consumed by IWSDK authoring tools. */\nexport interface ComponentEditorMetadata {\n /** Exclude this component from generic component authoring UI. */\n hidden?: boolean;\n /** The runtime owns this component as an intrinsic part of an entity. */\n intrinsic?: boolean;\n}\n\nconst metadataByComponent = new WeakMap<\n AnyComponent,\n ComponentEditorMetadata\n>();\n\n/** Attach editor metadata without changing the Elics component shape. */\nexport function setComponentEditorMetadata<C extends AnyComponent>(\n component: C,\n metadata: ComponentEditorMetadata,\n): C {\n metadataByComponent.set(component, Object.freeze({ ...metadata }));\n return component;\n}\n\n/** Read editor metadata previously attached to an Elics component. */\nexport function getComponentEditorMetadata(\n component: AnyComponent,\n): Readonly<ComponentEditorMetadata> | undefined {\n return metadataByComponent.get(component);\n}\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAYH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAGpC;AAEH;AACM,SAAU,0BAA0B,CACxC,SAAY,EACZ,QAAiC,EAAA;AAEjC,IAAA,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AAClE,IAAA,OAAO,SAAS;AAClB;AAEA;AACM,SAAU,0BAA0B,CACxC,SAAuB,EAAA;AAEvB,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-manifest.js","sources":["../../src/ecs/component-manifest.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-manifest.js","sources":["../../src/ecs/component-manifest.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n createSceneComponentCatalog,\n type JsonValue,\n type SceneComponentCatalog,\n type SceneComponentFieldSchema,\n type SceneComponentSchema,\n} from '@iwsdk/scene-composition';\nimport { getComponentEditorMetadata } from './component-editor-metadata.js';\nimport { ComponentRegistry, type AnyComponent } from './component.js';\n\nexport type ComponentManifest<\n T extends readonly AnyComponent[] = readonly AnyComponent[],\n> = T & {\n /** Used by the managed editor to detect split Elics module instances. */\n readonly componentRegistry: typeof ComponentRegistry;\n};\n\n/**\n * Declare the complete set of application components shared by runtime and\n * editor. Individual createComponent declarations remain unchanged.\n */\nexport function defineComponents<const T extends readonly AnyComponent[]>(\n components: T,\n): ComponentManifest<T> {\n const ids = new Set<string>();\n for (const component of components) {\n if (component.id.trim().length === 0) {\n throw new Error('Component IDs must not be blank');\n }\n if (ids.has(component.id)) {\n throw new Error(`Duplicate component manifest ID \"${component.id}\"`);\n }\n ids.add(component.id);\n }\n const manifest = [...components] as unknown as ComponentManifest<T>;\n Object.defineProperty(manifest, 'componentRegistry', {\n configurable: false,\n enumerable: false,\n value: ComponentRegistry,\n writable: false,\n });\n return Object.freeze(manifest);\n}\n\nexport interface ComponentCatalogOptions {\n source?: SceneComponentSchema['source'];\n}\n\n/** Derive editor and validation metadata from the actual Elics schema. */\nexport function sceneComponentSchemaFromComponent(\n component: AnyComponent,\n options: ComponentCatalogOptions = {},\n): SceneComponentSchema {\n const editor = getComponentEditorMetadata(component);\n const fields: Record<string, SceneComponentFieldSchema> = {};\n for (const [fieldName, source] of Object.entries(component.schema)) {\n const field = source as Record<string, unknown>;\n const defaultValue = jsonValueOrUndefined(field.default);\n fields[fieldName] = {\n type: String(field.type) as SceneComponentFieldSchema['type'],\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(typeof field.description === 'string'\n ? { description: field.description }\n : {}),\n ...(typeof field.label === 'string' ? { label: field.label } : {}),\n ...(typeof field.help === 'string' ? { help: field.help } : {}),\n ...(isComponentWidget(field.widget) ? { widget: field.widget } : {}),\n ...(field.required === true ? { required: true } : {}),\n ...(typeof field.step === 'number' && Number.isFinite(field.step)\n ? { step: field.step }\n : {}),\n ...(isStringRecord(field.enum) ? { enum: field.enum } : {}),\n ...(typeof field.fileTypes === 'string'\n ? { fileTypes: field.fileTypes }\n : {}),\n ...(typeof field.subfolder === 'string'\n ? { subfolder: field.subfolder }\n : {}),\n ...(typeof field.min === 'number' && Number.isFinite(field.min)\n ? { min: field.min }\n : {}),\n ...(typeof field.max === 'number' && Number.isFinite(field.max)\n ? { max: field.max }\n : {}),\n ...(field.hidden === true || fieldName.startsWith('_')\n ? { hidden: true }\n : {}),\n };\n }\n return {\n id: component.id,\n ...(component.description == null\n ? {}\n : { description: component.description }),\n fields,\n source: options.source ?? 'app',\n ...(editor == null ? {} : { editor: { ...editor } }),\n };\n}\n\nexport function componentCatalogFromComponents(\n components: readonly AnyComponent[],\n options: ComponentCatalogOptions = {},\n): SceneComponentCatalog {\n return createSceneComponentCatalog(\n components.map((component) =>\n sceneComponentSchemaFromComponent(component, options),\n ),\n );\n}\n\nfunction jsonValueOrUndefined(value: unknown): JsonValue | undefined {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (Array.isArray(value)) {\n const entries = value.map(jsonValueOrUndefined);\n return entries.every((entry) => entry !== undefined)\n ? (entries as JsonValue[])\n : undefined;\n }\n if (value != null && typeof value === 'object') {\n const entries = Object.entries(value).map(\n ([key, entry]) => [key, jsonValueOrUndefined(entry)] as const,\n );\n return entries.every(([, entry]) => entry !== undefined)\n ? (Object.fromEntries(entries) as Record<string, JsonValue>)\n : undefined;\n }\n return undefined;\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n return (\n value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.values(value).every((entry) => typeof entry === 'string')\n );\n}\n\nfunction isComponentWidget(\n value: unknown,\n): value is NonNullable<SceneComponentFieldSchema['widget']> {\n return ['slider', 'color', 'vector', 'text', 'select', 'entity'].includes(\n String(value),\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sources":["../../src/ecs/entity.ts"],"sourcesContent":[null],"names":["ElicsEntity"],"mappings":"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"}
1
+ {"version":3,"file":"entity.js","sources":["../../src/ecs/entity.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { PointerEventsMap } from '@pmndrs/pointer-events';\nimport { Entity as ElicsEntity, Types } from 'elics';\nimport type { AnyComponent } from 'elics';\nimport type { Color, Object3D, Object3DEventMap } from '../runtime/index.js';\n\nexport type ColorValueInput =\n | number\n | string\n | Color\n | readonly [number, number, number]\n | readonly [number, number, number, number];\n\ntype ColorKeys<C extends AnyComponent> = {\n [K in keyof C['schema']]: C['schema'][K]['type'] extends 'Color' ? K : never;\n}[keyof C['schema']];\n\n/** Options for {@link Entity.dispose}. @category ECS */\nexport interface EntityDisposeOptions {\n /**\n * Whether to dispose GPU resources attached to this entity's Object3D tree.\n *\n * @defaultValue true\n */\n disposeResources?: boolean;\n}\n\ndeclare module 'elics' {\n interface Entity {\n object3D?: Object3D<Object3DEventMap & PointerEventsMap>;\n /** @internal Flag to indicate GPU resources should be disposed on destroy */\n _disposeResources?: boolean;\n /**\n * Destroy the entity and dispose of its GPU resources (geometry, materials, textures).\n *\n * @remarks\n * Use this instead of `destroy()` when you want to fully clean up GPU memory.\n * Use with caution when resources may be shared across multiple entities.\n *\n * @example\n * ```ts\n * // Remove entity and free GPU resources\n * entity.dispose();\n *\n * // Remove entity while preserving shared geometry/materials\n * entity.dispose({ disposeResources: false });\n * ```\n */\n dispose(options?: EntityDisposeOptions): void;\n setValue<C extends AnyComponent, K extends ColorKeys<C>>(\n component: C,\n key: K,\n value: ColorValueInput,\n ): void;\n }\n}\n\nfunction normalizeColorValue(value: unknown): [number, number, number, number] {\n if (typeof value === 'number') {\n if (!Number.isInteger(value) || value < 0 || value > 0xffffff) {\n throw new Error(\n 'Color hex numbers must be RGB integers between 0x000000 and 0xffffff. Use #RRGGBBAA strings when alpha is needed.',\n );\n }\n return [\n ((value >> 16) & 0xff) / 255,\n ((value >> 8) & 0xff) / 255,\n (value & 0xff) / 255,\n 1,\n ];\n }\n\n if (typeof value === 'string') {\n const match = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(value);\n if (!match) {\n throw new Error('Color strings must use #RRGGBB or #RRGGBBAA.');\n }\n\n const hex = match[1];\n return [\n parseInt(hex.slice(0, 2), 16) / 255,\n parseInt(hex.slice(2, 4), 16) / 255,\n parseInt(hex.slice(4, 6), 16) / 255,\n hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1,\n ];\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n (value as { isColor?: unknown }).isColor === true &&\n typeof (value as { toArray?: unknown }).toArray === 'function'\n ) {\n const [r = 1, g = 1, b = 1] = (value as Color).toArray();\n return [r, g, b, 1];\n }\n\n if (Array.isArray(value)) {\n if (value.length !== 3 && value.length !== 4) {\n throw new Error('Color arrays must have 3 or 4 entries.');\n }\n if (\n !value.every(\n (entry) => typeof entry === 'number' && Number.isFinite(entry),\n )\n ) {\n throw new Error('Color array entries must be finite numbers.');\n }\n const [r, g, b, a = 1] = value;\n return [r, g, b, a];\n }\n\n throw new Error(\n 'Color values must be a hex number, #RRGGBB/#RRGGBBAA string, THREE.Color, or RGB/RGBA array.',\n );\n}\n\nconst originalSetValue = ElicsEntity.prototype.setValue;\n\nElicsEntity.prototype.setValue = function setValueWithColorCoercion(\n this: ElicsEntity,\n component: any,\n key: any,\n value: any,\n) {\n if (component.schema[key]?.type === Types.Color) {\n ((this as any).getVectorView(component, key) as Float32Array).set(\n normalizeColorValue(value),\n );\n (this as any).queryManager.updateEntityValue(this, component);\n return;\n }\n\n (originalSetValue as any).call(this, component, key, value);\n};\n\n// Add dispose method to Entity prototype\nElicsEntity.prototype.dispose = function (\n this: ElicsEntity,\n options?: EntityDisposeOptions,\n) {\n if (options?.disposeResources !== false) {\n (this as any)._disposeResources = true;\n }\n this.destroy();\n};\n\nexport { Entity } from 'elics';\n/** Sentinel value used for \"no parent\" in Transform.parent. @category ECS */\nexport const NullEntity = -1;\n"],"names":["ElicsEntity"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sources":["../../src/ecs/system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sources":["../../src/ecs/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 { XROrigin } from '@iwsdk/xr-input';\nimport { Signal, signal } from '@preact/signals-core';\nimport {\n System as ElicsSystem,\n Query,\n SystemConstructor,\n SystemQueries,\n SystemSchema,\n TypeValueToType,\n} from 'elics';\nimport type { QueryManager } from 'elics/lib/query-manager.js';\nimport { Object3D } from 'three';\nimport type { InputManager } from '../input/index.js';\nimport {\n PerspectiveCamera,\n Scene,\n WebGLRenderer,\n WebXRManager,\n} from '../runtime/index.js';\nimport { Entity } from './entity.js';\nimport type { VisibilityState, World } from './world';\n\ntype SystemConfigSignals<S extends SystemSchema> = {\n [K in keyof S]: Signal<TypeValueToType<S[K]['type']>>;\n};\n\n/**\n * System base interface wired to the IWSDK World, renderer, and XR runtime.\n *\n * @remarks\n * - `createSystem(queries, schema)` returns a class that implements this interface.\n * - Config values are exposed as reactive Signals on `this.config.<key>`.\n * - Common world resources are available as readonly properties (`player`, `input`,\n * `scene`, `camera`, `renderer`, `visibilityState`).\n * - Use `cleanupFuncs.push(() => ...)` to register teardown callbacks.\n *\n * @category ECS\n */\nexport interface System<S extends SystemSchema, Q extends SystemQueries>\n extends ElicsSystem<S, Q> {\n isPaused: boolean;\n config: SystemConfigSignals<S>;\n queries: Record<keyof Q, Query>;\n world: World;\n queryManager: QueryManager;\n priority: number;\n globals: Record<string, any>;\n xrManager: WebXRManager;\n xrFrame: XRFrame;\n\n readonly player: XROrigin;\n readonly playerEntity: Entity;\n readonly playerHeadEntity: Entity;\n readonly input: InputManager;\n readonly scene: Scene;\n readonly camera: PerspectiveCamera;\n readonly renderer: WebGLRenderer;\n readonly visibilityState: Signal<VisibilityState>;\n readonly cleanupFuncs: Array<() => void>;\n\n init(): void;\n /**\n * Per-frame tick. Both arguments are in seconds (Three.js `Clock` convention),\n * not milliseconds.\n *\n * @param delta Seconds since the previous frame.\n * @param time Accumulated `Clock.elapsedTime` (seconds since the render loop\n * started ticking the clock); monotonic across frames within a\n * session.\n */\n update(delta: number, time: number): void;\n play(): void;\n stop(): void;\n createEntity: () => Entity;\n}\n\n/**\n * Create a strongly-typed System class with query bindings and reactive config.\n *\n * @param queries Elics query descriptors keyed by name.\n * @param schema Option map of config defaults and Types.\n * @returns A System constructor to `export class MySystem extends createSystem(...) { ... }`.\n *\n * @example\n * export class Rotator extends createSystem({ items: { required: [Transform] } }, {\n * speed: { type: Types.Float32, default: 1 }\n * }) {\n * update(dt:number){ this.queries.items.entities.forEach(e=> e.object3D.rotateY(dt*this.config.speed.value)) }\n * }\n *\n * @category ECS\n */\nexport function createSystem<S extends SystemSchema, Q extends SystemQueries>(\n queries: Q = {} as Q,\n schema: S = {} as S,\n): SystemConstructor<S, Q, World, System<S, Q>> {\n if (typeof queries === 'function') {\n throw new TypeError(\n 'createSystem() received a lifecycle function as its query map. ' +\n 'Pass only named query descriptors in createSystem({...}); define init(), update(), and destroy() in the subclass body.',\n );\n }\n for (const [name, query] of Object.entries(queries)) {\n if (typeof query === 'function') {\n throw new TypeError(\n `createSystem() received lifecycle method \"${name}\" inside its query map. ` +\n `Move ${name}() into the subclass body; each createSystem() entry must be a query descriptor such as { required: [Component] }.`,\n );\n }\n }\n\n return class implements System<S, Q> {\n static schema = schema;\n static isSystem = true;\n static queries = queries;\n\n public isPaused: boolean = false;\n public queries!: Record<keyof Q, Query>;\n public config = {} as SystemConfigSignals<S>;\n\n public readonly player: XROrigin;\n public readonly playerEntity: Entity;\n public readonly playerHeadEntity: Entity;\n public readonly input: InputManager;\n public readonly scene: Scene;\n public readonly camera: PerspectiveCamera;\n public readonly renderer: WebGLRenderer;\n public readonly visibilityState: Signal<VisibilityState>;\n public readonly cleanupFuncs: Array<() => void> = [];\n\n constructor(\n public readonly world: World,\n public queryManager: QueryManager,\n public priority: number,\n ) {\n for (const key in schema) {\n this.config[key] = signal(schema[key].default as any);\n }\n this.player = world.player;\n this.playerEntity = world.playerEntity;\n this.playerHeadEntity = world.playerHeadEntity;\n this.input = world.input;\n this.scene = world.scene;\n this.camera = world.camera;\n this.renderer = world.renderer;\n this.visibilityState = world.visibilityState;\n }\n\n get globals() {\n return this.world.globals;\n }\n\n get xrManager() {\n return this.world.renderer.xr;\n }\n\n get xrFrame() {\n return this.xrManager.getFrame();\n }\n\n createEntity(): Entity {\n return this.world.createEntity();\n }\n\n createTransformEntity(object?: Object3D, parent?: Entity): Entity {\n return this.world.createTransformEntity(object, parent);\n }\n\n init(): void {}\n\n update(_delta: number, _time: number): void {}\n\n play(): void {\n this.isPaused = false;\n }\n\n stop(): void {\n this.isPaused = true;\n }\n\n destroy(): void {\n this.cleanupFuncs.forEach((func) => func());\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"world.js","sources":["../../src/ecs/world.ts"],"sourcesContent":[null],"names":["ElicsWorld"],"mappings":"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"}
1
+ {"version":3,"file":"world.js","sources":["../../src/ecs/world.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { SceneDocument } from '@iwsdk/scene-composition';\nimport type { SceneComponentCatalog } from '@iwsdk/scene-composition';\nimport { XROrigin } from '@iwsdk/xr-input';\nimport type { PointerEventsMap } from '@pmndrs/pointer-events';\nimport { Signal, signal } from '@preact/signals-core';\nimport { AnyComponent, World as ElicsWorld } from 'elics';\nimport { AssetManager, RenderableAssetRegistry } from '../asset/index.js';\n// Environment is driven by components/systems; no world helpers\n// NOTE: import `launchXR` and types directly from submodules — not the\n// `../init/index.js` barrel — so loading this file does not pull in\n// `init/world-initializer.js`. That would create a value-level cycle with\n// audio-system.ts (and other systems that import the ecs barrel), causing\n// the bundler to emit System classes before their referenced Component\n// constants, producing `undefined.bitmask` crashes at QueryManager.registerQuery.\n// `initializeWorld` is loaded lazily inside `World.create` for the same reason.\nimport { armSessionGrantCaptureForOptions } from '../init/session-grant.js';\nimport type { WorldOptions } from '../init/world-initializer.js';\nimport { launchXR } from '../init/xr.js';\nimport type { XROptions } from '../init/xr.js';\nimport type { InputManager } from '../input/index.js';\n// Import LevelTag from its leaf module — not '../level/index.js' — so that\n// loading ecs/world.ts does not transitively pull in level-system.ts (which\n// would re-enter '../ecs/index.js' and form a cycle, leading to TDZ\n// undefined.bitmask crashes for any component captured in System.queries).\nimport { LevelTag } from '../level/level-tag.js';\nimport type { MCPRuntime } from '../mcp/index.js';\nimport type { Object3DEventMap } from '../runtime/index.js';\nimport {\n Material,\n Object3D,\n PerspectiveCamera,\n Scene,\n Vector3,\n WebGLRenderer,\n} from '../runtime/index.js';\n// See note above on LevelTag — import Transform directly from its leaf\n// module to avoid cycling back through '../ecs/index.js' via the transform\n// barrel.\nimport { Transform } from '../transform/transform.js';\nimport { Visibility } from '../visibility/visibility-component.js';\nimport { Entity } from './entity.js';\n\nexport enum VisibilityState {\n NonImmersive = 'non-immersive',\n Hidden = 'hidden',\n Visible = 'visible',\n VisibleBlurred = 'visible-blurred',\n}\n\nexport type GradientColors = {\n sky: number;\n equator: number;\n ground: number;\n};\n\n/**\n * Callback invoked once per render-loop tick while an XR session is active,\n * registered via {@link World.onXRFrame}.\n *\n * @param frame The live {@link XRFrame} for this tick. Only valid synchronously\n * inside the callback — do not retain it across ticks.\n * @param delta Seconds since the previous frame.\n * @param time Accumulated render-loop time in seconds (monotonic within a session).\n * @category XR Runtime\n */\nexport type OnXRFrameCallback = (\n frame: XRFrame,\n delta: number,\n time: number,\n) => void;\n\n/**\n * World is the root ECS container, Three.js scene/renderer owner, and XR session gateway.\n *\n * @remarks\n * - Construct a world with {@link World.create} (recommended) which wires the renderer, scene, default systems\n * (Input, UI, Audio, Level) and starts the render loop.\n * - The world exposes convenience handles like {@link World.input | input},\n * {@link World.player | player} (the persistent player/XR origin), and {@link World.assetManager}.\n * - Feature systems (Grabbing, Locomotion) are opt‑in via {@link WorldOptions.features}.\n *\n * @category Runtime\n * @example\n * ```ts\n * import { World, SessionMode } from '@iwsdk/core';\n *\n * const container = document.getElementById('scene-container') as HTMLElement;\n * const world = await World.create(container, {\n * xr: { sessionMode: SessionMode.ImmersiveVR },\n * features: { enableLocomotion: true, enableGrabbing: true },\n * level: '/scenes/main.iwsdk.scene.json'\n * });\n * ```\n */\nexport class World extends ElicsWorld {\n public input!: InputManager;\n public player!: XROrigin;\n public assetManager!: typeof AssetManager;\n /** Renderable assets registered by the application manifest. */\n public assets!: RenderableAssetRegistry;\n /** Component definitions shared by scene validation and editor tooling. */\n public componentCatalog!: SceneComponentCatalog;\n public scene!: Scene;\n public sceneEntity!: Entity;\n public activeLevel!: Signal<Entity>;\n public activeLevelId: string = 'level:default';\n public camera!: PerspectiveCamera;\n public cameraEntity!: Entity;\n public renderer!: WebGLRenderer;\n public session: XRSession | undefined;\n public visibilityState = signal(VisibilityState.NonImmersive);\n /** Whether this world was created with XR support enabled. */\n public xrEnabled = true;\n /** Whether an explicit XR session request is currently settling. @internal */\n public sessionRequestPending = false;\n public requestedLevelUrl: string | undefined;\n public requestedLevelDocument: SceneDocument | undefined;\n public _resolveLevelLoad: (() => void) | undefined;\n public _rejectLevelLoad: ((reason: unknown) => void) | undefined;\n /** Default XR options used when calling {@link World.launchXR} without overrides. */\n public xrDefaults: import('../init/xr.js').XROptions | undefined;\n /** MCP runtime for framework-specific tools. Set automatically during World.create(). */\n public mcpRuntime?: MCPRuntime;\n\n /** Teardown callbacks run by {@link World.destroy} (render loop, global listeners). */\n private worldCleanupFuncs: Array<() => void> = [];\n /** Guards {@link World.destroy} so a second call is a no-op. */\n private destroyed = false;\n private authoredPlayerPosition?: Vector3;\n private authoredPlayerPositionListeners = new Set<\n (position: Vector3) => void\n >();\n /** Per-frame XR callbacks registered via {@link World.onXRFrame}. */\n private xrFrameCallbacks = new Set<OnXRFrameCallback>();\n\n /** Entity wrapping the XROrigin Group (persistent, survives level changes). */\n public playerEntity!: Entity;\n /** Entity wrapping the player head Group (persistent). */\n public playerHeadEntity!: Entity;\n /** Entities for all XR input space Groups under the player rig (all persistent). */\n public playerSpaceEntities!: {\n head: Entity;\n raySpaces: { left: Entity; right: Entity };\n gripSpaces: { left: Entity; right: Entity };\n indexTipSpaces: { left: Entity; right: Entity };\n };\n\n constructor() {\n super();\n const originalReleaseFunc = this.entityManager.releaseEntityInstance.bind(\n this.entityManager,\n );\n this.entityManager.releaseEntityInstance = (entity: Entity) => {\n originalReleaseFunc(entity);\n const obj = entity.object3D;\n if (obj) {\n const disposeAsset = obj.userData.iwsdkDisposeAsset;\n if (typeof disposeAsset === 'function') {\n obj.userData.iwsdkDisposeAsset = null;\n disposeAsset();\n }\n // Check if entity was marked for resource disposal\n if ((entity as any)._disposeResources) {\n this.disposeObject3DResources(obj);\n delete (entity as any)._disposeResources;\n }\n obj.removeFromParent();\n delete entity.object3D;\n }\n };\n }\n\n /**\n * Dispose of an Object3D's GPU resources (geometry, materials, textures).\n * Traverses all descendants and cleans up disposable resources.\n *\n * @remarks\n * This is called automatically when an entity is destroyed with `disposeResources: true`.\n * Use with caution when resources may be shared across multiple entities.\n */\n private disposeObject3DResources(object: Object3D): void {\n object.traverse((child: any) => {\n // Dispose geometry\n if (child.geometry) {\n child.geometry.dispose();\n }\n\n // Dispose materials (can be single or array)\n if (child.material) {\n const materials: Material[] = Array.isArray(child.material)\n ? child.material\n : [child.material];\n\n for (const material of materials) {\n // Dispose textures attached to the material\n for (const key of Object.keys(material)) {\n const value = (material as any)[key];\n if (value && typeof value.dispose === 'function') {\n // Check if it's a texture (has isTexture property)\n if (value.isTexture) {\n value.dispose();\n }\n }\n }\n material.dispose();\n }\n }\n });\n }\n\n createEntity(): Entity {\n return super.createEntity() as Entity;\n }\n\n /** @internal Publish scene-authored player placement to locomotion owners. */\n setAuthoredPlayerPosition(position: Vector3): void {\n this.authoredPlayerPosition ??= new Vector3();\n this.authoredPlayerPosition.copy(position);\n for (const listener of this.authoredPlayerPositionListeners) {\n listener(this.authoredPlayerPosition);\n }\n }\n\n /** @internal Reconcile a locomotion owner with scene-authored placement. */\n onAuthoredPlayerPosition(listener: (position: Vector3) => void): () => void {\n this.authoredPlayerPositionListeners.add(listener);\n if (this.authoredPlayerPosition != null) {\n listener(this.authoredPlayerPosition);\n }\n return () => this.authoredPlayerPositionListeners.delete(listener);\n }\n\n createTransformEntity(\n object?: Object3D,\n parentOrOptions?: Entity | { parent?: Entity; persistent?: boolean },\n ): Entity {\n const entity = super.createEntity() as Entity;\n const obj = object ?? new Object3D();\n const initialVisible = obj.visible;\n // Cast to pointer-events-capable Object3D event map for downstream typing\n entity.object3D = obj as unknown as Object3D<\n Object3DEventMap & PointerEventsMap\n >;\n\n let parent: Entity | undefined = undefined;\n let persistent = false;\n\n if (parentOrOptions) {\n if (typeof (parentOrOptions as any).index === 'number') {\n parent = parentOrOptions as Entity;\n } else {\n const opts = parentOrOptions as {\n parent?: Entity;\n persistent?: boolean;\n };\n parent = opts.parent;\n persistent = !!opts.persistent;\n }\n }\n\n if (!parent) {\n // Avoid self-parenting for the Scene root\n const isSceneObject = (obj: Object3D) => (obj as any).isScene === true;\n if (object && isSceneObject(object)) {\n parent = undefined;\n persistent = true;\n } else {\n parent = persistent\n ? this.sceneEntity\n : (this.activeLevel?.value ?? this.sceneEntity);\n }\n }\n\n const parentObject = parent?.object3D;\n if (parentObject && parentObject !== obj && obj.parent !== parentObject) {\n parentObject.add(obj);\n }\n\n entity.addComponent(Transform, { parent });\n entity.addComponent(Visibility, { isVisible: initialVisible });\n\n // Tag entity with current level, unless persistent\n if (!persistent) {\n entity.addComponent(LevelTag, { id: this.activeLevelId });\n }\n return entity;\n }\n\n /** Find an authored scene object by its stable scene node id. */\n getSceneObject<T extends Object3D = Object3D>(nodeId: string): T | undefined {\n let result: Object3D | undefined;\n for (const root of [\n this.activeLevel?.value?.object3D,\n this.playerEntity?.object3D,\n ]) {\n if (root == null) {\n continue;\n }\n root.traverse((object) => {\n if (\n !result &&\n object.userData.iwsdkSceneNodeId === nodeId &&\n (object.userData.iwsdkSceneLevelId == null ||\n object.userData.iwsdkSceneLevelId === this.activeLevelId)\n ) {\n result = object;\n }\n });\n }\n return result as T | undefined;\n }\n\n /** Find an authored scene object or throw a node-oriented lookup error. */\n requireSceneObject<T extends Object3D = Object3D>(nodeId: string): T {\n const object = this.getSceneObject<T>(nodeId);\n if (!object) {\n throw new Error(\n `Scene object \"${nodeId}\" was not found in the active level`,\n );\n }\n return object;\n }\n\n /** Find the ECS entity that owns an authored scene node. */\n getSceneEntity(nodeId: string): Entity | undefined {\n const index = this.getSceneObject(nodeId)?.entityIdx;\n return typeof index === 'number'\n ? (this.entityManager.getEntityByIndex(index) as Entity | undefined)\n : undefined;\n }\n\n /** Find the ECS entity for an authored scene node or throw. */\n requireSceneEntity(nodeId: string): Entity {\n const entity = this.getSceneEntity(nodeId);\n if (!entity) {\n throw new Error(\n `Scene entity \"${nodeId}\" was not found in the active level`,\n );\n }\n return entity;\n }\n\n launchXR(xrOptions?: Partial<XROptions>) {\n launchXR(this, xrOptions);\n }\n\n /** Request a native scene JSON level change; LevelSystem performs the work and resolves. */\n async loadLevel(url?: string): Promise<void> {\n this.rejectPendingLevelLoad();\n this.requestedLevelDocument = undefined;\n this.requestedLevelUrl = url ?? '';\n return new Promise<void>((resolve, reject) => {\n this._resolveLevelLoad = resolve;\n this._rejectLevelLoad = reject;\n });\n }\n\n /** Request an in-memory native scene document level load; LevelSystem performs the work and resolves. */\n async loadSceneDocument(document: SceneDocument): Promise<void> {\n this.rejectPendingLevelLoad();\n this.requestedLevelUrl = undefined;\n this.requestedLevelDocument = document;\n return new Promise<void>((resolve, reject) => {\n this._resolveLevelLoad = resolve;\n this._rejectLevelLoad = reject;\n });\n }\n\n exitXR() {\n this.session?.end();\n }\n\n private rejectPendingLevelLoad(): void {\n if (this._resolveLevelLoad == null && this._rejectLevelLoad == null) {\n return;\n }\n const reject = this._rejectLevelLoad;\n this._resolveLevelLoad = undefined;\n this._rejectLevelLoad = undefined;\n reject?.(new Error('Level load was superseded by a newer request'));\n }\n\n /**\n * The active {@link XRSession}, or `undefined` outside XR. Alias of\n * {@link World.session}, exposed for discoverability alongside\n * {@link World.xrFrame} and {@link World.xrReferenceSpace}.\n *\n * @remarks\n * Enable WebXR features your app needs (e.g. hit-test, depth sensing) via\n * `World.create(container, { xr: { features: { hitTest: true, depthSensing: true } } })`.\n * Once granted, they appear in `world.xrSession.enabledFeatures`.\n * @category XR Runtime\n */\n get xrSession(): XRSession | undefined {\n return this.session;\n }\n\n /**\n * The current {@link XRFrame} for this animation-loop tick, or `null` outside\n * XR. Use it for raw WebXR access such as `frame.getViewerPose(...)`,\n * `frame.getHitTestResults(...)`, or `frame.getDepthInformation(...)`.\n *\n * @remarks\n * Read this synchronously inside an {@link World.onXRFrame} callback or a\n * System `update()` — the frame object is only valid for the current tick and\n * must not be retained across frames.\n * @category XR Runtime\n */\n get xrFrame(): XRFrame | null {\n return this.renderer?.xr.getFrame() ?? null;\n }\n\n /**\n * The active {@link XRReferenceSpace} that IWSDK resolved for the session, or\n * `null` outside XR. Pass it to `XRHitTestResult.getPose(space)` or\n * `XRFrame.getViewerPose(space)` to obtain poses in the world's tracking space.\n * @category XR Runtime\n */\n get xrReferenceSpace(): XRReferenceSpace | null {\n return this.renderer?.xr.getReferenceSpace() ?? null;\n }\n\n /**\n * Register a callback that runs once per render-loop tick with the live\n * {@link XRFrame}, without having to author a System. Useful for per-pixel\n * world alignment, hit-test queries, depth sampling, and object-anchored\n * overlays.\n *\n * @param callback Invoked with `(frame, delta, time)` while an XR session is active.\n * @returns An unsubscribe function; call it to stop receiving frames.\n * @category XR Runtime\n * @example\n * ```ts\n * const source = await world.requestHitTestSource({ space: world.xrReferenceSpace! });\n * const stop = world.onXRFrame((frame) => {\n * if (!source) return;\n * const [hit] = world.getHitTestResults(source);\n * const pose = hit?.getPose(world.xrReferenceSpace!);\n * // place a world-locked label at pose.transform.position ...\n * });\n * ```\n */\n onXRFrame(callback: OnXRFrameCallback): () => void {\n this.xrFrameCallbacks.add(callback);\n return () => {\n this.xrFrameCallbacks.delete(callback);\n };\n }\n\n /**\n * Invoke all callbacks registered via {@link World.onXRFrame}. Called by the\n * render loop after systems update and before rendering.\n * @internal\n */\n runXRFrameCallbacks(frame: XRFrame, delta: number, time: number): void {\n if (this.xrFrameCallbacks.size === 0) {\n return;\n }\n for (const callback of this.xrFrameCallbacks) {\n try {\n callback(frame, delta, time);\n } catch (error) {\n console.error('[World] onXRFrame callback failed:', error);\n }\n }\n }\n\n /**\n * Request an {@link XRHitTestSource} on the active session. Requires the\n * `hit-test` feature (enable via\n * `World.create(container, { xr: { features: { hitTest: true } } })`).\n *\n * @returns The hit-test source, or `undefined` if there is no active session\n * or the request is unavailable/unsupported. The underlying\n * `XRSession.requestHitTestSource` rejects when the `hit-test` feature was\n * not granted; that rejection is caught and surfaced as `undefined` (logged\n * as a warning) so callers can `await` without their own `try/catch`.\n * @category XR Runtime\n */\n async requestHitTestSource(\n options: XRHitTestOptionsInit,\n ): Promise<XRHitTestSource | undefined> {\n const session = this.session;\n if (!session?.requestHitTestSource) {\n return undefined;\n }\n try {\n return await session.requestHitTestSource(options);\n } catch (error) {\n console.warn(\n \"[World] requestHitTestSource failed (is the 'hit-test' feature enabled?):\",\n error,\n );\n return undefined;\n }\n }\n\n /**\n * Request an {@link XRTransientInputHitTestSource} (e.g. for screen taps or\n * transient controllers). Requires the `hit-test` feature.\n *\n * @returns The transient hit-test source, or `undefined` if unavailable. As\n * with {@link World.requestHitTestSource}, a rejection from the underlying\n * WebXR call (e.g. feature not granted) is caught and surfaced as\n * `undefined`.\n * @category XR Runtime\n */\n async requestHitTestSourceForTransientInput(\n options: XRTransientInputHitTestOptionsInit,\n ): Promise<XRTransientInputHitTestSource | undefined> {\n const session = this.session;\n if (!session?.requestHitTestSourceForTransientInput) {\n return undefined;\n }\n try {\n return await session.requestHitTestSourceForTransientInput(options);\n } catch (error) {\n console.warn(\n \"[World] requestHitTestSourceForTransientInput failed (is the 'hit-test' feature enabled?):\",\n error,\n );\n return undefined;\n }\n }\n\n /**\n * Read the hit-test results for a source from the current {@link XRFrame}.\n * Returns an empty array when there is no active frame.\n * @category XR Runtime\n */\n getHitTestResults(source: XRHitTestSource): XRHitTestResult[] {\n const frame = this.xrFrame;\n if (!frame) {\n return [];\n }\n return frame.getHitTestResults(source);\n }\n\n /**\n * Register a teardown callback to run on {@link World.destroy}. Used by the\n * initializer to undo global side effects such as the render loop and the\n * window `resize` listener.\n *\n * @internal\n */\n addCleanup(fn: () => void): void {\n this.worldCleanupFuncs.push(fn);\n }\n\n /**\n * Tear down the world: destroy all registered systems (running their\n * `cleanupFuncs`), then run world-level teardown callbacks (stop the render\n * loop, remove the window `resize` listener). After calling this the world\n * instance should be discarded.\n *\n * @remarks\n * Not invoked during normal single-world app usage (where the world lives for\n * the page lifetime); provided so tests, hot-reload, and multi-world hosts can\n * release the render loop, listeners, and per-system subscriptions instead of\n * leaking them. Individual failures are caught so one bad teardown does not\n * block the rest.\n */\n destroy(): void {\n // Idempotent: getSystems() keeps returning the same systems, so without\n // this guard a second destroy() would re-run every system's destroy().\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n for (const system of this.getSystems()) {\n try {\n (system as { destroy?: () => void }).destroy?.();\n } catch (error) {\n console.error('[World] system destroy failed:', error);\n }\n }\n const fns = this.worldCleanupFuncs.splice(0);\n for (const fn of fns) {\n try {\n fn();\n } catch (error) {\n console.error('[World] cleanup failed:', error);\n }\n }\n }\n\n update(delta: number, time: number): void {\n super.update(delta, time);\n }\n\n registerComponent(component: AnyComponent): this {\n return super.registerComponent(component);\n }\n\n // Level root helpers\n getActiveRoot(): Object3D {\n return this.activeLevel?.value?.object3D ?? this.scene;\n }\n\n getPersistentRoot(): Object3D {\n return this.scene;\n }\n\n /**\n * Initialize a new WebXR world with all required systems and setup\n *\n * @param sceneContainer - HTML container for the renderer canvas\n * @param assets - Asset manifest for preloading\n * @param options - Configuration options for the world\n * @returns Promise that resolves to the initialized World instance\n */\n /**\n * Initialize a new WebXR world with renderer, scene, default systems, and optional level.\n *\n * @param container HTML container to which the renderer canvas will be appended.\n * @param options Runtime configuration, see {@link WorldOptions}.\n * @returns A promise that resolves to the initialized {@link World}.\n *\n * @remarks\n * - This call enables the Input, UI and Audio systems by default.\n * - Use {@link WorldOptions.features} to enable Locomotion or Grabbing.\n * - If {@link WorldOptions.level} is provided, the LevelSystem will load it after assets are preloaded.\n * @see /getting-started/01-hello-xr\n */\n static async create(\n container: HTMLElement,\n options?: WorldOptions,\n ): Promise<World> {\n armSessionGrantCaptureForOptions(options?.xr);\n const { initializeWorld } = await import('../init/world-initializer.js');\n return initializeWorld(container, options);\n }\n}\n"],"names":["ElicsWorld"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dome-gradient.js","sources":["../../src/environment/dome-gradient.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;AACE,IAAA,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AAClE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACtE,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;IACpE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,kCAAkC;;;;"}
1
+ {"version":3,"file":"dome-gradient.js","sources":["../../src/environment/dome-gradient.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Types, createComponent } from '../ecs/component.js';\n/**\n * Procedural gradient background dome.\n *\n * @remarks\n * - Renders an inward-facing, translation-free sky sphere behind the scene.\n * - Clip-space depth keeps it independent of camera near/far planes.\n * - Colors are Unity‑style sky/equator/ground; intensity multiplies shader output.\n *\n * @category Environment & Lighting\n */\nexport const DomeGradient = createComponent(\n 'DomeGradient',\n {\n sky: { type: Types.Color, default: [0.2423, 0.6172, 0.8308, 1.0] },\n equator: { type: Types.Color, default: [0.6584, 0.7084, 0.7913, 1.0] },\n ground: { type: Types.Color, default: [0.807, 0.7758, 0.7454, 1.0] },\n intensity: { type: Types.Float32, default: 1.0 },\n _needsUpdate: { type: Types.Boolean, default: true },\n },\n 'Background dome using a gradient',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;AACE,IAAA,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AAClE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;AACtE,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;IACpE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,kCAAkC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"dome-texture.js","sources":["../../src/environment/dome-texture.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;AAQG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;AACE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;IACD,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IACjD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,wDAAwD;;;;"}
1
+ {"version":3,"file":"dome-texture.js","sources":["../../src/environment/dome-texture.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Types, createComponent } from '../ecs/component.js';\n/**\n * Background dome driven by a single equirectangular texture.\n *\n * @remarks\n * - `src` may be HDR/EXR or LDR (png/jpg/ktx2). Mapping is set to equirect when needed.\n * - Affects only `scene.background` and optional `scene.backgroundRotation`/`backgroundIntensity`.\n *\n * @category Environment & Lighting\n */\nexport const DomeTexture = createComponent(\n 'DomeTexture',\n {\n src: {\n type: Types.FilePath,\n default: '',\n fileTypes: '.png,.jpg,.ktx2,.hdr,.exr',\n subfolder: 'textures',\n },\n blurriness: { type: Types.Float32, default: 0.0 },\n intensity: { type: Types.Float32, default: 1.0 },\n rotation: { type: Types.Vec3, default: [0, 0, 0] }, // radians [x,y,z]\n _needsUpdate: { type: Types.Boolean, default: true },\n },\n 'Background dome using a single equirectangular texture',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;AAQG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;AACE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;IACD,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IACjD,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACrD,EACD,wDAAwD;;;;"}