@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,51 +4,45 @@
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 { Types } from '../ecs/component.js';
8
- declare const LevelSystem_base: import("elics").SystemConstructor<{
9
- /** Attach a default gradient dome on level roots when none provided. */
10
- defaultLighting: {
11
- type: Types.Boolean;
12
- default: true;
13
- };
14
- }, {
7
+ import type { SceneDocument } from '@iwsdk/scene-composition';
8
+ import type { World } from '../ecs/world.js';
9
+ declare const LevelSystem_base: import("elics").SystemConstructor<import("elics").SystemSchema, {
15
10
  levelEntities: {
16
11
  required: import("elics").Component<{
17
12
  id: {
18
- type: Types.String;
13
+ type: import("elics").Types.String;
19
14
  default: string;
20
15
  };
21
16
  }>[];
22
17
  };
23
- }, import("../index.js").World, import("../ecs/system.js").System<{
24
- /** Attach a default gradient dome on level roots when none provided. */
25
- defaultLighting: {
26
- type: Types.Boolean;
27
- default: true;
28
- };
29
- }, {
18
+ }, World, import("../ecs/system.js").System<import("elics").SystemSchema, {
30
19
  levelEntities: {
31
20
  required: import("elics").Component<{
32
21
  id: {
33
- type: Types.String;
22
+ type: import("elics").Types.String;
34
23
  default: string;
35
24
  };
36
25
  }>[];
37
26
  };
38
27
  }>>;
39
28
  /**
40
- * Manages the active level root, enforces identity transforms, and loads new levels on request.
29
+ * Manages the active level root, enforces identity transforms, and atomically loads levels.
41
30
  *
42
31
  * @remarks
43
- * - Destroys all {@link LevelTag}-tagged entities on level change.
44
- * - Loads GLXF via {@link GLXFImporter} when a URL is requested through {@link World.loadLevel}.
32
+ * - Stages replacement content invisibly and destroys the prior level only after a successful load.
33
+ * - Rejects failed loads while keeping the prior level active.
34
+ * - Loads native scene JSON documents or native scene JSON URLs.
45
35
  * @category Scene
46
36
  */
47
37
  export declare class LevelSystem extends LevelSystem_base {
48
38
  private loading;
39
+ /** Renderer state that predates the currently committed level. */
40
+ private activeEnvironmentBase;
49
41
  init(): void;
50
42
  update(): void;
51
43
  private startLevelChange;
52
44
  }
45
+ /** Apply a composed scene's authored hero view to the non-immersive camera. */
46
+ export declare function applySceneHeroCamera(world: World, document: SceneDocument): boolean;
53
47
  export {};
54
48
  //# sourceMappingURL=level-system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"level-system.d.ts","sourceRoot":"","sources":["../../src/level/level-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;;IA2BxC,wEAAwE;;;;;;;;;;;;;;;IAAxE,wEAAwE;;;;;;;;;;;;;;;AAd5E;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,gBAShC;IACC,OAAO,CAAC,OAAO,CAAS;IAExB,IAAI,IAAI,IAAI;IAiBZ,MAAM,IAAI,IAAI;IAgCd,OAAO,CAAC,gBAAgB;CAiDzB"}
1
+ {"version":3,"file":"level-system.d.ts","sourceRoot":"","sources":["../../src/level/level-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;AAmB7C;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,gBAG/B;IACA,OAAO,CAAC,OAAO,CAAS;IACxB,kEAAkE;IAClE,OAAO,CAAC,qBAAqB,CAAoC;IAEjE,IAAI,IAAI,IAAI;IAiBZ,MAAM,IAAI,IAAI;IAiCd,OAAO,CAAC,gBAAgB;CAoGzB;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,GACtB,OAAO,CA0BT"}
@@ -1,14 +1,13 @@
1
1
  import { signal } from '@preact/signals-core';
2
- import { Types } from 'elics';
3
2
  import { createSystem } from '../ecs/system.js';
4
- import { DomeTexture } from '../environment/dome-texture.js';
5
- import { DomeGradient } from '../environment/dome-gradient.js';
6
- import { IBLTexture } from '../environment/ibl-texture.js';
7
- import { IBLGradient } from '../environment/ibl-gradient.js';
8
- import '../environment/environment-system.js';
9
- import { GLXFImporter } from './level-glxf-importer.js';
3
+ import '../runtime/three.js';
4
+ import { applyScenePlayerRig } from './level-player-rig.js';
10
5
  import { LevelRoot } from './level-root.js';
6
+ import { captureSceneEnvironment, applySceneEnvironment, restoreSceneEnvironment } from './level-scene-environment.js';
7
+ import { SceneJSONImporter, createSceneEntityReferenceResolver, activateScenePlayerAttachments } from './level-scene-json-importer.js';
8
+ import { disposeSceneObjectResources } from './level-scene-object.js';
11
9
  import { LevelTag } from './level-tag.js';
10
+ import { Vector3 } from 'three';
12
11
 
13
12
  /**
14
13
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -17,19 +16,17 @@ import { LevelTag } from './level-tag.js';
17
16
  * LICENSE file in the root directory of this source tree.
18
17
  */
19
18
  /**
20
- * Manages the active level root, enforces identity transforms, and loads new levels on request.
19
+ * Manages the active level root, enforces identity transforms, and atomically loads levels.
21
20
  *
22
21
  * @remarks
23
- * - Destroys all {@link LevelTag}-tagged entities on level change.
24
- * - Loads GLXF via {@link GLXFImporter} when a URL is requested through {@link World.loadLevel}.
22
+ * - Stages replacement content invisibly and destroys the prior level only after a successful load.
23
+ * - Rejects failed loads while keeping the prior level active.
24
+ * - Loads native scene JSON documents or native scene JSON URLs.
25
25
  * @category Scene
26
26
  */
27
27
  class LevelSystem extends createSystem({
28
28
  // All entities that belong to a level (will be destroyed on level change)
29
29
  levelEntities: { required: [LevelTag] },
30
- }, {
31
- /** Attach a default gradient dome on level roots when none provided. */
32
- defaultLighting: { type: Types.Boolean, default: true },
33
30
  }) {
34
31
  constructor() {
35
32
  super(...arguments);
@@ -74,59 +71,127 @@ class LevelSystem extends createSystem({
74
71
  if (this.loading) {
75
72
  return;
76
73
  }
77
- const pending = this.world.requestedLevelUrl;
78
- if (pending === undefined) {
74
+ const pendingUrl = this.world.requestedLevelUrl;
75
+ const pendingDocument = this.world.requestedLevelDocument;
76
+ if (pendingUrl === undefined && pendingDocument === undefined) {
79
77
  return;
80
78
  }
81
- this.startLevelChange(pending);
79
+ this.startLevelChange(pendingUrl !== null && pendingUrl !== void 0 ? pendingUrl : '', pendingDocument);
82
80
  }
83
- startLevelChange(url) {
81
+ startLevelChange(url, document = this.world.requestedLevelDocument) {
84
82
  this.loading = true;
83
+ const resolveLoad = this.world._resolveLevelLoad;
84
+ const rejectLoad = this.world._rejectLevelLoad;
85
+ this.world._resolveLevelLoad = undefined;
86
+ this.world._rejectLevelLoad = undefined;
85
87
  // Unset request now to avoid re-entry during async flow
86
88
  this.world.requestedLevelUrl = undefined;
87
- // Destroy all level-tagged entities (current level content)
88
- for (const ent of this.queries.levelEntities.entities) {
89
- try {
90
- ent.destroy();
91
- }
92
- catch (_a) { }
93
- }
94
- // Create a fresh level root and make it active
89
+ this.world.requestedLevelDocument = undefined;
90
+ const previousRoot = this.world.activeLevel.value;
91
+ const previousLevelId = this.world.activeLevelId;
92
+ const previousEntities = new Set(this.queries.levelEntities.entities);
93
+ const nextLevelId = url || 'level:default';
94
+ const environmentAtLoadStart = captureSceneEnvironment(this.world.scene, this.world.renderer);
95
+ // Stage the replacement under the scene root without exposing it as active.
96
+ this.world.activeLevelId = nextLevelId;
95
97
  const newRoot = this.world.createTransformEntity(undefined, {
96
98
  parent: this.world.sceneEntity,
97
99
  });
98
100
  newRoot.object3D.name = 'LevelRoot';
101
+ newRoot.object3D.visible = false;
99
102
  newRoot.addComponent(LevelRoot);
100
- this.world.activeLevel.value = newRoot;
101
- const doLoad = url
102
- ? GLXFImporter.load(this.world, url, newRoot)
103
- : Promise.resolve();
103
+ const doLoad = document != null
104
+ ? SceneJSONImporter.loadDocument(this.world, document, newRoot)
105
+ : url
106
+ ? SceneJSONImporter.load(this.world, url, newRoot)
107
+ : Promise.resolve();
104
108
  void doLoad
105
- .catch((err) => console.error('[LevelSystem] Failed to load level', err))
106
- .finally(() => {
107
- this.loading = false;
108
- // Attach default lighting if requested and the level root has no dome/IBL
109
- try {
110
- if (this.config.defaultLighting.value) {
111
- const hasDome = newRoot.hasComponent(DomeTexture) ||
112
- newRoot.hasComponent(DomeGradient);
113
- const hasIBL = newRoot.hasComponent(IBLTexture) ||
114
- newRoot.hasComponent(IBLGradient);
115
- if (!hasDome && !hasIBL) {
116
- newRoot.addComponent(DomeGradient).addComponent(IBLGradient);
117
- }
118
- }
109
+ .then((loadResult) => {
110
+ var _a;
111
+ const nativeResult = asNativeSceneLoadResult(loadResult);
112
+ // Prepare the next authored environment against the stable pre-level
113
+ // baseline. The apply is transactional and retires the active level's
114
+ // generated resources only after the replacement is ready.
115
+ const nextEnvironmentBase = (_a = this.activeEnvironmentBase) !== null && _a !== void 0 ? _a : environmentAtLoadStart;
116
+ applySceneEnvironment(this.world.scene, this.world.renderer, nativeResult === null || nativeResult === void 0 ? void 0 : nativeResult.document.environment, nextEnvironmentBase);
117
+ if (nativeResult != null) {
118
+ newRoot.object3D.userData.iwsdkSceneResources = cloneJson(nativeResult.document.resources);
119
119
  }
120
- catch (e) {
121
- console.warn('[LevelSystem] defaultLighting setup failed:', e);
120
+ applyScenePlayerRig(this.world, nativeResult === null || nativeResult === void 0 ? void 0 : nativeResult.document.player, {
121
+ resolveEntityReference: nativeResult == null
122
+ ? undefined
123
+ : createSceneEntityReferenceResolver(this.world, newRoot, nativeResult.nodes),
124
+ });
125
+ disposeLevelEntities(previousEntities);
126
+ activateScenePlayerAttachments(nativeResult);
127
+ newRoot.object3D.visible = true;
128
+ this.world.activeLevelId = nextLevelId;
129
+ this.world.activeLevel.value = newRoot;
130
+ if (nativeResult != null) {
131
+ applySceneHeroCamera(this.world, nativeResult.document);
122
132
  }
123
- if (this.world._resolveLevelLoad) {
124
- this.world._resolveLevelLoad();
125
- this.world._resolveLevelLoad = undefined;
133
+ this.activeEnvironmentBase = nextEnvironmentBase;
134
+ this.loading = false;
135
+ resolveLoad === null || resolveLoad === void 0 ? void 0 : resolveLoad();
136
+ })
137
+ .catch((error) => {
138
+ const stagedEntities = new Set([newRoot]);
139
+ for (const entity of this.queries.levelEntities.entities) {
140
+ if (!previousEntities.has(entity)) {
141
+ stagedEntities.add(entity);
142
+ }
126
143
  }
144
+ disposeLevelEntities(stagedEntities);
145
+ restoreSceneEnvironment(this.world.scene, this.world.renderer, environmentAtLoadStart);
146
+ this.world.activeLevelId = previousLevelId;
147
+ this.world.activeLevel.value = previousRoot;
148
+ console.error('[LevelSystem] Failed to load level', error);
149
+ this.loading = false;
150
+ rejectLoad === null || rejectLoad === void 0 ? void 0 : rejectLoad(error);
127
151
  });
128
152
  }
129
153
  }
154
+ /** Apply a composed scene's authored hero view to the non-immersive camera. */
155
+ function applySceneHeroCamera(world, document) {
156
+ var _a, _b, _c, _d, _e;
157
+ if (((_a = world.renderer.xr) === null || _a === void 0 ? void 0 : _a.isPresenting) === true) {
158
+ return false;
159
+ }
160
+ const heroViewId = (_c = (_b = document.authoring) === null || _b === void 0 ? void 0 : _b.composition) === null || _c === void 0 ? void 0 : _c.review.heroView;
161
+ const view = (_e = (_d = document.authoring) === null || _d === void 0 ? void 0 : _d.views) === null || _e === void 0 ? void 0 : _e.find((candidate) => candidate.id === heroViewId && candidate.projection === 'perspective');
162
+ if (view == null) {
163
+ return false;
164
+ }
165
+ const cameraPosition = new Vector3(...view.position);
166
+ if (world.camera.parent != null) {
167
+ world.camera.parent.updateWorldMatrix(true, false);
168
+ world.camera.parent.worldToLocal(cameraPosition);
169
+ }
170
+ world.camera.position.copy(cameraPosition);
171
+ world.camera.lookAt(...view.target);
172
+ if ('fov' in world.camera) {
173
+ world.camera.fov = view.fov;
174
+ }
175
+ world.camera.updateProjectionMatrix();
176
+ world.camera.userData.iwsdkSceneHeroView = cloneJson(view);
177
+ return true;
178
+ }
179
+ function disposeLevelEntities(entities) {
180
+ const uniqueEntities = [...new Set(entities)];
181
+ disposeSceneObjectResources(...uniqueEntities.flatMap((entity) => entity.object3D == null ? [] : [entity.object3D]));
182
+ for (const entity of uniqueEntities) {
183
+ try {
184
+ entity.destroy();
185
+ }
186
+ catch (_a) { }
187
+ }
188
+ }
189
+ function asNativeSceneLoadResult(value) {
190
+ return value != null && 'document' in value ? value : undefined;
191
+ }
192
+ function cloneJson(value) {
193
+ return JSON.parse(JSON.stringify(value));
194
+ }
130
195
 
131
- export { LevelSystem };
196
+ export { LevelSystem, applySceneHeroCamera };
132
197
  //# sourceMappingURL=level-system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"level-system.js","sources":["../../src/level/level-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"level-system.js","sources":["../../src/level/level-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export * from './light-binding.js';
8
+ export * from './light-components.js';
9
+ export * from './light-system.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lighting/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { LightBinding } from './light-binding.js';
2
+ export { AmbientLightComponent, DirectionalLightComponent, HemisphereLightComponent, IWSDK_LIGHT_COMPONENTS, LightShadowMapSize, PointLightComponent, RectAreaLightComponent, SpotLightComponent } from './light-components.js';
3
+ export { LightSystem, lightSpecFromComponentValue, readLightSpec } from './light-system.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Light, Object3D } from '../runtime/index.js';
8
+ export type LightColor = readonly [number, number, number, number];
9
+ export interface LightShadowSpec {
10
+ castShadow: boolean;
11
+ shadowBias: number;
12
+ shadowCameraFar: number;
13
+ shadowCameraNear: number;
14
+ shadowMapSize: number;
15
+ shadowNormalBias: number;
16
+ shadowRadius: number;
17
+ }
18
+ export type LightSpec = {
19
+ kind: 'ambient';
20
+ color: LightColor;
21
+ intensity: number;
22
+ } | {
23
+ kind: 'hemisphere';
24
+ groundColor: LightColor;
25
+ intensity: number;
26
+ skyColor: LightColor;
27
+ } | ({
28
+ kind: 'directional';
29
+ color: LightColor;
30
+ intensity: number;
31
+ shadowCameraSize: number;
32
+ } & LightShadowSpec) | ({
33
+ kind: 'point';
34
+ color: LightColor;
35
+ decay: number;
36
+ distance: number;
37
+ intensity: number;
38
+ } & LightShadowSpec) | ({
39
+ kind: 'spot';
40
+ angleDeg: number;
41
+ color: LightColor;
42
+ decay: number;
43
+ distance: number;
44
+ intensity: number;
45
+ penumbra: number;
46
+ } & LightShadowSpec) | {
47
+ kind: 'rect-area';
48
+ color: LightColor;
49
+ height: number;
50
+ intensity: number;
51
+ width: number;
52
+ };
53
+ /**
54
+ * Owns one Three.js light and keeps runtime and managed-editor materialization identical.
55
+ */
56
+ export declare class LightBinding {
57
+ readonly parent: Object3D;
58
+ readonly targetRoot: Object3D;
59
+ readonly light: Light;
60
+ readonly target: Object3D | undefined;
61
+ private readonly desiredWorldMatrix;
62
+ private readonly inverseParentMatrix;
63
+ private readonly localMatrix;
64
+ private readonly worldPosition;
65
+ private readonly worldQuaternion;
66
+ private readonly worldDirection;
67
+ private disposed;
68
+ private specSignature;
69
+ constructor(parent: Object3D, targetRoot: Object3D, spec: LightSpec);
70
+ update(spec: LightSpec): void;
71
+ /** Synchronize position and rotation while deliberately removing inherited scale. */
72
+ syncTransform(): void;
73
+ dispose(): void;
74
+ private assertActive;
75
+ }
76
+ //# sourceMappingURL=light-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-binding.d.ts","sourceRoot":"","sources":["../../src/lighting/light-binding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAKL,KAAK,EAEL,QAAQ,EAOT,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,CAAC;CACtB,GACD,CAAC;IACC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,eAAe,CAAC,GACpB,CAAC;IACC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,eAAe,CAAC,GACpB,CAAC;IACC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,eAAe,CAAC,GACpB;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAqEN;;GAEG;AACH,qBAAa,YAAY;IAcrB,QAAQ,CAAC,MAAM,EAAE,QAAQ;IACzB,QAAQ,CAAC,UAAU,EAAE,QAAQ;IAd/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAM;gBAGhB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,QAAQ,EAC7B,IAAI,EAAE,SAAS;IAwBjB,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAoE7B,qFAAqF;IACrF,aAAa,IAAI,IAAI;IAmCrB,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,YAAY;CAKrB"}
@@ -0,0 +1,229 @@
1
+ import { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';
2
+ import '../runtime/three.js';
3
+ import { Vector3, Matrix4, Quaternion, Object3D, RectAreaLight, SpotLight, PointLight, DirectionalLight, HemisphereLight, AmbientLight, SRGBColorSpace } from 'three';
4
+
5
+ /**
6
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
7
+ *
8
+ * This source code is licensed under the MIT license found in the
9
+ * LICENSE file in the root directory of this source tree.
10
+ */
11
+ const LOCAL_FORWARD = new Vector3(0, 0, -1);
12
+ const WORLD_UP = new Vector3(0, 1, 0);
13
+ const UNIT_SCALE = new Vector3(1, 1, 1);
14
+ let rectAreaUniformsInitialized = false;
15
+ function initializeRectAreaUniforms() {
16
+ if (rectAreaUniformsInitialized) {
17
+ return;
18
+ }
19
+ RectAreaLightUniformsLib.init();
20
+ rectAreaUniformsInitialized = true;
21
+ }
22
+ function applyColor(target, value) {
23
+ target.setRGB(value[0], value[1], value[2], SRGBColorSpace);
24
+ }
25
+ function degreesToRadians(value) {
26
+ return (value * Math.PI) / 180;
27
+ }
28
+ function createLight(spec) {
29
+ switch (spec.kind) {
30
+ case 'ambient':
31
+ return new AmbientLight();
32
+ case 'hemisphere':
33
+ return new HemisphereLight();
34
+ case 'directional':
35
+ return new DirectionalLight();
36
+ case 'point':
37
+ return new PointLight();
38
+ case 'spot':
39
+ return new SpotLight();
40
+ case 'rect-area':
41
+ initializeRectAreaUniforms();
42
+ return new RectAreaLight();
43
+ }
44
+ }
45
+ function applyShadow(light, spec) {
46
+ const shadow = light.shadow;
47
+ const mapSizeChanged = shadow.mapSize.width !== spec.shadowMapSize ||
48
+ shadow.mapSize.height !== spec.shadowMapSize;
49
+ if (mapSizeChanged && (shadow.map != null || shadow.mapPass != null)) {
50
+ shadow.dispose();
51
+ shadow.map = null;
52
+ shadow.mapPass = null;
53
+ }
54
+ if (light.castShadow && !spec.castShadow) {
55
+ shadow.dispose();
56
+ shadow.map = null;
57
+ shadow.mapPass = null;
58
+ }
59
+ light.castShadow = spec.castShadow;
60
+ shadow.mapSize.set(spec.shadowMapSize, spec.shadowMapSize);
61
+ shadow.bias = spec.shadowBias;
62
+ shadow.normalBias = spec.shadowNormalBias;
63
+ shadow.radius = spec.shadowRadius;
64
+ shadow.camera.near = spec.shadowCameraNear;
65
+ shadow.camera.far = spec.shadowCameraFar;
66
+ shadow.camera.updateProjectionMatrix();
67
+ shadow.needsUpdate = true;
68
+ }
69
+ /**
70
+ * Owns one Three.js light and keeps runtime and managed-editor materialization identical.
71
+ */
72
+ class LightBinding {
73
+ constructor(parent, targetRoot, spec) {
74
+ this.parent = parent;
75
+ this.targetRoot = targetRoot;
76
+ this.desiredWorldMatrix = new Matrix4();
77
+ this.inverseParentMatrix = new Matrix4();
78
+ this.localMatrix = new Matrix4();
79
+ this.worldPosition = new Vector3();
80
+ this.worldQuaternion = new Quaternion();
81
+ this.worldDirection = new Vector3();
82
+ this.disposed = false;
83
+ this.specSignature = '';
84
+ this.light = createLight(spec);
85
+ this.light.name = `${spec.kind}-light`;
86
+ this.light.matrixAutoUpdate = false;
87
+ this.light.userData.iwsdkLightComponent = spec.kind;
88
+ copySceneIdentity(parent, this.light);
89
+ parent.add(this.light);
90
+ if (spec.kind === 'directional' || spec.kind === 'spot') {
91
+ const target = new Object3D();
92
+ target.name = `${spec.kind}-light-target`;
93
+ target.userData.iwsdkLightTarget = true;
94
+ target.userData.iwsdkRuntimeOnly = true;
95
+ copySceneIdentity(parent, target);
96
+ targetRoot.add(target);
97
+ this.target = target;
98
+ this.light.target = target;
99
+ }
100
+ this.update(spec);
101
+ this.syncTransform();
102
+ }
103
+ update(spec) {
104
+ this.assertActive();
105
+ if (this.light.userData.iwsdkLightComponent !== spec.kind) {
106
+ throw new Error('A LightBinding cannot change light kind');
107
+ }
108
+ const signature = JSON.stringify(spec);
109
+ if (signature === this.specSignature) {
110
+ return;
111
+ }
112
+ this.specSignature = signature;
113
+ switch (spec.kind) {
114
+ case 'ambient': {
115
+ const light = this.light;
116
+ applyColor(light.color, spec.color);
117
+ light.intensity = spec.intensity;
118
+ break;
119
+ }
120
+ case 'hemisphere': {
121
+ const light = this.light;
122
+ applyColor(light.color, spec.skyColor);
123
+ applyColor(light.groundColor, spec.groundColor);
124
+ light.intensity = spec.intensity;
125
+ break;
126
+ }
127
+ case 'directional': {
128
+ const light = this.light;
129
+ applyColor(light.color, spec.color);
130
+ light.intensity = spec.intensity;
131
+ applyShadow(light, spec);
132
+ const halfSize = spec.shadowCameraSize / 2;
133
+ light.shadow.camera.left = -halfSize;
134
+ light.shadow.camera.right = halfSize;
135
+ light.shadow.camera.top = halfSize;
136
+ light.shadow.camera.bottom = -halfSize;
137
+ light.shadow.camera.updateProjectionMatrix();
138
+ break;
139
+ }
140
+ case 'point': {
141
+ const light = this.light;
142
+ applyColor(light.color, spec.color);
143
+ light.decay = spec.decay;
144
+ light.distance = spec.distance;
145
+ light.intensity = spec.intensity;
146
+ applyShadow(light, spec);
147
+ break;
148
+ }
149
+ case 'spot': {
150
+ const light = this.light;
151
+ light.angle = degreesToRadians(spec.angleDeg);
152
+ applyColor(light.color, spec.color);
153
+ light.decay = spec.decay;
154
+ light.distance = spec.distance;
155
+ light.intensity = spec.intensity;
156
+ light.penumbra = spec.penumbra;
157
+ applyShadow(light, spec);
158
+ break;
159
+ }
160
+ case 'rect-area': {
161
+ const light = this.light;
162
+ applyColor(light.color, spec.color);
163
+ light.height = spec.height;
164
+ light.intensity = spec.intensity;
165
+ light.width = spec.width;
166
+ break;
167
+ }
168
+ }
169
+ }
170
+ /** Synchronize position and rotation while deliberately removing inherited scale. */
171
+ syncTransform() {
172
+ this.assertActive();
173
+ this.parent.updateWorldMatrix(true, false);
174
+ if (this.light.userData.iwsdkLightComponent === 'hemisphere') {
175
+ this.worldPosition.copy(WORLD_UP);
176
+ this.worldQuaternion.identity();
177
+ }
178
+ else {
179
+ this.parent.getWorldPosition(this.worldPosition);
180
+ this.parent.getWorldQuaternion(this.worldQuaternion);
181
+ }
182
+ this.desiredWorldMatrix.compose(this.worldPosition, this.worldQuaternion, UNIT_SCALE);
183
+ this.inverseParentMatrix.copy(this.parent.matrixWorld).invert();
184
+ this.localMatrix.multiplyMatrices(this.inverseParentMatrix, this.desiredWorldMatrix);
185
+ this.light.matrix.copy(this.localMatrix);
186
+ this.light.matrixWorld.copy(this.desiredWorldMatrix);
187
+ if (this.target != null) {
188
+ this.worldDirection
189
+ .copy(LOCAL_FORWARD)
190
+ .applyQuaternion(this.worldQuaternion);
191
+ this.target.position.copy(this.worldPosition).add(this.worldDirection);
192
+ if (this.target.parent !== this.targetRoot) {
193
+ this.targetRoot.add(this.target);
194
+ }
195
+ this.target.updateMatrixWorld(true);
196
+ }
197
+ }
198
+ dispose() {
199
+ var _a;
200
+ if (this.disposed) {
201
+ return;
202
+ }
203
+ this.disposed = true;
204
+ this.light.removeFromParent();
205
+ (_a = this.target) === null || _a === void 0 ? void 0 : _a.removeFromParent();
206
+ this.light.dispose();
207
+ }
208
+ assertActive() {
209
+ if (this.disposed) {
210
+ throw new Error('Cannot update a disposed LightBinding');
211
+ }
212
+ }
213
+ }
214
+ function copySceneIdentity(source, target) {
215
+ for (const key of [
216
+ 'iwsdkSceneDocumentUrl',
217
+ 'iwsdkSceneFramingRole',
218
+ 'iwsdkSceneNodeId',
219
+ 'iwsdkSceneRuntimeHash',
220
+ 'iwsdkSceneSourceNodeId',
221
+ ]) {
222
+ if (source.userData[key] !== undefined) {
223
+ target.userData[key] = source.userData[key];
224
+ }
225
+ }
226
+ }
227
+
228
+ export { LightBinding };
229
+ //# sourceMappingURL=light-binding.js.map