@iwsdk/core 0.4.2 → 0.5.0

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 (314) hide show
  1. package/README.md +4 -7
  2. package/dist/asset/asset-manager.d.ts +136 -8
  3. package/dist/asset/asset-manager.d.ts.map +1 -1
  4. package/dist/asset/asset-manager.js +491 -47
  5. package/dist/asset/asset-manager.js.map +1 -1
  6. package/dist/asset/cache-manager.d.ts +4 -2
  7. package/dist/asset/cache-manager.d.ts.map +1 -1
  8. package/dist/asset/cache-manager.js +10 -3
  9. package/dist/asset/cache-manager.js.map +1 -1
  10. package/dist/asset/loaders/audio-loader.d.ts +1 -1
  11. package/dist/asset/loaders/audio-loader.d.ts.map +1 -1
  12. package/dist/asset/loaders/audio-loader.js +8 -26
  13. package/dist/asset/loaders/audio-loader.js.map +1 -1
  14. package/dist/asset/loaders/cached-asset-load.d.ts +35 -0
  15. package/dist/asset/loaders/cached-asset-load.d.ts.map +1 -0
  16. package/dist/asset/loaders/cached-asset-load.js +100 -0
  17. package/dist/asset/loaders/cached-asset-load.js.map +1 -0
  18. package/dist/asset/loaders/gltf-loader.d.ts +28 -1
  19. package/dist/asset/loaders/gltf-loader.d.ts.map +1 -1
  20. package/dist/asset/loaders/gltf-loader.js +254 -33
  21. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  22. package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
  23. package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
  24. package/dist/asset/loaders/hdr-texture-loader.js +19 -29
  25. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  26. package/dist/asset/loaders/texture-loader.d.ts +1 -1
  27. package/dist/asset/loaders/texture-loader.d.ts.map +1 -1
  28. package/dist/asset/loaders/texture-loader.js +9 -26
  29. package/dist/asset/loaders/texture-loader.js.map +1 -1
  30. package/dist/asset/loaders/uikitml-loader.d.ts +12 -0
  31. package/dist/asset/loaders/uikitml-loader.d.ts.map +1 -0
  32. package/dist/asset/loaders/uikitml-loader.js +44 -0
  33. package/dist/asset/loaders/uikitml-loader.js.map +1 -0
  34. package/dist/audio/audio-pool.d.ts +7 -0
  35. package/dist/audio/audio-pool.d.ts.map +1 -1
  36. package/dist/audio/audio-pool.js.map +1 -1
  37. package/dist/audio/audio-system.d.ts +1 -0
  38. package/dist/audio/audio-system.d.ts.map +1 -1
  39. package/dist/audio/audio-system.js +16 -2
  40. package/dist/audio/audio-system.js.map +1 -1
  41. package/dist/camera/camera-system.d.ts.map +1 -1
  42. package/dist/camera/camera-system.js +5 -3
  43. package/dist/camera/camera-system.js.map +1 -1
  44. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  45. package/dist/depth/depth-sensing-system.js +31 -10
  46. package/dist/depth/depth-sensing-system.js.map +1 -1
  47. package/dist/ecs/builtin-components.d.ts +1239 -0
  48. package/dist/ecs/builtin-components.d.ts.map +1 -0
  49. package/dist/ecs/builtin-components.js +87 -0
  50. package/dist/ecs/builtin-components.js.map +1 -0
  51. package/dist/ecs/component-editor-metadata.d.ts +19 -0
  52. package/dist/ecs/component-editor-metadata.d.ts.map +1 -0
  53. package/dist/ecs/component-editor-metadata.js +19 -0
  54. package/dist/ecs/component-editor-metadata.js.map +1 -0
  55. package/dist/ecs/component-manifest.d.ts +24 -0
  56. package/dist/ecs/component-manifest.d.ts.map +1 -0
  57. package/dist/ecs/component-manifest.js +121 -0
  58. package/dist/ecs/component-manifest.js.map +1 -0
  59. package/dist/ecs/component.d.ts +1 -0
  60. package/dist/ecs/component.d.ts.map +1 -1
  61. package/dist/ecs/entity.d.ts +20 -2
  62. package/dist/ecs/entity.d.ts.map +1 -1
  63. package/dist/ecs/entity.js +59 -3
  64. package/dist/ecs/entity.js.map +1 -1
  65. package/dist/ecs/index.d.ts +3 -1
  66. package/dist/ecs/index.d.ts.map +1 -1
  67. package/dist/ecs/system.d.ts +9 -0
  68. package/dist/ecs/system.d.ts.map +1 -1
  69. package/dist/ecs/system.js.map +1 -1
  70. package/dist/ecs/world.d.ts +158 -4
  71. package/dist/ecs/world.d.ts.map +1 -1
  72. package/dist/ecs/world.js +304 -5
  73. package/dist/ecs/world.js.map +1 -1
  74. package/dist/environment/dome-gradient.d.ts +2 -1
  75. package/dist/environment/dome-gradient.d.ts.map +1 -1
  76. package/dist/environment/dome-gradient.js +2 -1
  77. package/dist/environment/dome-gradient.js.map +1 -1
  78. package/dist/environment/environment-system.d.ts +19 -3
  79. package/dist/environment/environment-system.d.ts.map +1 -1
  80. package/dist/environment/environment-system.js +78 -48
  81. package/dist/environment/environment-system.js.map +1 -1
  82. package/dist/environment/gradient-environment.d.ts.map +1 -1
  83. package/dist/environment/gradient-environment.js +13 -7
  84. package/dist/environment/gradient-environment.js.map +1 -1
  85. package/dist/environment/scene-ar-environment.d.ts +39 -0
  86. package/dist/environment/scene-ar-environment.d.ts.map +1 -0
  87. package/dist/environment/scene-ar-environment.js +93 -0
  88. package/dist/environment/scene-ar-environment.js.map +1 -0
  89. package/dist/grab/grab-helpers.d.ts +39 -0
  90. package/dist/grab/grab-helpers.d.ts.map +1 -0
  91. package/dist/grab/grab-helpers.js +59 -0
  92. package/dist/grab/grab-helpers.js.map +1 -0
  93. package/dist/grab/grab-system.d.ts +45 -0
  94. package/dist/grab/grab-system.d.ts.map +1 -1
  95. package/dist/grab/grab-system.js +67 -5
  96. package/dist/grab/grab-system.js.map +1 -1
  97. package/dist/grab/grab-warnings.d.ts +14 -0
  98. package/dist/grab/grab-warnings.d.ts.map +1 -0
  99. package/dist/grab/grab-warnings.js +53 -0
  100. package/dist/grab/grab-warnings.js.map +1 -0
  101. package/dist/grab/handles.d.ts.map +1 -1
  102. package/dist/grab/handles.js +8 -3
  103. package/dist/grab/handles.js.map +1 -1
  104. package/dist/index.d.ts +4 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +42 -16
  107. package/dist/index.js.map +1 -1
  108. package/dist/init/world-initializer.d.ts +11 -7
  109. package/dist/init/world-initializer.d.ts.map +1 -1
  110. package/dist/init/world-initializer.js +118 -57
  111. package/dist/init/world-initializer.js.map +1 -1
  112. package/dist/init/xr.d.ts +0 -1
  113. package/dist/init/xr.d.ts.map +1 -1
  114. package/dist/init/xr.js +12 -3
  115. package/dist/init/xr.js.map +1 -1
  116. package/dist/input/input-system.d.ts.map +1 -1
  117. package/dist/input/input-system.js +26 -11
  118. package/dist/input/input-system.js.map +1 -1
  119. package/dist/layers/xr-layer-state.d.ts +47 -0
  120. package/dist/layers/xr-layer-state.d.ts.map +1 -0
  121. package/dist/layers/xr-layer-state.js +23 -0
  122. package/dist/layers/xr-layer-state.js.map +1 -0
  123. package/dist/layers/xr-layer-system.d.ts +45 -93
  124. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  125. package/dist/layers/xr-layer-system.js +4 -25
  126. package/dist/layers/xr-layer-system.js.map +1 -1
  127. package/dist/level/index.d.ts +6 -2
  128. package/dist/level/index.d.ts.map +1 -1
  129. package/dist/level/level-component-applier.d.ts +24 -0
  130. package/dist/level/level-component-applier.d.ts.map +1 -0
  131. package/dist/level/level-component-applier.js +199 -0
  132. package/dist/level/level-component-applier.js.map +1 -0
  133. package/dist/level/level-player-rig.d.ts +17 -0
  134. package/dist/level/level-player-rig.d.ts.map +1 -0
  135. package/dist/level/level-player-rig.js +113 -0
  136. package/dist/level/level-player-rig.js.map +1 -0
  137. package/dist/level/level-scene-environment.d.ts +28 -0
  138. package/dist/level/level-scene-environment.d.ts.map +1 -0
  139. package/dist/level/level-scene-environment.js +121 -0
  140. package/dist/level/level-scene-environment.js.map +1 -0
  141. package/dist/level/level-scene-json-importer.d.ts +53 -0
  142. package/dist/level/level-scene-json-importer.d.ts.map +1 -0
  143. package/dist/level/level-scene-json-importer.js +256 -0
  144. package/dist/level/level-scene-json-importer.js.map +1 -0
  145. package/dist/level/level-scene-material.d.ts +22 -0
  146. package/dist/level/level-scene-material.d.ts.map +1 -0
  147. package/dist/level/level-scene-material.js +231 -0
  148. package/dist/level/level-scene-material.js.map +1 -0
  149. package/dist/level/level-scene-object.d.ts +49 -0
  150. package/dist/level/level-scene-object.d.ts.map +1 -0
  151. package/dist/level/level-scene-object.js +396 -0
  152. package/dist/level/level-scene-object.js.map +1 -0
  153. package/dist/level/level-scene-primitive.d.ts +21 -0
  154. package/dist/level/level-scene-primitive.d.ts.map +1 -0
  155. package/dist/level/level-scene-primitive.js +159 -0
  156. package/dist/level/level-scene-primitive.js.map +1 -0
  157. package/dist/level/level-system.d.ts +14 -20
  158. package/dist/level/level-system.d.ts.map +1 -1
  159. package/dist/level/level-system.js +114 -49
  160. package/dist/level/level-system.js.map +1 -1
  161. package/dist/lighting/index.d.ts +10 -0
  162. package/dist/lighting/index.d.ts.map +1 -0
  163. package/dist/lighting/index.js +4 -0
  164. package/dist/lighting/index.js.map +1 -0
  165. package/dist/lighting/light-binding.d.ts +76 -0
  166. package/dist/lighting/light-binding.d.ts.map +1 -0
  167. package/dist/lighting/light-binding.js +229 -0
  168. package/dist/lighting/light-binding.js.map +1 -0
  169. package/dist/lighting/light-components.d.ts +885 -0
  170. package/dist/lighting/light-components.d.ts.map +1 -0
  171. package/dist/lighting/light-components.js +146 -0
  172. package/dist/lighting/light-components.js.map +1 -0
  173. package/dist/lighting/light-system.d.ts +919 -0
  174. package/dist/lighting/light-system.d.ts.map +1 -0
  175. package/dist/lighting/light-system.js +244 -0
  176. package/dist/lighting/light-system.js.map +1 -0
  177. package/dist/locomotion/locomotion-environment.d.ts +27 -0
  178. package/dist/locomotion/locomotion-environment.d.ts.map +1 -0
  179. package/dist/locomotion/locomotion-environment.js +22 -0
  180. package/dist/locomotion/locomotion-environment.js.map +1 -0
  181. package/dist/locomotion/locomotion.d.ts +5 -34
  182. package/dist/locomotion/locomotion.d.ts.map +1 -1
  183. package/dist/locomotion/locomotion.js +33 -31
  184. package/dist/locomotion/locomotion.js.map +1 -1
  185. package/dist/locomotion/materials/line.js +1 -1
  186. package/dist/locomotion/slide.d.ts.map +1 -1
  187. package/dist/locomotion/slide.js +2 -2
  188. package/dist/locomotion/slide.js.map +1 -1
  189. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  190. package/dist/mcp/ecs-debug-tools.js +10 -2
  191. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  192. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  193. package/dist/mcp/mcp-runtime.js +4 -1
  194. package/dist/mcp/mcp-runtime.js.map +1 -1
  195. package/dist/mcp/scene-tools.d.ts +152 -1
  196. package/dist/mcp/scene-tools.d.ts.map +1 -1
  197. package/dist/mcp/scene-tools.js +538 -8
  198. package/dist/mcp/scene-tools.js.map +1 -1
  199. package/dist/physics/index.js +11 -4
  200. package/dist/physics/index.js.map +1 -1
  201. package/dist/physics/physics-system.d.ts +704 -11
  202. package/dist/physics/physics-system.d.ts.map +1 -1
  203. package/dist/physics/physics-system.js +307 -25
  204. package/dist/physics/physics-system.js.map +1 -1
  205. package/dist/physics/physicsBody.d.ts +40 -1
  206. package/dist/physics/physicsBody.d.ts.map +1 -1
  207. package/dist/physics/physicsBody.js +39 -0
  208. package/dist/physics/physicsBody.js.map +1 -1
  209. package/dist/physics/physicsManipulation.d.ts +1 -1
  210. package/dist/physics/physicsManipulation.d.ts.map +1 -1
  211. package/dist/physics/physicsShape.d.ts +5 -3
  212. package/dist/physics/physicsShape.d.ts.map +1 -1
  213. package/dist/physics/physicsShape.js +2 -1
  214. package/dist/physics/physicsShape.js.map +1 -1
  215. package/dist/physics/utils.d.ts +10 -0
  216. package/dist/physics/utils.d.ts.map +1 -1
  217. package/dist/physics/utils.js +82 -48
  218. package/dist/physics/utils.js.map +1 -1
  219. package/dist/project/index.d.ts +11 -0
  220. package/dist/project/index.d.ts.map +1 -0
  221. package/dist/project/index.js +5 -0
  222. package/dist/project/index.js.map +1 -0
  223. package/dist/project/normalize.d.ts +19 -0
  224. package/dist/project/normalize.d.ts.map +1 -0
  225. package/dist/project/normalize.js +206 -0
  226. package/dist/project/normalize.js.map +1 -0
  227. package/dist/project/paths.d.ts +21 -0
  228. package/dist/project/paths.d.ts.map +1 -0
  229. package/dist/project/paths.js +75 -0
  230. package/dist/project/paths.js.map +1 -0
  231. package/dist/project/types.d.ts +159 -0
  232. package/dist/project/types.d.ts.map +1 -0
  233. package/dist/project/types.js +11 -0
  234. package/dist/project/types.js.map +1 -0
  235. package/dist/project/validation.d.ts +17 -0
  236. package/dist/project/validation.d.ts.map +1 -0
  237. package/dist/project/validation.js +501 -0
  238. package/dist/project/validation.js.map +1 -0
  239. package/dist/scene-understanding/scene-understanding-system.d.ts +23 -2
  240. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  241. package/dist/scene-understanding/scene-understanding-system.js +76 -54
  242. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  243. package/dist/schemas/iwsdk-project.v1.schema.json +305 -0
  244. package/dist/transform/transform-component.d.ts +32 -0
  245. package/dist/transform/transform-component.d.ts.map +1 -0
  246. package/dist/transform/transform-component.js +24 -0
  247. package/dist/transform/transform-component.js.map +1 -0
  248. package/dist/transform/transform.d.ts +9 -42
  249. package/dist/transform/transform.d.ts.map +1 -1
  250. package/dist/transform/transform.js +8 -25
  251. package/dist/transform/transform.js.map +1 -1
  252. package/dist/ui/document.d.ts +9 -2
  253. package/dist/ui/document.d.ts.map +1 -1
  254. package/dist/ui/document.js +30 -5
  255. package/dist/ui/document.js.map +1 -1
  256. package/dist/ui/follow-component.d.ts +57 -0
  257. package/dist/ui/follow-component.d.ts.map +1 -0
  258. package/dist/ui/follow-component.js +38 -0
  259. package/dist/ui/follow-component.js.map +1 -0
  260. package/dist/ui/follow.d.ts +28 -102
  261. package/dist/ui/follow.d.ts.map +1 -1
  262. package/dist/ui/follow.js +10 -48
  263. package/dist/ui/follow.js.map +1 -1
  264. package/dist/ui/index.d.ts +3 -0
  265. package/dist/ui/index.d.ts.map +1 -1
  266. package/dist/ui/panel-components.d.ts +29 -0
  267. package/dist/ui/panel-components.d.ts.map +1 -0
  268. package/dist/ui/panel-components.js +22 -0
  269. package/dist/ui/panel-components.js.map +1 -0
  270. package/dist/ui/screenspace-component.d.ts +39 -0
  271. package/dist/ui/screenspace-component.d.ts.map +1 -0
  272. package/dist/ui/screenspace-component.js +21 -0
  273. package/dist/ui/screenspace-component.js.map +1 -0
  274. package/dist/ui/screenspace.d.ts +47 -135
  275. package/dist/ui/screenspace.d.ts.map +1 -1
  276. package/dist/ui/screenspace.js +127 -65
  277. package/dist/ui/screenspace.js.map +1 -1
  278. package/dist/ui/ui.d.ts +20 -122
  279. package/dist/ui/ui.d.ts.map +1 -1
  280. package/dist/ui/ui.js +44 -107
  281. package/dist/ui/ui.js.map +1 -1
  282. package/dist/ui/uikitml-asset.d.ts +25 -0
  283. package/dist/ui/uikitml-asset.d.ts.map +1 -0
  284. package/dist/ui/uikitml-asset.js +56 -0
  285. package/dist/ui/uikitml-asset.js.map +1 -0
  286. package/dist/ui/uikitml.d.ts +41 -0
  287. package/dist/ui/uikitml.d.ts.map +1 -0
  288. package/dist/ui/uikitml.js +119 -0
  289. package/dist/ui/uikitml.js.map +1 -0
  290. package/dist/vendor/draco/gltf/draco_encoder.js +0 -0
  291. package/dist/version.d.ts +1 -1
  292. package/dist/version.js +1 -1
  293. package/dist/visibility/visibility-component.d.ts +14 -0
  294. package/dist/visibility/visibility-component.d.ts.map +1 -0
  295. package/dist/visibility/visibility-component.js +15 -0
  296. package/dist/visibility/visibility-component.js.map +1 -0
  297. package/dist/visibility/visibility.d.ts +3 -10
  298. package/dist/visibility/visibility.d.ts.map +1 -1
  299. package/dist/visibility/visibility.js +9 -12
  300. package/dist/visibility/visibility.js.map +1 -1
  301. package/package.json +48 -19
  302. package/LICENSE +0 -21
  303. package/dist/ecs/component-registry.d.ts +0 -54
  304. package/dist/ecs/component-registry.d.ts.map +0 -1
  305. package/dist/ecs/component-registry.js +0 -86
  306. package/dist/ecs/component-registry.js.map +0 -1
  307. package/dist/level/level-entity-creator.d.ts +0 -27
  308. package/dist/level/level-entity-creator.d.ts.map +0 -1
  309. package/dist/level/level-entity-creator.js +0 -108
  310. package/dist/level/level-entity-creator.js.map +0 -1
  311. package/dist/level/level-glxf-importer.d.ts +0 -23
  312. package/dist/level/level-glxf-importer.d.ts.map +0 -1
  313. package/dist/level/level-glxf-importer.js +0 -40
  314. package/dist/level/level-glxf-importer.js.map +0 -1
