@iwsdk/core 0.2.1 → 0.3.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 (228) hide show
  1. package/README.md +94 -0
  2. package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
  3. package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
  4. package/dist/asset/loaders/hdr-texture-loader.js +4 -4
  5. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  6. package/dist/audio/audio-system.d.ts +6 -2
  7. package/dist/audio/audio-system.d.ts.map +1 -1
  8. package/dist/audio/audio-system.js +1 -0
  9. package/dist/audio/audio-system.js.map +1 -1
  10. package/dist/audio/audio.d.ts +3 -1
  11. package/dist/audio/audio.d.ts.map +1 -1
  12. package/dist/audio/audio.js +8 -2
  13. package/dist/audio/audio.js.map +1 -1
  14. package/dist/camera/camera-source.js +1 -0
  15. package/dist/camera/camera-source.js.map +1 -1
  16. package/dist/camera/camera-system.d.ts.map +1 -1
  17. package/dist/camera/camera-system.js +1 -0
  18. package/dist/camera/camera-system.js.map +1 -1
  19. package/dist/camera/camera-utils.d.ts.map +1 -1
  20. package/dist/camera/camera-utils.js.map +1 -1
  21. package/dist/depth/depth-occludable.d.ts +48 -0
  22. package/dist/depth/depth-occludable.d.ts.map +1 -0
  23. package/dist/depth/depth-occludable.js +48 -0
  24. package/dist/depth/depth-occludable.js.map +1 -0
  25. package/dist/depth/depth-sensing-system.d.ts +164 -0
  26. package/dist/depth/depth-sensing-system.d.ts.map +1 -0
  27. package/dist/depth/depth-sensing-system.js +453 -0
  28. package/dist/depth/depth-sensing-system.js.map +1 -0
  29. package/dist/depth/depth-textures.d.ts +53 -0
  30. package/dist/depth/depth-textures.d.ts.map +1 -0
  31. package/dist/depth/depth-textures.js +114 -0
  32. package/dist/depth/depth-textures.js.map +1 -0
  33. package/dist/depth/index.d.ts +10 -0
  34. package/dist/depth/index.d.ts.map +1 -0
  35. package/dist/depth/occlusion/preprocessing-pass.d.ts +52 -0
  36. package/dist/depth/occlusion/preprocessing-pass.d.ts.map +1 -0
  37. package/dist/depth/occlusion/preprocessing-pass.js +105 -0
  38. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -0
  39. package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts +22 -0
  40. package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts.map +1 -0
  41. package/dist/depth/occlusion/preprocessing-shader.glsl.js +115 -0
  42. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -0
  43. package/dist/ecs/entity.d.ts +17 -1
  44. package/dist/ecs/entity.d.ts.map +1 -1
  45. package/dist/ecs/entity.js +7 -1
  46. package/dist/ecs/entity.js.map +1 -1
  47. package/dist/ecs/world.d.ts +12 -0
  48. package/dist/ecs/world.d.ts.map +1 -1
  49. package/dist/ecs/world.js +47 -3
  50. package/dist/ecs/world.js.map +1 -1
  51. package/dist/environment/dome-gradient.js +1 -0
  52. package/dist/environment/dome-gradient.js.map +1 -1
  53. package/dist/environment/dome-texture.d.ts +3 -1
  54. package/dist/environment/dome-texture.d.ts.map +1 -1
  55. package/dist/environment/dome-texture.js +7 -1
  56. package/dist/environment/dome-texture.js.map +1 -1
  57. package/dist/environment/environment-system.d.ts +8 -0
  58. package/dist/environment/environment-system.d.ts.map +1 -1
  59. package/dist/environment/environment-system.js +78 -2
  60. package/dist/environment/environment-system.js.map +1 -1
  61. package/dist/environment/ibl-gradient.js +1 -0
  62. package/dist/environment/ibl-gradient.js.map +1 -1
  63. package/dist/environment/ibl-texture.d.ts +3 -1
  64. package/dist/environment/ibl-texture.d.ts.map +1 -1
  65. package/dist/environment/ibl-texture.js +7 -1
  66. package/dist/environment/ibl-texture.js.map +1 -1
  67. package/dist/environment-raycast/environment-raycast.d.ts +136 -0
  68. package/dist/environment-raycast/environment-raycast.d.ts.map +1 -0
  69. package/dist/environment-raycast/environment-raycast.js +333 -0
  70. package/dist/environment-raycast/environment-raycast.js.map +1 -0
  71. package/dist/environment-raycast/index.d.ts +9 -0
  72. package/dist/environment-raycast/index.d.ts.map +1 -0
  73. package/dist/environment-raycast/raycast-target.d.ts +114 -0
  74. package/dist/environment-raycast/raycast-target.d.ts.map +1 -0
  75. package/dist/environment-raycast/raycast-target.js +84 -0
  76. package/dist/environment-raycast/raycast-target.js.map +1 -0
  77. package/dist/grab/distance-grabbable.d.ts +27 -2
  78. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  79. package/dist/grab/distance-grabbable.js +25 -2
  80. package/dist/grab/distance-grabbable.js.map +1 -1
  81. package/dist/grab/grab-system.d.ts +106 -61
  82. package/dist/grab/grab-system.d.ts.map +1 -1
  83. package/dist/grab/grab-system.js +61 -10
  84. package/dist/grab/grab-system.js.map +1 -1
  85. package/dist/grab/handles.d.ts +14 -4
  86. package/dist/grab/handles.d.ts.map +1 -1
  87. package/dist/grab/handles.js +45 -18
  88. package/dist/grab/handles.js.map +1 -1
  89. package/dist/grab/index.d.ts +0 -1
  90. package/dist/grab/index.d.ts.map +1 -1
  91. package/dist/grab/index.js +0 -2
  92. package/dist/grab/index.js.map +1 -1
  93. package/dist/grab/one-hand-grabbable.js +1 -0
  94. package/dist/grab/one-hand-grabbable.js.map +1 -1
  95. package/dist/grab/two-hands-grabbable.js +1 -0
  96. package/dist/grab/two-hands-grabbable.js.map +1 -1
  97. package/dist/index.d.ts +3 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +9 -1
  100. package/dist/index.js.map +1 -1
  101. package/dist/init/world-initializer.d.ts +17 -3
  102. package/dist/init/world-initializer.d.ts.map +1 -1
  103. package/dist/init/world-initializer.js +86 -19
  104. package/dist/init/world-initializer.js.map +1 -1
  105. package/dist/init/xr.d.ts +1 -0
  106. package/dist/init/xr.d.ts.map +1 -1
  107. package/dist/init/xr.js +6 -0
  108. package/dist/init/xr.js.map +1 -1
  109. package/dist/input/input-system.d.ts +408 -5
  110. package/dist/input/input-system.d.ts.map +1 -1
  111. package/dist/input/input-system.js +146 -23
  112. package/dist/input/input-system.js.map +1 -1
  113. package/dist/input/state-tags.d.ts +32 -15
  114. package/dist/input/state-tags.d.ts.map +1 -1
  115. package/dist/input/state-tags.js +34 -16
  116. package/dist/input/state-tags.js.map +1 -1
  117. package/dist/level/level-entity-creator.js +1 -0
  118. package/dist/level/level-entity-creator.js.map +1 -1
  119. package/dist/level/level-root.js +1 -0
  120. package/dist/level/level-root.js.map +1 -1
  121. package/dist/level/level-system.js +1 -0
  122. package/dist/level/level-system.js.map +1 -1
  123. package/dist/level/level-tag.js +1 -0
  124. package/dist/level/level-tag.js.map +1 -1
  125. package/dist/locomotion/locomotion.d.ts +10 -0
  126. package/dist/locomotion/locomotion.d.ts.map +1 -1
  127. package/dist/locomotion/locomotion.js +17 -1
  128. package/dist/locomotion/locomotion.js.map +1 -1
  129. package/dist/locomotion/slide.d.ts +10 -0
  130. package/dist/locomotion/slide.d.ts.map +1 -1
  131. package/dist/locomotion/slide.js +6 -2
  132. package/dist/locomotion/slide.js.map +1 -1
  133. package/dist/locomotion/teleport.js +1 -0
  134. package/dist/locomotion/teleport.js.map +1 -1
  135. package/dist/mcp/ecs-debug-tools.d.ts +167 -0
  136. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -0
  137. package/dist/mcp/ecs-debug-tools.js +602 -0
  138. package/dist/mcp/ecs-debug-tools.js.map +1 -0
  139. package/dist/mcp/index.d.ts +10 -0
  140. package/dist/mcp/index.d.ts.map +1 -0
  141. package/dist/mcp/mcp-runtime.d.ts +31 -0
  142. package/dist/mcp/mcp-runtime.d.ts.map +1 -0
  143. package/dist/mcp/mcp-runtime.js +85 -0
  144. package/dist/mcp/mcp-runtime.js.map +1 -0
  145. package/dist/mcp/scene-tools.d.ts +41 -0
  146. package/dist/mcp/scene-tools.d.ts.map +1 -0
  147. package/dist/mcp/scene-tools.js +95 -0
  148. package/dist/mcp/scene-tools.js.map +1 -0
  149. package/dist/physics/physics-system.d.ts +1 -1
  150. package/dist/physics/physics-system.d.ts.map +1 -1
  151. package/dist/physics/physics-system.js +9 -4
  152. package/dist/physics/physics-system.js.map +1 -1
  153. package/dist/physics/utils.d.ts.map +1 -1
  154. package/dist/physics/utils.js +1 -1
  155. package/dist/scene-understanding/anchor.js +1 -0
  156. package/dist/scene-understanding/anchor.js.map +1 -1
  157. package/dist/scene-understanding/mesh.js +1 -0
  158. package/dist/scene-understanding/mesh.js.map +1 -1
  159. package/dist/scene-understanding/plane.js +1 -0
  160. package/dist/scene-understanding/plane.js.map +1 -1
  161. package/dist/scene-understanding/scene-understanding-system.d.ts +29 -0
  162. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  163. package/dist/scene-understanding/scene-understanding-system.js +118 -18
  164. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  165. package/dist/transform/index.d.ts +2 -0
  166. package/dist/transform/index.d.ts.map +1 -1
  167. package/dist/transform/synced-euler.d.ts +62 -0
  168. package/dist/transform/synced-euler.d.ts.map +1 -0
  169. package/dist/transform/synced-euler.js +212 -0
  170. package/dist/transform/synced-euler.js.map +1 -0
  171. package/dist/transform/synced-quaternion.d.ts +11 -0
  172. package/dist/transform/synced-quaternion.d.ts.map +1 -1
  173. package/dist/transform/synced-quaternion.js +29 -0
  174. package/dist/transform/synced-quaternion.js.map +1 -1
  175. package/dist/transform/transform-utils.d.ts +24 -0
  176. package/dist/transform/transform-utils.d.ts.map +1 -0
  177. package/dist/transform/transform-utils.js +53 -0
  178. package/dist/transform/transform-utils.js.map +1 -0
  179. package/dist/transform/transform.d.ts.map +1 -1
  180. package/dist/transform/transform.js +19 -2
  181. package/dist/transform/transform.js.map +1 -1
  182. package/dist/ui/follow.js +1 -0
  183. package/dist/ui/follow.js.map +1 -1
  184. package/dist/ui/index.d.ts +1 -1
  185. package/dist/ui/index.d.ts.map +1 -1
  186. package/dist/ui/screenspace.js +1 -0
  187. package/dist/ui/screenspace.js.map +1 -1
  188. package/dist/ui/ui.d.ts.map +1 -1
  189. package/dist/ui/ui.js +2 -8
  190. package/dist/ui/ui.js.map +1 -1
  191. package/dist/version.d.ts +1 -1
  192. package/dist/version.js +1 -1
  193. package/dist/visibility/visibility.d.ts.map +1 -1
  194. package/dist/visibility/visibility.js +4 -1
  195. package/dist/visibility/visibility.js.map +1 -1
  196. package/package.json +16 -9
  197. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/html.js +0 -128
  198. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/html.js.map +0 -1
  199. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +0 -161
  200. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +0 -1
  201. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +0 -66
  202. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +0 -1
  203. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +0 -162
  204. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +0 -1
  205. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +0 -519
  206. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +0 -1
  207. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +0 -15
  208. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +0 -1
  209. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +0 -32
  210. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +0 -1
  211. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +0 -10
  212. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +0 -1
  213. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +0 -41
  214. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +0 -1
  215. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +0 -35
  216. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +0 -1
  217. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +0 -24
  218. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +0 -1
  219. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +0 -92
  220. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +0 -1
  221. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +0 -382
  222. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +0 -1
  223. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +0 -2587
  224. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +0 -1
  225. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +0 -477
  226. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +0 -1
  227. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +0 -17
  228. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +0 -1
