@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.
- package/README.md +94 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
- package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
- package/dist/asset/loaders/hdr-texture-loader.js +4 -4
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
- package/dist/audio/audio-system.d.ts +6 -2
- package/dist/audio/audio-system.d.ts.map +1 -1
- package/dist/audio/audio-system.js +1 -0
- package/dist/audio/audio-system.js.map +1 -1
- package/dist/audio/audio.d.ts +3 -1
- package/dist/audio/audio.d.ts.map +1 -1
- package/dist/audio/audio.js +8 -2
- package/dist/audio/audio.js.map +1 -1
- package/dist/camera/camera-source.js +1 -0
- package/dist/camera/camera-source.js.map +1 -1
- package/dist/camera/camera-system.d.ts.map +1 -1
- package/dist/camera/camera-system.js +1 -0
- package/dist/camera/camera-system.js.map +1 -1
- package/dist/camera/camera-utils.d.ts.map +1 -1
- package/dist/camera/camera-utils.js.map +1 -1
- package/dist/depth/depth-occludable.d.ts +48 -0
- package/dist/depth/depth-occludable.d.ts.map +1 -0
- package/dist/depth/depth-occludable.js +48 -0
- package/dist/depth/depth-occludable.js.map +1 -0
- package/dist/depth/depth-sensing-system.d.ts +164 -0
- package/dist/depth/depth-sensing-system.d.ts.map +1 -0
- package/dist/depth/depth-sensing-system.js +453 -0
- package/dist/depth/depth-sensing-system.js.map +1 -0
- package/dist/depth/depth-textures.d.ts +53 -0
- package/dist/depth/depth-textures.d.ts.map +1 -0
- package/dist/depth/depth-textures.js +114 -0
- package/dist/depth/depth-textures.js.map +1 -0
- package/dist/depth/index.d.ts +10 -0
- package/dist/depth/index.d.ts.map +1 -0
- package/dist/depth/occlusion/preprocessing-pass.d.ts +52 -0
- package/dist/depth/occlusion/preprocessing-pass.d.ts.map +1 -0
- package/dist/depth/occlusion/preprocessing-pass.js +105 -0
- package/dist/depth/occlusion/preprocessing-pass.js.map +1 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts +22 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts.map +1 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.js +115 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -0
- package/dist/ecs/entity.d.ts +17 -1
- package/dist/ecs/entity.d.ts.map +1 -1
- package/dist/ecs/entity.js +7 -1
- package/dist/ecs/entity.js.map +1 -1
- package/dist/ecs/world.d.ts +12 -0
- package/dist/ecs/world.d.ts.map +1 -1
- package/dist/ecs/world.js +47 -3
- package/dist/ecs/world.js.map +1 -1
- package/dist/environment/dome-gradient.js +1 -0
- package/dist/environment/dome-gradient.js.map +1 -1
- package/dist/environment/dome-texture.d.ts +3 -1
- package/dist/environment/dome-texture.d.ts.map +1 -1
- package/dist/environment/dome-texture.js +7 -1
- package/dist/environment/dome-texture.js.map +1 -1
- package/dist/environment/environment-system.d.ts +8 -0
- package/dist/environment/environment-system.d.ts.map +1 -1
- package/dist/environment/environment-system.js +78 -2
- package/dist/environment/environment-system.js.map +1 -1
- package/dist/environment/ibl-gradient.js +1 -0
- package/dist/environment/ibl-gradient.js.map +1 -1
- package/dist/environment/ibl-texture.d.ts +3 -1
- package/dist/environment/ibl-texture.d.ts.map +1 -1
- package/dist/environment/ibl-texture.js +7 -1
- package/dist/environment/ibl-texture.js.map +1 -1
- package/dist/environment-raycast/environment-raycast.d.ts +136 -0
- package/dist/environment-raycast/environment-raycast.d.ts.map +1 -0
- package/dist/environment-raycast/environment-raycast.js +333 -0
- package/dist/environment-raycast/environment-raycast.js.map +1 -0
- package/dist/environment-raycast/index.d.ts +9 -0
- package/dist/environment-raycast/index.d.ts.map +1 -0
- package/dist/environment-raycast/raycast-target.d.ts +114 -0
- package/dist/environment-raycast/raycast-target.d.ts.map +1 -0
- package/dist/environment-raycast/raycast-target.js +84 -0
- package/dist/environment-raycast/raycast-target.js.map +1 -0
- package/dist/grab/distance-grabbable.d.ts +27 -2
- package/dist/grab/distance-grabbable.d.ts.map +1 -1
- package/dist/grab/distance-grabbable.js +25 -2
- package/dist/grab/distance-grabbable.js.map +1 -1
- package/dist/grab/grab-system.d.ts +106 -61
- package/dist/grab/grab-system.d.ts.map +1 -1
- package/dist/grab/grab-system.js +61 -10
- package/dist/grab/grab-system.js.map +1 -1
- package/dist/grab/handles.d.ts +14 -4
- package/dist/grab/handles.d.ts.map +1 -1
- package/dist/grab/handles.js +45 -18
- package/dist/grab/handles.js.map +1 -1
- package/dist/grab/index.d.ts +0 -1
- package/dist/grab/index.d.ts.map +1 -1
- package/dist/grab/index.js +0 -2
- package/dist/grab/index.js.map +1 -1
- package/dist/grab/one-hand-grabbable.js +1 -0
- package/dist/grab/one-hand-grabbable.js.map +1 -1
- package/dist/grab/two-hands-grabbable.js +1 -0
- package/dist/grab/two-hands-grabbable.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/init/world-initializer.d.ts +17 -3
- package/dist/init/world-initializer.d.ts.map +1 -1
- package/dist/init/world-initializer.js +86 -19
- package/dist/init/world-initializer.js.map +1 -1
- package/dist/init/xr.d.ts +1 -0
- package/dist/init/xr.d.ts.map +1 -1
- package/dist/init/xr.js +6 -0
- package/dist/init/xr.js.map +1 -1
- package/dist/input/input-system.d.ts +408 -5
- package/dist/input/input-system.d.ts.map +1 -1
- package/dist/input/input-system.js +146 -23
- package/dist/input/input-system.js.map +1 -1
- package/dist/input/state-tags.d.ts +32 -15
- package/dist/input/state-tags.d.ts.map +1 -1
- package/dist/input/state-tags.js +34 -16
- package/dist/input/state-tags.js.map +1 -1
- package/dist/level/level-entity-creator.js +1 -0
- package/dist/level/level-entity-creator.js.map +1 -1
- package/dist/level/level-root.js +1 -0
- package/dist/level/level-root.js.map +1 -1
- package/dist/level/level-system.js +1 -0
- package/dist/level/level-system.js.map +1 -1
- package/dist/level/level-tag.js +1 -0
- package/dist/level/level-tag.js.map +1 -1
- package/dist/locomotion/locomotion.d.ts +10 -0
- package/dist/locomotion/locomotion.d.ts.map +1 -1
- package/dist/locomotion/locomotion.js +17 -1
- package/dist/locomotion/locomotion.js.map +1 -1
- package/dist/locomotion/slide.d.ts +10 -0
- package/dist/locomotion/slide.d.ts.map +1 -1
- package/dist/locomotion/slide.js +6 -2
- package/dist/locomotion/slide.js.map +1 -1
- package/dist/locomotion/teleport.js +1 -0
- package/dist/locomotion/teleport.js.map +1 -1
- package/dist/mcp/ecs-debug-tools.d.ts +167 -0
- package/dist/mcp/ecs-debug-tools.d.ts.map +1 -0
- package/dist/mcp/ecs-debug-tools.js +602 -0
- package/dist/mcp/ecs-debug-tools.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/mcp-runtime.d.ts +31 -0
- package/dist/mcp/mcp-runtime.d.ts.map +1 -0
- package/dist/mcp/mcp-runtime.js +85 -0
- package/dist/mcp/mcp-runtime.js.map +1 -0
- package/dist/mcp/scene-tools.d.ts +41 -0
- package/dist/mcp/scene-tools.d.ts.map +1 -0
- package/dist/mcp/scene-tools.js +95 -0
- package/dist/mcp/scene-tools.js.map +1 -0
- package/dist/physics/physics-system.d.ts +1 -1
- package/dist/physics/physics-system.d.ts.map +1 -1
- package/dist/physics/physics-system.js +9 -4
- package/dist/physics/physics-system.js.map +1 -1
- package/dist/physics/utils.d.ts.map +1 -1
- package/dist/physics/utils.js +1 -1
- package/dist/scene-understanding/anchor.js +1 -0
- package/dist/scene-understanding/anchor.js.map +1 -1
- package/dist/scene-understanding/mesh.js +1 -0
- package/dist/scene-understanding/mesh.js.map +1 -1
- package/dist/scene-understanding/plane.js +1 -0
- package/dist/scene-understanding/plane.js.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.d.ts +29 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.js +118 -18
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
- package/dist/transform/index.d.ts +2 -0
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/synced-euler.d.ts +62 -0
- package/dist/transform/synced-euler.d.ts.map +1 -0
- package/dist/transform/synced-euler.js +212 -0
- package/dist/transform/synced-euler.js.map +1 -0
- package/dist/transform/synced-quaternion.d.ts +11 -0
- package/dist/transform/synced-quaternion.d.ts.map +1 -1
- package/dist/transform/synced-quaternion.js +29 -0
- package/dist/transform/synced-quaternion.js.map +1 -1
- package/dist/transform/transform-utils.d.ts +24 -0
- package/dist/transform/transform-utils.d.ts.map +1 -0
- package/dist/transform/transform-utils.js +53 -0
- package/dist/transform/transform-utils.js.map +1 -0
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +19 -2
- package/dist/transform/transform.js.map +1 -1
- package/dist/ui/follow.js +1 -0
- package/dist/ui/follow.js.map +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/screenspace.js +1 -0
- package/dist/ui/screenspace.js.map +1 -1
- package/dist/ui/ui.d.ts.map +1 -1
- package/dist/ui/ui.js +2 -8
- package/dist/ui/ui.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visibility/visibility.d.ts.map +1 -1
- package/dist/visibility/visibility.js +4 -1
- package/dist/visibility/visibility.js.map +1 -1
- package/package.json +16 -9
- 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
- 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
- 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
- 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
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +0 -66
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +0 -162
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +0 -519
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +0 -15
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +0 -32
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +0 -10
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +0 -41
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +0 -35
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +0 -24
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +0 -92
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +0 -382
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +0 -2587
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +0 -477
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +0 -17
- 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,
|
|
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.
|
|
97
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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,
|
|
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;
|
|
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"}
|