@@ -4,15 +4,17 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
+ import type { SceneDocument } from '@iwsdk/scene-composition';
8
+ import type { SceneComponentCatalog } from '@iwsdk/scene-composition';
7
9
  import { XROrigin } from '@iwsdk/xr-input';
8
10
  import { Signal } from '@preact/signals-core';
9
11
  import { AnyComponent, World as ElicsWorld } from 'elics';
10
- import { AssetManager } from '../asset/index.js';
12
+ import { AssetManager, RenderableAssetRegistry } from '../asset/index.js';
11
13
  import type { WorldOptions } from '../init/world-initializer.js';
12
14
  import type { XROptions } from '../init/xr.js';
13
15
  import type { InputManager } from '../input/index.js';
14
16
  import type { MCPRuntime } from '../mcp/index.js';
15
- import { Object3D, PerspectiveCamera, Scene, WebGLRenderer } from '../runtime/index.js';
17
+ import { Object3D, PerspectiveCamera, Scene, Vector3, WebGLRenderer } from '../runtime/index.js';
16
18
  import { Entity } from './entity.js';
17
19
  export declare enum VisibilityState {
18
20
  NonImmersive = "non-immersive",
@@ -25,6 +27,17 @@ export type GradientColors = {
25
27
  equator: number;
26
28
  ground: number;
27
29
  };
30
+ /**
31
+ * Callback invoked once per render-loop tick while an XR session is active,
32
+ * registered via {@link World.onXRFrame}.
33
+ *
34
+ * @param frame The live {@link XRFrame} for this tick. Only valid synchronously
35
+ * inside the callback — do not retain it across ticks.
36
+ * @param delta Seconds since the previous frame.
37
+ * @param time Accumulated render-loop time in seconds (monotonic within a session).
38
+ * @category XR Runtime
39
+ */
40
+ export type OnXRFrameCallback = (frame: XRFrame, delta: number, time: number) => void;
28
41
  /**
29
42
  * World is the root ECS container, Three.js scene/renderer owner, and XR session gateway.
30
43
  *
@@ -44,7 +57,7 @@ export type GradientColors = {
44
57
  * const world = await World.create(container, {
45
58
  * xr: { sessionMode: SessionMode.ImmersiveVR },
46
59
  * features: { enableLocomotion: true, enableGrabbing: true },
47
- * level: '/glxf/Composition.glxf'
60
+ * level: '/scenes/main.iwsdk.scene.json'
48
61
  * });
49
62
  * ```
50
63
  */
@@ -52,6 +65,10 @@ export declare class World extends ElicsWorld {
52
65
  input: InputManager;
53
66
  player: XROrigin;
54
67
  assetManager: typeof AssetManager;
68
+ /** Renderable assets registered by the application manifest. */
69
+ assets: RenderableAssetRegistry;
70
+ /** Component definitions shared by scene validation and editor tooling. */
71
+ componentCatalog: SceneComponentCatalog;
55
72
  scene: Scene;
56
73
  sceneEntity: Entity;
57
74
  activeLevel: Signal<Entity>;
@@ -61,12 +78,24 @@ export declare class World extends ElicsWorld {
61
78
  renderer: WebGLRenderer;
62
79
  session: XRSession | undefined;
63
80
  visibilityState: Signal<VisibilityState>;
81
+ /** Whether this world was created with XR support enabled. */
82
+ xrEnabled: boolean;
64
83
  requestedLevelUrl: string | undefined;
84
+ requestedLevelDocument: SceneDocument | undefined;
65
85
  _resolveLevelLoad: (() => void) | undefined;
86
+ _rejectLevelLoad: ((reason: unknown) => void) | undefined;
66
87
  /** Default XR options used when calling {@link World.launchXR} without overrides. */
67
88
  xrDefaults: import('../init/xr.js').XROptions | undefined;
68
89
  /** MCP runtime for framework-specific tools. Set automatically during World.create(). */
69
90
  mcpRuntime?: MCPRuntime;
91
+ /** Teardown callbacks run by {@link World.destroy} (render loop, global listeners). */
92
+ private worldCleanupFuncs;
93
+ /** Guards {@link World.destroy} so a second call is a no-op. */
94
+ private destroyed;
95
+ private authoredPlayerPosition?;
96
+ private authoredPlayerPositionListeners;
97
+ /** Per-frame XR callbacks registered via {@link World.onXRFrame}. */
98
+ private xrFrameCallbacks;
70
99
  /** Entity wrapping the XROrigin Group (persistent, survives level changes). */
71
100
  playerEntity: Entity;
72
101
  /** Entity wrapping the player head Group (persistent). */
@@ -98,14 +127,139 @@ export declare class World extends ElicsWorld {
98
127
  */
99
128
  private disposeObject3DResources;
100
129
  createEntity(): Entity;
130
+ /** @internal Publish scene-authored player placement to locomotion owners. */
131
+ setAuthoredPlayerPosition(position: Vector3): void;
132
+ /** @internal Reconcile a locomotion owner with scene-authored placement. */
133
+ onAuthoredPlayerPosition(listener: (position: Vector3) => void): () => void;
101
134
  createTransformEntity(object?: Object3D, parentOrOptions?: Entity | {
102
135
  parent?: Entity;
103
136
  persistent?: boolean;
104
137
  }): Entity;
138
+ /** Find an authored scene object by its stable scene node id. */
139
+ getSceneObject<T extends Object3D = Object3D>(nodeId: string): T | undefined;
140
+ /** Find an authored scene object or throw a node-oriented lookup error. */
141
+ requireSceneObject<T extends Object3D = Object3D>(nodeId: string): T;
142
+ /** Find the ECS entity that owns an authored scene node. */
143
+ getSceneEntity(nodeId: string): Entity | undefined;
144
+ /** Find the ECS entity for an authored scene node or throw. */
145
+ requireSceneEntity(nodeId: string): Entity;
105
146
  launchXR(xrOptions?: Partial<XROptions>): void;
106
- /** Request a level change; LevelSystem performs the work and resolves. */
147
+ /** Request a native scene JSON level change; LevelSystem performs the work and resolves. */
107
148
  loadLevel(url?: string): Promise<void>;
149
+ /** Request an in-memory native scene document level load; LevelSystem performs the work and resolves. */
150
+ loadSceneDocument(document: SceneDocument): Promise<void>;
108
151
  exitXR(): void;
152
+ private rejectPendingLevelLoad;
153
+ /**
154
+ * The active {@link XRSession}, or `undefined` outside XR. Alias of
155
+ * {@link World.session}, exposed for discoverability alongside
156
+ * {@link World.xrFrame} and {@link World.xrReferenceSpace}.
157
+ *
158
+ * @remarks
159
+ * Enable WebXR features your app needs (e.g. hit-test, depth sensing) via
160
+ * `World.create(container, { xr: { features: { hitTest: true, depthSensing: true } } })`.
161
+ * Once granted, they appear in `world.xrSession.enabledFeatures`.
162
+ * @category XR Runtime
163
+ */
164
+ get xrSession(): XRSession | undefined;
165
+ /**
166
+ * The current {@link XRFrame} for this animation-loop tick, or `null` outside
167
+ * XR. Use it for raw WebXR access such as `frame.getViewerPose(...)`,
168
+ * `frame.getHitTestResults(...)`, or `frame.getDepthInformation(...)`.
169
+ *
170
+ * @remarks
171
+ * Read this synchronously inside an {@link World.onXRFrame} callback or a
172
+ * System `update()` — the frame object is only valid for the current tick and
173
+ * must not be retained across frames.
174
+ * @category XR Runtime
175
+ */
176
+ get xrFrame(): XRFrame | null;
177
+ /**
178
+ * The active {@link XRReferenceSpace} that IWSDK resolved for the session, or
179
+ * `null` outside XR. Pass it to `XRHitTestResult.getPose(space)` or
180
+ * `XRFrame.getViewerPose(space)` to obtain poses in the world's tracking space.
181
+ * @category XR Runtime
182
+ */
183
+ get xrReferenceSpace(): XRReferenceSpace | null;
184
+ /**
185
+ * Register a callback that runs once per render-loop tick with the live
186
+ * {@link XRFrame}, without having to author a System. Useful for per-pixel
187
+ * world alignment, hit-test queries, depth sampling, and object-anchored
188
+ * overlays.
189
+ *
190
+ * @param callback Invoked with `(frame, delta, time)` while an XR session is active.
191
+ * @returns An unsubscribe function; call it to stop receiving frames.
192
+ * @category XR Runtime
193
+ * @example
194
+ * ```ts
195
+ * const source = await world.requestHitTestSource({ space: world.xrReferenceSpace! });
196
+ * const stop = world.onXRFrame((frame) => {
197
+ * if (!source) return;
198
+ * const [hit] = world.getHitTestResults(source);
199
+ * const pose = hit?.getPose(world.xrReferenceSpace!);
200
+ * // place a world-locked label at pose.transform.position ...
201
+ * });
202
+ * ```
203
+ */
204
+ onXRFrame(callback: OnXRFrameCallback): () => void;
205
+ /**
206
+ * Invoke all callbacks registered via {@link World.onXRFrame}. Called by the
207
+ * render loop after systems update and before rendering.
208
+ * @internal
209
+ */
210
+ runXRFrameCallbacks(frame: XRFrame, delta: number, time: number): void;
211
+ /**
212
+ * Request an {@link XRHitTestSource} on the active session. Requires the
213
+ * `hit-test` feature (enable via
214
+ * `World.create(container, { xr: { features: { hitTest: true } } })`).
215
+ *
216
+ * @returns The hit-test source, or `undefined` if there is no active session
217
+ * or the request is unavailable/unsupported. The underlying
218
+ * `XRSession.requestHitTestSource` rejects when the `hit-test` feature was
219
+ * not granted; that rejection is caught and surfaced as `undefined` (logged
220
+ * as a warning) so callers can `await` without their own `try/catch`.
221
+ * @category XR Runtime
222
+ */
223
+ requestHitTestSource(options: XRHitTestOptionsInit): Promise<XRHitTestSource | undefined>;
224
+ /**
225
+ * Request an {@link XRTransientInputHitTestSource} (e.g. for screen taps or
226
+ * transient controllers). Requires the `hit-test` feature.
227
+ *
228
+ * @returns The transient hit-test source, or `undefined` if unavailable. As
229
+ * with {@link World.requestHitTestSource}, a rejection from the underlying
230
+ * WebXR call (e.g. feature not granted) is caught and surfaced as
231
+ * `undefined`.
232
+ * @category XR Runtime
233
+ */
234
+ requestHitTestSourceForTransientInput(options: XRTransientInputHitTestOptionsInit): Promise<XRTransientInputHitTestSource | undefined>;
235
+ /**
236
+ * Read the hit-test results for a source from the current {@link XRFrame}.
237
+ * Returns an empty array when there is no active frame.
238
+ * @category XR Runtime
239
+ */
240
+ getHitTestResults(source: XRHitTestSource): XRHitTestResult[];
241
+ /**
242
+ * Register a teardown callback to run on {@link World.destroy}. Used by the
243
+ * initializer to undo global side effects such as the render loop and the
244
+ * window `resize` listener.
245
+ *
246
+ * @internal
247
+ */
248
+ addCleanup(fn: () => void): void;
249
+ /**
250
+ * Tear down the world: destroy all registered systems (running their
251
+ * `cleanupFuncs`), then run world-level teardown callbacks (stop the render
252
+ * loop, remove the window `resize` listener). After calling this the world
253
+ * instance should be discarded.
254
+ *
255
+ * @remarks
256
+ * Not invoked during normal single-world app usage (where the world lives for
257
+ * the page lifetime); provided so tests, hot-reload, and multi-world hosts can
258
+ * release the render loop, listeners, and per-system subscriptions instead of
259
+ * leaking them. Individual failures are caught so one bad teardown does not
260
+ * block the rest.
261
+ */
262
+ destroy(): void;
109
263
  update(delta: number, time: number): void;
110
264
  registerComponent(component: AnyComponent): this;
111
265
  getActiveRoot(): Object3D;
@@ -1 +1 @@
1
- {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/ecs/world.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/ecs/world.ts"],"names":[],"mappings":"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"}
package/dist/ecs/world.js CHANGED
@@ -3,8 +3,10 @@ import { World as World$1 } from 'elics';
3
3
  import { launchXR } from '../init/xr.js';
4
4
  import { LevelTag } from '../level/level-tag.js';
5
5
  import '../runtime/three.js';
6
- import { Transform } from '../transform/transform.js';
7
- import { Object3D } from 'three';
6
+ import '../transform/transform.js';
7
+ import { Visibility } from '../visibility/visibility-component.js';
8
+ import { Transform } from '../transform/transform-component.js';
9
+ import { Vector3, Object3D } from 'three';
8
10
 
9
11
  /**
10
12
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -38,7 +40,7 @@ var VisibilityState;
38
40
  * const world = await World.create(container, {
39
41
  * xr: { sessionMode: SessionMode.ImmersiveVR },
40
42
  * features: { enableLocomotion: true, enableGrabbing: true },
41
- * level: '/glxf/Composition.glxf'
43
+ * level: '/scenes/main.iwsdk.scene.json'
42
44
  * });
43
45
  * ```
44
46
  */
@@ -47,11 +49,25 @@ class World extends World$1 {
47
49
  super();
48
50
  this.activeLevelId = 'level:default';
49
51
  this.visibilityState = signal(VisibilityState.NonImmersive);
52
+ /** Whether this world was created with XR support enabled. */
53
+ this.xrEnabled = true;
54
+ /** Teardown callbacks run by {@link World.destroy} (render loop, global listeners). */
55
+ this.worldCleanupFuncs = [];
56
+ /** Guards {@link World.destroy} so a second call is a no-op. */
57
+ this.destroyed = false;
58
+ this.authoredPlayerPositionListeners = new Set();
59
+ /** Per-frame XR callbacks registered via {@link World.onXRFrame}. */
60
+ this.xrFrameCallbacks = new Set();
50
61
  const originalReleaseFunc = this.entityManager.releaseEntityInstance.bind(this.entityManager);
51
62
  this.entityManager.releaseEntityInstance = (entity) => {
52
63
  originalReleaseFunc(entity);
53
64
  const obj = entity.object3D;
54
65
  if (obj) {
66
+ const disposeAsset = obj.userData.iwsdkDisposeAsset;
67
+ if (typeof disposeAsset === 'function') {
68
+ obj.userData.iwsdkDisposeAsset = null;
69
+ disposeAsset();
70
+ }
55
71
  // Check if entity was marked for resource disposal
56
72
  if (entity._disposeResources) {
57
73
  this.disposeObject3DResources(obj);
@@ -100,10 +116,28 @@ class World extends World$1 {
100
116
  createEntity() {
101
117
  return super.createEntity();
102
118
  }
119
+ /** @internal Publish scene-authored player placement to locomotion owners. */
120
+ setAuthoredPlayerPosition(position) {
121
+ var _a;
122
+ (_a = this.authoredPlayerPosition) !== null && _a !== void 0 ? _a : (this.authoredPlayerPosition = new Vector3());
123
+ this.authoredPlayerPosition.copy(position);
124
+ for (const listener of this.authoredPlayerPositionListeners) {
125
+ listener(this.authoredPlayerPosition);
126
+ }
127
+ }
128
+ /** @internal Reconcile a locomotion owner with scene-authored placement. */
129
+ onAuthoredPlayerPosition(listener) {
130
+ this.authoredPlayerPositionListeners.add(listener);
131
+ if (this.authoredPlayerPosition != null) {
132
+ listener(this.authoredPlayerPosition);
133
+ }
134
+ return () => this.authoredPlayerPositionListeners.delete(listener);
135
+ }
103
136
  createTransformEntity(object, parentOrOptions) {
104
137
  var _a, _b;
105
138
  const entity = super.createEntity();
106
139
  const obj = object !== null && object !== void 0 ? object : new Object3D();
140
+ const initialVisible = obj.visible;
107
141
  // Cast to pointer-events-capable Object3D event map for downstream typing
108
142
  entity.object3D = obj;
109
143
  let parent = undefined;
@@ -131,27 +165,292 @@ class World extends World$1 {
131
165
  : ((_b = (_a = this.activeLevel) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : this.sceneEntity);
132
166
  }
133
167
  }
168
+ const parentObject = parent === null || parent === void 0 ? void 0 : parent.object3D;
169
+ if (parentObject && parentObject !== obj && obj.parent !== parentObject) {
170
+ parentObject.add(obj);
171
+ }
134
172
  entity.addComponent(Transform, { parent });
173
+ entity.addComponent(Visibility, { isVisible: initialVisible });
135
174
  // Tag entity with current level, unless persistent
136
175
  if (!persistent) {
137
176
  entity.addComponent(LevelTag, { id: this.activeLevelId });
138
177
  }
139
178
  return entity;
140
179
  }
180
+ /** Find an authored scene object by its stable scene node id. */
181
+ getSceneObject(nodeId) {
182
+ var _a, _b, _c;
183
+ let result;
184
+ for (const root of [
185
+ (_b = (_a = this.activeLevel) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.object3D,
186
+ (_c = this.playerEntity) === null || _c === void 0 ? void 0 : _c.object3D,
187
+ ]) {
188
+ if (root == null) {
189
+ continue;
190
+ }
191
+ root.traverse((object) => {
192
+ if (!result &&
193
+ object.userData.iwsdkSceneNodeId === nodeId &&
194
+ (object.userData.iwsdkSceneLevelId == null ||
195
+ object.userData.iwsdkSceneLevelId === this.activeLevelId)) {
196
+ result = object;
197
+ }
198
+ });
199
+ }
200
+ return result;
201
+ }
202
+ /** Find an authored scene object or throw a node-oriented lookup error. */
203
+ requireSceneObject(nodeId) {
204
+ const object = this.getSceneObject(nodeId);
205
+ if (!object) {
206
+ throw new Error(`Scene object "${nodeId}" was not found in the active level`);
207
+ }
208
+ return object;
209
+ }
210
+ /** Find the ECS entity that owns an authored scene node. */
211
+ getSceneEntity(nodeId) {
212
+ var _a;
213
+ const index = (_a = this.getSceneObject(nodeId)) === null || _a === void 0 ? void 0 : _a.entityIdx;
214
+ return typeof index === 'number'
215
+ ? this.entityManager.getEntityByIndex(index)
216
+ : undefined;
217
+ }
218
+ /** Find the ECS entity for an authored scene node or throw. */
219
+ requireSceneEntity(nodeId) {
220
+ const entity = this.getSceneEntity(nodeId);
221
+ if (!entity) {
222
+ throw new Error(`Scene entity "${nodeId}" was not found in the active level`);
223
+ }
224
+ return entity;
225
+ }
141
226
  launchXR(xrOptions) {
142
227
  launchXR(this, xrOptions);
143
228
  }
144
- /** Request a level change; LevelSystem performs the work and resolves. */
229
+ /** Request a native scene JSON level change; LevelSystem performs the work and resolves. */
145
230
  async loadLevel(url) {
231
+ this.rejectPendingLevelLoad();
232
+ this.requestedLevelDocument = undefined;
146
233
  this.requestedLevelUrl = url !== null && url !== void 0 ? url : '';
147
- return new Promise((resolve) => {
234
+ return new Promise((resolve, reject) => {
235
+ this._resolveLevelLoad = resolve;
236
+ this._rejectLevelLoad = reject;
237
+ });
238
+ }
239
+ /** Request an in-memory native scene document level load; LevelSystem performs the work and resolves. */
240
+ async loadSceneDocument(document) {
241
+ this.rejectPendingLevelLoad();
242
+ this.requestedLevelUrl = undefined;
243
+ this.requestedLevelDocument = document;
244
+ return new Promise((resolve, reject) => {
148
245
  this._resolveLevelLoad = resolve;
246
+ this._rejectLevelLoad = reject;
149
247
  });
150
248
  }
151
249
  exitXR() {
152
250
  var _a;
153
251
  (_a = this.session) === null || _a === void 0 ? void 0 : _a.end();
154
252
  }
253
+ rejectPendingLevelLoad() {
254
+ if (this._resolveLevelLoad == null && this._rejectLevelLoad == null) {
255
+ return;
256
+ }
257
+ const reject = this._rejectLevelLoad;
258
+ this._resolveLevelLoad = undefined;
259
+ this._rejectLevelLoad = undefined;
260
+ reject === null || reject === void 0 ? void 0 : reject(new Error('Level load was superseded by a newer request'));
261
+ }
262
+ /**
263
+ * The active {@link XRSession}, or `undefined` outside XR. Alias of
264
+ * {@link World.session}, exposed for discoverability alongside
265
+ * {@link World.xrFrame} and {@link World.xrReferenceSpace}.
266
+ *
267
+ * @remarks
268
+ * Enable WebXR features your app needs (e.g. hit-test, depth sensing) via
269
+ * `World.create(container, { xr: { features: { hitTest: true, depthSensing: true } } })`.
270
+ * Once granted, they appear in `world.xrSession.enabledFeatures`.
271
+ * @category XR Runtime
272
+ */
273
+ get xrSession() {
274
+ return this.session;
275
+ }
276
+ /**
277
+ * The current {@link XRFrame} for this animation-loop tick, or `null` outside
278
+ * XR. Use it for raw WebXR access such as `frame.getViewerPose(...)`,
279
+ * `frame.getHitTestResults(...)`, or `frame.getDepthInformation(...)`.
280
+ *
281
+ * @remarks
282
+ * Read this synchronously inside an {@link World.onXRFrame} callback or a
283
+ * System `update()` — the frame object is only valid for the current tick and
284
+ * must not be retained across frames.
285
+ * @category XR Runtime
286
+ */
287
+ get xrFrame() {
288
+ var _a, _b;
289
+ return (_b = (_a = this.renderer) === null || _a === void 0 ? void 0 : _a.xr.getFrame()) !== null && _b !== void 0 ? _b : null;
290
+ }
291
+ /**
292
+ * The active {@link XRReferenceSpace} that IWSDK resolved for the session, or
293
+ * `null` outside XR. Pass it to `XRHitTestResult.getPose(space)` or
294
+ * `XRFrame.getViewerPose(space)` to obtain poses in the world's tracking space.
295
+ * @category XR Runtime
296
+ */
297
+ get xrReferenceSpace() {
298
+ var _a, _b;
299
+ return (_b = (_a = this.renderer) === null || _a === void 0 ? void 0 : _a.xr.getReferenceSpace()) !== null && _b !== void 0 ? _b : null;
300
+ }
301
+ /**
302
+ * Register a callback that runs once per render-loop tick with the live
303
+ * {@link XRFrame}, without having to author a System. Useful for per-pixel
304
+ * world alignment, hit-test queries, depth sampling, and object-anchored
305
+ * overlays.
306
+ *
307
+ * @param callback Invoked with `(frame, delta, time)` while an XR session is active.
308
+ * @returns An unsubscribe function; call it to stop receiving frames.
309
+ * @category XR Runtime
310
+ * @example
311
+ * ```ts
312
+ * const source = await world.requestHitTestSource({ space: world.xrReferenceSpace! });
313
+ * const stop = world.onXRFrame((frame) => {
314
+ * if (!source) return;
315
+ * const [hit] = world.getHitTestResults(source);
316
+ * const pose = hit?.getPose(world.xrReferenceSpace!);
317
+ * // place a world-locked label at pose.transform.position ...
318
+ * });
319
+ * ```
320
+ */
321
+ onXRFrame(callback) {
322
+ this.xrFrameCallbacks.add(callback);
323
+ return () => {
324
+ this.xrFrameCallbacks.delete(callback);
325
+ };
326
+ }
327
+ /**
328
+ * Invoke all callbacks registered via {@link World.onXRFrame}. Called by the
329
+ * render loop after systems update and before rendering.
330
+ * @internal
331
+ */
332
+ runXRFrameCallbacks(frame, delta, time) {
333
+ if (this.xrFrameCallbacks.size === 0) {
334
+ return;
335
+ }
336
+ for (const callback of this.xrFrameCallbacks) {
337
+ try {
338
+ callback(frame, delta, time);
339
+ }
340
+ catch (error) {
341
+ console.error('[World] onXRFrame callback failed:', error);
342
+ }
343
+ }
344
+ }
345
+ /**
346
+ * Request an {@link XRHitTestSource} on the active session. Requires the
347
+ * `hit-test` feature (enable via
348
+ * `World.create(container, { xr: { features: { hitTest: true } } })`).
349
+ *
350
+ * @returns The hit-test source, or `undefined` if there is no active session
351
+ * or the request is unavailable/unsupported. The underlying
352
+ * `XRSession.requestHitTestSource` rejects when the `hit-test` feature was
353
+ * not granted; that rejection is caught and surfaced as `undefined` (logged
354
+ * as a warning) so callers can `await` without their own `try/catch`.
355
+ * @category XR Runtime
356
+ */
357
+ async requestHitTestSource(options) {
358
+ const session = this.session;
359
+ if (!(session === null || session === void 0 ? void 0 : session.requestHitTestSource)) {
360
+ return undefined;
361
+ }
362
+ try {
363
+ return await session.requestHitTestSource(options);
364
+ }
365
+ catch (error) {
366
+ console.warn("[World] requestHitTestSource failed (is the 'hit-test' feature enabled?):", error);
367
+ return undefined;
368
+ }
369
+ }
370
+ /**
371
+ * Request an {@link XRTransientInputHitTestSource} (e.g. for screen taps or
372
+ * transient controllers). Requires the `hit-test` feature.
373
+ *
374
+ * @returns The transient hit-test source, or `undefined` if unavailable. As
375
+ * with {@link World.requestHitTestSource}, a rejection from the underlying
376
+ * WebXR call (e.g. feature not granted) is caught and surfaced as
377
+ * `undefined`.
378
+ * @category XR Runtime
379
+ */
380
+ async requestHitTestSourceForTransientInput(options) {
381
+ const session = this.session;
382
+ if (!(session === null || session === void 0 ? void 0 : session.requestHitTestSourceForTransientInput)) {
383
+ return undefined;
384
+ }
385
+ try {
386
+ return await session.requestHitTestSourceForTransientInput(options);
387
+ }
388
+ catch (error) {
389
+ console.warn("[World] requestHitTestSourceForTransientInput failed (is the 'hit-test' feature enabled?):", error);
390
+ return undefined;
391
+ }
392
+ }
393
+ /**
394
+ * Read the hit-test results for a source from the current {@link XRFrame}.
395
+ * Returns an empty array when there is no active frame.
396
+ * @category XR Runtime
397
+ */
398
+ getHitTestResults(source) {
399
+ const frame = this.xrFrame;
400
+ if (!frame) {
401
+ return [];
402
+ }
403
+ return frame.getHitTestResults(source);
404
+ }
405
+ /**
406
+ * Register a teardown callback to run on {@link World.destroy}. Used by the
407
+ * initializer to undo global side effects such as the render loop and the
408
+ * window `resize` listener.
409
+ *
410
+ * @internal
411
+ */
412
+ addCleanup(fn) {
413
+ this.worldCleanupFuncs.push(fn);
414
+ }
415
+ /**
416
+ * Tear down the world: destroy all registered systems (running their
417
+ * `cleanupFuncs`), then run world-level teardown callbacks (stop the render
418
+ * loop, remove the window `resize` listener). After calling this the world
419
+ * instance should be discarded.
420
+ *
421
+ * @remarks
422
+ * Not invoked during normal single-world app usage (where the world lives for
423
+ * the page lifetime); provided so tests, hot-reload, and multi-world hosts can
424
+ * release the render loop, listeners, and per-system subscriptions instead of
425
+ * leaking them. Individual failures are caught so one bad teardown does not
426
+ * block the rest.
427
+ */
428
+ destroy() {
429
+ var _a, _b;
430
+ // Idempotent: getSystems() keeps returning the same systems, so without
431
+ // this guard a second destroy() would re-run every system's destroy().
432
+ if (this.destroyed) {
433
+ return;
434
+ }
435
+ this.destroyed = true;
436
+ for (const system of this.getSystems()) {
437
+ try {
438
+ (_b = (_a = system).destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
439
+ }
440
+ catch (error) {
441
+ console.error('[World] system destroy failed:', error);
442
+ }
443
+ }
444
+ const fns = this.worldCleanupFuncs.splice(0);
445
+ for (const fn of fns) {
446
+ try {
447
+ fn();
448
+ }
449
+ catch (error) {
450
+ console.error('[World] cleanup failed:', error);
451
+ }
452
+ }
453
+ }
155
454
  update(delta, time) {
156
455
  super.update(delta, time);
157
456
  }
@@ -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":[null],"names":["ElicsWorld"],"mappings":"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"}
@@ -9,7 +9,8 @@ import { Types } from '../ecs/component.js';
9
9
  * Procedural gradient background dome.
10
10
  *
11
11
  * @remarks
12
- * - Renders an inward‑facing sphere and writes to `scene.background`.
12
+ * - Renders an inward-facing, translation-free sky sphere behind the scene.
13
+ * - Clip-space depth keeps it independent of camera near/far planes.
13
14
  * - Colors are Unity‑style sky/equator/ground; intensity multiplies shader output.
14
15
  *
15
16
  * @category Environment & Lighting
@@ -1 +1 @@
1
- {"version":3,"file":"dome-gradient.d.ts","sourceRoot":"","sources":["../../src/environment/dome-gradient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAC7D;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;EAUxB,CAAC"}
1
+ {"version":3,"file":"dome-gradient.d.ts","sourceRoot":"","sources":["../../src/environment/dome-gradient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAC7D;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;EAUxB,CAAC"}
@@ -10,7 +10,8 @@ import { createComponent, Types } from 'elics';
10
10
  * Procedural gradient background dome.
11
11
  *
12
12
  * @remarks
13
- * - Renders an inward‑facing sphere and writes to `scene.background`.
13
+ * - Renders an inward-facing, translation-free sky sphere behind the scene.
14
+ * - Clip-space depth keeps it independent of camera near/far planes.
14
15
  * - Colors are Unity‑style sky/equator/ground; intensity multiplies shader output.
15
16
  *
16
17
  * @category Environment & Lighting