@@ -1,12 +1,13 @@
1
1
  import { createSystem } from '../ecs/system.js';
2
2
  import '../ecs/world.js';
3
3
  import { Types } from 'elics';
4
+ import '../ecs/entity.js';
4
5
  import '../ecs/component-registry.js';
5
6
  import '../runtime/three.js';
6
7
  import { XRAnchor } from './anchor.js';
7
8
  import { XRMesh } from './mesh.js';
8
9
  import { XRPlane } from './plane.js';
9
- import { Group, Matrix4, Mesh, BoxGeometry, MeshBasicMaterial, BufferGeometry, BufferAttribute } from 'three';
10
+ import { Group, Matrix4, MeshBasicMaterial, Mesh, BoxGeometry, BufferGeometry, BufferAttribute } from 'three';
10
11
 
11
12
  /**
12
13
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -73,15 +74,35 @@ class SceneUnderstandingSystem extends createSystem({
73
74
  }) {
74
75
  constructor() {
75
76
  super(...arguments);
77
+ /** Tracks whether an anchor creation request is in progress to prevent duplicate requests */
76
78
  this.anchorRequested = false;
77
79
  this.currentPlanes = new Map();
78
80
  this.currentMeshes = new Map();
81
+ /** Group that holds all anchored objects, positioned to match the XRAnchor's world pose */
79
82
  this.anchoredGroup = new Group();
80
83
  this.matrixBuffer = new Matrix4();
81
84
  }
82
85
  init() {
86
+ // Create shared materials for performance
87
+ this.planeMaterial = new MeshBasicMaterial({
88
+ color: 0xffffff,
89
+ transparent: true,
90
+ wireframe: true,
91
+ opacity: 0.3,
92
+ });
93
+ this.meshMaterial = new MeshBasicMaterial({
94
+ color: 0x3383e6,
95
+ transparent: true,
96
+ wireframe: true,
97
+ opacity: 0.3,
98
+ });
83
99
  this.xrManager.addEventListener('sessionstart', async () => {
84
100
  this.updateEnabledFeatures(this.xrManager.getSession());
101
+ // Attempt to restore a persistent anchor from previous sessions
102
+ // This allows anchored objects to maintain their world position across sessions
103
+ if (this.anchorFeatureEnabled) {
104
+ await this.tryRestorePersistentAnchor();
105
+ }
85
106
  // Temporarily disabling initiateRoomCapture API call due to the anhor wiping issue.
86
107
  // const planes = this.xrManager.getFrame()?.detectedPlanes;
87
108
  // const meshes = this.xrManager.getFrame()?.detectedMeshes;
@@ -93,19 +114,42 @@ class SceneUnderstandingSystem extends createSystem({
93
114
  // await this.xrManager.getSession()?.initiateRoomCapture();
94
115
  // }
95
116
  });
96
- this.world.createTransformEntity(this.anchoredGroup);
97
- this.scene.add(this.anchoredGroup);
117
+ this.xrManager.addEventListener('sessionend', () => {
118
+ // Clean up all plane and mesh entities to prevent stale XRSpace references
119
+ // XRSpace objects (like planeSpace, meshSpace, anchorSpace) are tied to a specific
120
+ // XRSession and become invalid when the session ends. Using them with a new session's
121
+ // XRFrame will cause "XRSpace and XRFrame sessions do not match" errors.
122
+ this.queries.planeEntities.entities.forEach((entity) => {
123
+ entity.destroy();
124
+ });
125
+ this.queries.meshEntities.entities.forEach((entity) => {
126
+ entity.destroy();
127
+ });
128
+ // Clear session-specific state to prevent stale references
129
+ // Note: The persistent anchor UUID in localStorage is preserved for the next session
130
+ this.xrAnchor = undefined;
131
+ this.anchorRequested = false;
132
+ this.planeFeatureEnabled = undefined;
133
+ this.meshFeatureEnabled = undefined;
134
+ this.anchorFeatureEnabled = undefined;
135
+ this.currentPlanes.clear();
136
+ this.currentMeshes.clear();
137
+ });
138
+ this.world.createTransformEntity(this.anchoredGroup, {
139
+ parent: this.world.sceneEntity,
140
+ persistent: true,
141
+ });
98
142
  this.config.showWireFrame.subscribe((value) => {
99
143
  this.queries.planeEntities.entities.forEach((planeEntity) => {
100
144
  const planeObject = planeEntity.object3D;
101
145
  if (planeObject instanceof Mesh) {
102
- planeObject.material.visible = value;
146
+ planeObject.visible = value;
103
147
  }
104
148
  });
105
149
  this.queries.meshEntities.entities.forEach((meshEntity) => {
106
150
  const meshObject = meshEntity.object3D;
107
151
  if (meshObject instanceof Mesh) {
108
- meshObject.material.visible = value;
152
+ meshObject.visible = value;
109
153
  }
110
154
  });
111
155
  });
@@ -125,6 +169,7 @@ class SceneUnderstandingSystem extends createSystem({
125
169
  if (this.anchorFeatureEnabled &&
126
170
  this.xrAnchor === undefined &&
127
171
  !this.anchorRequested) {
172
+ console.log('[SceneUnderstandingSystem] Anchor needed but not present, triggering creation');
128
173
  this.createAnchor(referenceSpace);
129
174
  }
130
175
  if (this.xrAnchor && referenceSpace) {
@@ -171,16 +216,13 @@ class SceneUnderstandingSystem extends createSystem({
171
216
  }
172
217
  const width = maxX - minX;
173
218
  const height = maxZ - minZ;
174
- const geometry = new BoxGeometry(width, 0.01, height);
175
- const material = new MeshBasicMaterial({
176
- color: 0xffffff * Math.random(),
177
- wireframe: true,
178
- visible: this.config.showWireFrame.value,
179
- });
219
+ const geometry = new BoxGeometry(width, 0.001, height);
180
220
  if (this.currentPlanes.has(plane) === false) {
181
- const mesh = new Mesh(geometry, material);
221
+ const mesh = new Mesh(geometry, this.planeMaterial);
222
+ mesh.visible = this.config.showWireFrame.value;
182
223
  mesh.position.setFromMatrixPosition(this.matrixBuffer);
183
224
  mesh.quaternion.setFromRotationMatrix(this.matrixBuffer);
225
+ this.scene.add(mesh);
184
226
  const planeEntity = this.world.createTransformEntity(mesh);
185
227
  planeEntity.addComponent(XRPlane, {
186
228
  _plane: plane,
@@ -219,13 +261,10 @@ class SceneUnderstandingSystem extends createSystem({
219
261
  const geometry = new BufferGeometry();
220
262
  geometry.setAttribute('position', new BufferAttribute(mesh.vertices, 3));
221
263
  geometry.setIndex(new BufferAttribute(mesh.indices, 1));
222
- const material = new MeshBasicMaterial({
223
- color: 0xffffff * Math.random(),
224
- wireframe: true,
225
- visible: this.config.showWireFrame.value,
226
- });
227
264
  if (this.currentMeshes.has(mesh) === false) {
228
- const threeMesh = new Mesh(geometry, material);
265
+ const threeMesh = new Mesh(geometry, this.meshMaterial);
266
+ threeMesh.visible = this.config.showWireFrame.value;
267
+ this.scene.add(threeMesh);
229
268
  const meshEntity = this.world.createTransformEntity(threeMesh);
230
269
  threeMesh.position.setFromMatrixPosition(this.matrixBuffer);
231
270
  threeMesh.quaternion.setFromRotationMatrix(this.matrixBuffer);
@@ -279,6 +318,55 @@ class SceneUnderstandingSystem extends createSystem({
279
318
  console.log('Warning: anchor feature not enabled for WebXR session. Partial Scene Understanding features are disabled.');
280
319
  }
281
320
  }
321
+ /**
322
+ * Attempts to restore a persistent anchor from a previous session.
323
+ *
324
+ * Persistent anchors allow anchored objects to maintain their world position
325
+ * across XR sessions. The anchor UUID is stored in localStorage and used to
326
+ * restore the same anchor when a new session starts.
327
+ *
328
+ * If restoration fails (e.g., user cleared the space, runtime doesn't support
329
+ * persistence, or the anchor was deleted), this fails gracefully and a new
330
+ * anchor will be created in the update loop.
331
+ */
332
+ async tryRestorePersistentAnchor() {
333
+ try {
334
+ // Load the saved anchor UUID from localStorage
335
+ const savedUuid = localStorage.getItem(SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY);
336
+ if (!savedUuid) {
337
+ return;
338
+ }
339
+ const session = this.xrManager.getSession();
340
+ if (!session) {
341
+ return;
342
+ }
343
+ // Attempt to restore the anchor using the saved UUID
344
+ this.anchorRequested = true;
345
+ if (!session.restorePersistentAnchor) {
346
+ console.warn('XRSession.restorePersistentAnchor not supported');
347
+ this.anchorRequested = false;
348
+ return;
349
+ }
350
+ this.xrAnchor = await session.restorePersistentAnchor(savedUuid);
351
+ if (!this.xrAnchor) {
352
+ // Restoration returned null, will create new anchor
353
+ this.anchorRequested = false;
354
+ }
355
+ }
356
+ catch (_error) {
357
+ // Restoration failed - clear the invalid UUID and allow new anchor creation
358
+ localStorage.removeItem(SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY);
359
+ this.anchorRequested = false;
360
+ }
361
+ }
362
+ /**
363
+ * Creates a new XR anchor at the origin of the reference space.
364
+ *
365
+ * The anchor is used to attach virtual objects to a stable real-world position.
366
+ * After creation, attempts to request a persistent handle so the anchor can be
367
+ * restored in future sessions. If persistence is not supported, the anchor
368
+ * will only last for the current session.
369
+ */
282
370
  async createAnchor(referenceSpace) {
283
371
  const frame = this.xrManager.getFrame();
284
372
  if (!frame.createAnchor) {
@@ -293,6 +381,16 @@ class SceneUnderstandingSystem extends createSystem({
293
381
  this.anchorRequested = false;
294
382
  throw 'XRAnchor creation failed';
295
383
  }
384
+ // Request a persistent handle for the anchor so it can be restored in future sessions
385
+ try {
386
+ if (this.xrAnchor.requestPersistentHandle) {
387
+ const uuid = await this.xrAnchor.requestPersistentHandle();
388
+ localStorage.setItem(SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY, uuid);
389
+ }
390
+ }
391
+ catch (_error) {
392
+ // Persistence not supported or failed - anchor will work for this session only
393
+ }
296
394
  }
297
395
  updateAnchoredObject() {
298
396
  this.queries.anchoredEntities.entities.forEach((entity) => {
@@ -337,6 +435,8 @@ class SceneUnderstandingSystem extends createSystem({
337
435
  return { minEntry, maxEntry };
338
436
  }
339
437
  }
438
+ /** localStorage key for storing the persistent anchor UUID */
439
+ SceneUnderstandingSystem.ANCHOR_UUID_STORAGE_KEY = 'iwsdk_scene_anchor_uuid';
340
440
 
341
441
  export { SceneUnderstandingSystem };
342
442
  //# sourceMappingURL=scene-understanding-system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene-understanding-system.js","sources":["../../src/scene-understanding/scene-understanding-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene-understanding-system.js","sources":["../../src/scene-understanding/scene-understanding-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  export * from './transform.js';
8
+ export * from './transform-utils.js';
8
9
  export * from './synced-vector3.js';
9
10
  export * from './synced-quaternion.js';
11
+ export * from './synced-euler.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,62 @@
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 { Euler } from '../runtime/three.js';
8
+ import type { SyncedQuaternion } from './synced-quaternion.js';
9
+ /**
10
+ * Euler rotation that stays automatically synced with a SyncedQuaternion using lazy evaluation.
11
+ *
12
+ * @remarks
13
+ * - When you modify rotation.x/y/z, it automatically updates the synced quaternion
14
+ * - When the quaternion is updated (via methods OR direct buffer writes), rotation is recomputed
15
+ * - Rotation values are lazily computed from quaternion only when read (performance optimization)
16
+ * - Multiple reads in the same frame use cached values (quaternion comparison detects changes)
17
+ * - This is MORE performant than Three.js's default behavior which always syncs immediately
18
+ *
19
+ * @category Scene
20
+ */
21
+ export declare class SyncedEuler extends Euler {
22
+ private syncedQuaternion;
23
+ private __x;
24
+ private __y;
25
+ private __z;
26
+ private __order;
27
+ private isDirty;
28
+ private lastQuatX;
29
+ private lastQuatY;
30
+ private lastQuatZ;
31
+ private lastQuatW;
32
+ constructor(x?: number, y?: number, z?: number, order?: any);
33
+ private setupProperties;
34
+ /**
35
+ * Link this Euler to a SyncedQuaternion for automatic bidirectional sync.
36
+ */
37
+ setSyncedQuaternion(quaternion: SyncedQuaternion): this;
38
+ /**
39
+ * Check if quaternion values changed (e.g., via direct buffer writes).
40
+ * If changed, mark as dirty so we recompute on next read.
41
+ * This is cheap: just 4 float comparisons!
42
+ */
43
+ private checkQuaternionChanged;
44
+ /**
45
+ * Mark rotation as dirty (needs recompute from quaternion).
46
+ * Called automatically when quaternion changes.
47
+ * This is cheap - just a flag flip, no computation!
48
+ */
49
+ private markDirty;
50
+ /**
51
+ * Update the synced quaternion from current Euler values.
52
+ * Called automatically when Euler values change.
53
+ */
54
+ private updateQuaternion;
55
+ /**
56
+ * Update Euler values from the synced quaternion.
57
+ * Called lazily when rotation is read and marked dirty.
58
+ * After this, isDirty is cleared and values are cached.
59
+ */
60
+ private syncFromQuaternion;
61
+ }
62
+ //# sourceMappingURL=synced-euler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synced-euler.d.ts","sourceRoot":"","sources":["../../src/transform/synced-euler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;gBAElB,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,KAAK,GAAE,GAAW;IAUnD,OAAO,CAAC,eAAe;IAqFvB;;OAEG;IACH,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAkBvD;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAyB3B"}
@@ -0,0 +1,212 @@
1
+ import '../runtime/three.js';
2
+ import { Euler } from 'three';
3
+
4
+ /**
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ /**
11
+ * Euler rotation that stays automatically synced with a SyncedQuaternion using lazy evaluation.
12
+ *
13
+ * @remarks
14
+ * - When you modify rotation.x/y/z, it automatically updates the synced quaternion
15
+ * - When the quaternion is updated (via methods OR direct buffer writes), rotation is recomputed
16
+ * - Rotation values are lazily computed from quaternion only when read (performance optimization)
17
+ * - Multiple reads in the same frame use cached values (quaternion comparison detects changes)
18
+ * - This is MORE performant than Three.js's default behavior which always syncs immediately
19
+ *
20
+ * @category Scene
21
+ */
22
+ class SyncedEuler extends Euler {
23
+ constructor(x = 0, y = 0, z = 0, order = 'XYZ') {
24
+ super(x, y, z, order);
25
+ this.syncedQuaternion = null;
26
+ this.__x = 0;
27
+ this.__y = 0;
28
+ this.__z = 0;
29
+ this.__order = 'XYZ';
30
+ this.isDirty = false;
31
+ // Cache last quaternion values to detect external buffer modifications
32
+ this.lastQuatX = 0;
33
+ this.lastQuatY = 0;
34
+ this.lastQuatZ = 0;
35
+ this.lastQuatW = 1;
36
+ // Preserve values from parent constructor
37
+ this.__x = this._x;
38
+ this.__y = this._y;
39
+ this.__z = this._z;
40
+ this.__order = this._order;
41
+ this.setupProperties();
42
+ }
43
+ setupProperties() {
44
+ // Override internal properties with lazy sync behavior
45
+ Object.defineProperty(this, '_x', {
46
+ get: () => {
47
+ // Check if quaternion changed externally (e.g., direct buffer write)
48
+ this.checkQuaternionChanged();
49
+ // Lazily sync from quaternion if dirty
50
+ if (this.isDirty) {
51
+ this.syncFromQuaternion();
52
+ }
53
+ return this.__x;
54
+ },
55
+ set: (value) => {
56
+ this.__x = value;
57
+ this.isDirty = false; // Values are fresh since we just set them
58
+ this.updateQuaternion();
59
+ // Call parent's onChange callback for any listeners
60
+ this._onChangeCallback();
61
+ },
62
+ enumerable: true,
63
+ configurable: true,
64
+ });
65
+ Object.defineProperty(this, '_y', {
66
+ get: () => {
67
+ // Check if quaternion changed externally (e.g., direct buffer write)
68
+ this.checkQuaternionChanged();
69
+ // Lazily sync from quaternion if dirty
70
+ if (this.isDirty) {
71
+ this.syncFromQuaternion();
72
+ }
73
+ return this.__y;
74
+ },
75
+ set: (value) => {
76
+ this.__y = value;
77
+ this.isDirty = false; // Values are fresh since we just set them
78
+ this.updateQuaternion();
79
+ // Call parent's onChange callback for any listeners
80
+ this._onChangeCallback();
81
+ },
82
+ enumerable: true,
83
+ configurable: true,
84
+ });
85
+ Object.defineProperty(this, '_z', {
86
+ get: () => {
87
+ // Check if quaternion changed externally (e.g., direct buffer write)
88
+ this.checkQuaternionChanged();
89
+ // Lazily sync from quaternion if dirty
90
+ if (this.isDirty) {
91
+ this.syncFromQuaternion();
92
+ }
93
+ return this.__z;
94
+ },
95
+ set: (value) => {
96
+ this.__z = value;
97
+ this.isDirty = false; // Values are fresh since we just set them
98
+ this.updateQuaternion();
99
+ // Call parent's onChange callback for any listeners
100
+ this._onChangeCallback();
101
+ },
102
+ enumerable: true,
103
+ configurable: true,
104
+ });
105
+ Object.defineProperty(this, '_order', {
106
+ get: () => {
107
+ // Order doesn't need sync from quaternion, but check dirty for consistency
108
+ if (this.isDirty) {
109
+ this.syncFromQuaternion();
110
+ }
111
+ return this.__order;
112
+ },
113
+ set: (value) => {
114
+ this.__order = value;
115
+ this.isDirty = false; // Values are fresh since we just set them
116
+ this.updateQuaternion();
117
+ // Call parent's onChange callback for any listeners
118
+ this._onChangeCallback();
119
+ },
120
+ enumerable: true,
121
+ configurable: true,
122
+ });
123
+ }
124
+ /**
125
+ * Link this Euler to a SyncedQuaternion for automatic bidirectional sync.
126
+ */
127
+ setSyncedQuaternion(quaternion) {
128
+ this.syncedQuaternion = quaternion;
129
+ // Initialize cached quaternion values
130
+ this.lastQuatX = quaternion.x;
131
+ this.lastQuatY = quaternion.y;
132
+ this.lastQuatZ = quaternion.z;
133
+ this.lastQuatW = quaternion.w;
134
+ // Register callback that marks rotation dirty when quaternion changes from external sources
135
+ // The callback is automatically suppressed when rotation updates quaternion
136
+ quaternion._onChangeWithSuppression(() => {
137
+ this.markDirty();
138
+ });
139
+ return this;
140
+ }
141
+ /**
142
+ * Check if quaternion values changed (e.g., via direct buffer writes).
143
+ * If changed, mark as dirty so we recompute on next read.
144
+ * This is cheap: just 4 float comparisons!
145
+ */
146
+ checkQuaternionChanged() {
147
+ if (!this.syncedQuaternion || this.isDirty) {
148
+ return; // Already dirty, no need to check
149
+ }
150
+ // Compare current quaternion values to cached values
151
+ // This catches external buffer modifications that bypass onChange callbacks
152
+ if (this.syncedQuaternion.x !== this.lastQuatX ||
153
+ this.syncedQuaternion.y !== this.lastQuatY ||
154
+ this.syncedQuaternion.z !== this.lastQuatZ ||
155
+ this.syncedQuaternion.w !== this.lastQuatW) {
156
+ this.isDirty = true;
157
+ }
158
+ }
159
+ /**
160
+ * Mark rotation as dirty (needs recompute from quaternion).
161
+ * Called automatically when quaternion changes.
162
+ * This is cheap - just a flag flip, no computation!
163
+ */
164
+ markDirty() {
165
+ this.isDirty = true;
166
+ }
167
+ /**
168
+ * Update the synced quaternion from current Euler values.
169
+ * Called automatically when Euler values change.
170
+ */
171
+ updateQuaternion() {
172
+ if (!this.syncedQuaternion) {
173
+ return;
174
+ }
175
+ // Suppress the onChange callback to prevent marking rotation dirty
176
+ // when we're the ones updating the quaternion!
177
+ this.syncedQuaternion._withSuppressedOnChange(() => {
178
+ // Use setFromEuler to convert Euler to quaternion
179
+ this.syncedQuaternion.setFromEuler(this, false);
180
+ });
181
+ // Update cached quaternion values since we just changed it
182
+ this.lastQuatX = this.syncedQuaternion.x;
183
+ this.lastQuatY = this.syncedQuaternion.y;
184
+ this.lastQuatZ = this.syncedQuaternion.z;
185
+ this.lastQuatW = this.syncedQuaternion.w;
186
+ }
187
+ /**
188
+ * Update Euler values from the synced quaternion.
189
+ * Called lazily when rotation is read and marked dirty.
190
+ * After this, isDirty is cleared and values are cached.
191
+ */
192
+ syncFromQuaternion() {
193
+ if (!this.syncedQuaternion || !this.isDirty) {
194
+ return;
195
+ }
196
+ // Update internal values from quaternion (without triggering setters)
197
+ const euler = new Euler().setFromQuaternion(this.syncedQuaternion, this.__order, false);
198
+ this.__x = euler._x;
199
+ this.__y = euler._y;
200
+ this.__z = euler._z;
201
+ // Cache current quaternion values so we can detect external changes
202
+ this.lastQuatX = this.syncedQuaternion.x;
203
+ this.lastQuatY = this.syncedQuaternion.y;
204
+ this.lastQuatZ = this.syncedQuaternion.z;
205
+ this.lastQuatW = this.syncedQuaternion.w;
206
+ // Clear dirty flag - values are now fresh and cached
207
+ this.isDirty = false;
208
+ }
209
+ }
210
+
211
+ export { SyncedEuler };
212
+ //# sourceMappingURL=synced-euler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synced-euler.js","sources":["../../src/transform/synced-euler.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ export declare class SyncedQuaternion extends Quaternion {
23
23
  private __y;
24
24
  private __z;
25
25
  private __w;
26
+ private suppressOnChange;
26
27
  constructor(x?: number, y?: number, z?: number, w?: number);
27
28
  private setupProperties;
28
29
  /**
@@ -31,5 +32,15 @@ export declare class SyncedQuaternion extends Quaternion {
31
32
  * @param offset Starting index within the array (x at `offset`).
32
33
  */
33
34
  setTarget(target: Float32Array, offset?: number): this;
35
+ /**
36
+ * Register a callback that will be called when quaternion changes from external sources.
37
+ * The callback is suppressed when changes originate from rotation to prevent loops.
38
+ */
39
+ _onChangeWithSuppression(callback: () => void): void;
40
+ /**
41
+ * Temporarily suppress onChange callbacks while executing a function.
42
+ * Used when rotation updates quaternion to prevent circular updates.
43
+ */
44
+ _withSuppressedOnChange(fn: () => void): void;
34
45
  }
35
46
  //# sourceMappingURL=synced-quaternion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"synced-quaternion.d.ts","sourceRoot":"","sources":["../../src/transform/synced-quaternion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;gBAEZ,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI;IAUtC,OAAO,CAAC,eAAe;IA+EvB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,IAAI;CAKlD"}
1
+ {"version":3,"file":"synced-quaternion.d.ts","sourceRoot":"","sources":["../../src/transform/synced-quaternion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI;IAUtC,OAAO,CAAC,eAAe;IAuFvB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,IAAI;IAMjD;;;OAGG;IACH,wBAAwB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAQpD;;;OAGG;IACH,uBAAuB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;CAK9C"}