@iwsdk/core 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +13 -1
- package/dist/init/world-initializer.d.ts.map +1 -1
- package/dist/init/world-initializer.js +78 -18
- 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 +409 -5
- package/dist/input/input-system.d.ts.map +1 -1
- package/dist/input/input-system.js +166 -32
- 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 +0 -39
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.js +10 -2
- 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
|
@@ -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"}
|
|
@@ -27,6 +27,7 @@ class SyncedQuaternion extends Quaternion {
|
|
|
27
27
|
this.__y = 0;
|
|
28
28
|
this.__z = 0;
|
|
29
29
|
this.__w = 1;
|
|
30
|
+
this.suppressOnChange = false;
|
|
30
31
|
// Preserve the values set by parent constructor before overriding properties
|
|
31
32
|
this.__x = this._x;
|
|
32
33
|
this.__y = this._y;
|
|
@@ -53,6 +54,8 @@ class SyncedQuaternion extends Quaternion {
|
|
|
53
54
|
else {
|
|
54
55
|
this.__x = value;
|
|
55
56
|
}
|
|
57
|
+
// Always call onChange - the callback will check if it should act
|
|
58
|
+
this._onChangeCallback();
|
|
56
59
|
},
|
|
57
60
|
enumerable: true,
|
|
58
61
|
configurable: true,
|
|
@@ -71,6 +74,8 @@ class SyncedQuaternion extends Quaternion {
|
|
|
71
74
|
else {
|
|
72
75
|
this.__y = value;
|
|
73
76
|
}
|
|
77
|
+
// Always call onChange - the callback will check if it should act
|
|
78
|
+
this._onChangeCallback();
|
|
74
79
|
},
|
|
75
80
|
enumerable: true,
|
|
76
81
|
configurable: true,
|
|
@@ -89,6 +94,8 @@ class SyncedQuaternion extends Quaternion {
|
|
|
89
94
|
else {
|
|
90
95
|
this.__z = value;
|
|
91
96
|
}
|
|
97
|
+
// Always call onChange - the callback will check if it should act
|
|
98
|
+
this._onChangeCallback();
|
|
92
99
|
},
|
|
93
100
|
enumerable: true,
|
|
94
101
|
configurable: true,
|
|
@@ -107,6 +114,8 @@ class SyncedQuaternion extends Quaternion {
|
|
|
107
114
|
else {
|
|
108
115
|
this.__w = value;
|
|
109
116
|
}
|
|
117
|
+
// Always call onChange - the callback will check if it should act
|
|
118
|
+
this._onChangeCallback();
|
|
110
119
|
},
|
|
111
120
|
enumerable: true,
|
|
112
121
|
configurable: true,
|
|
@@ -122,6 +131,26 @@ class SyncedQuaternion extends Quaternion {
|
|
|
122
131
|
this.targetOffset = offset;
|
|
123
132
|
return this;
|
|
124
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Register a callback that will be called when quaternion changes from external sources.
|
|
136
|
+
* The callback is suppressed when changes originate from rotation to prevent loops.
|
|
137
|
+
*/
|
|
138
|
+
_onChangeWithSuppression(callback) {
|
|
139
|
+
this._onChange(() => {
|
|
140
|
+
if (!this.suppressOnChange) {
|
|
141
|
+
callback();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Temporarily suppress onChange callbacks while executing a function.
|
|
147
|
+
* Used when rotation updates quaternion to prevent circular updates.
|
|
148
|
+
*/
|
|
149
|
+
_withSuppressedOnChange(fn) {
|
|
150
|
+
this.suppressOnChange = true;
|
|
151
|
+
fn();
|
|
152
|
+
this.suppressOnChange = false;
|
|
153
|
+
}
|
|
125
154
|
}
|
|
126
155
|
|
|
127
156
|
export { SyncedQuaternion };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synced-quaternion.js","sources":["../../src/transform/synced-quaternion.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;AAUG;AACG,MAAO,gBAAiB,SAAQ,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"synced-quaternion.js","sources":["../../src/transform/synced-quaternion.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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 { Object3D, Quaternion, Vector3 } from 'three';
|
|
8
|
+
/**
|
|
9
|
+
* Sets an object's position such that its world position matches the given world position.
|
|
10
|
+
* Handles parent transforms correctly.
|
|
11
|
+
*
|
|
12
|
+
* @param object - The Object3D to set the position on
|
|
13
|
+
* @param worldPosition - The desired world position
|
|
14
|
+
*/
|
|
15
|
+
export declare function setWorldPosition(object: Object3D, worldPosition: Vector3): void;
|
|
16
|
+
/**
|
|
17
|
+
* Sets an object's quaternion such that its world quaternion matches the given world quaternion.
|
|
18
|
+
* Handles parent transforms correctly, including parents with non-uniform scale.
|
|
19
|
+
*
|
|
20
|
+
* @param object - The Object3D to set the quaternion on
|
|
21
|
+
* @param worldQuaternion - The desired world quaternion
|
|
22
|
+
*/
|
|
23
|
+
export declare function setWorldQuaternion(object: Object3D, worldQuaternion: Quaternion): void;
|
|
24
|
+
//# sourceMappingURL=transform-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-utils.d.ts","sourceRoot":"","sources":["../../src/transform/transform-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQ/D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,EAChB,aAAa,EAAE,OAAO,GACrB,IAAI,CASN;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,EAChB,eAAe,EAAE,UAAU,GAC1B,IAAI,CAUN"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Matrix4, Quaternion, Vector3 } from 'three';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
// Reusable objects to avoid allocations in hot paths
|
|
10
|
+
const _m1 = new Matrix4();
|
|
11
|
+
const _q1 = new Quaternion();
|
|
12
|
+
const _position = new Vector3();
|
|
13
|
+
const _scale = new Vector3();
|
|
14
|
+
/**
|
|
15
|
+
* Sets an object's position such that its world position matches the given world position.
|
|
16
|
+
* Handles parent transforms correctly.
|
|
17
|
+
*
|
|
18
|
+
* @param object - The Object3D to set the position on
|
|
19
|
+
* @param worldPosition - The desired world position
|
|
20
|
+
*/
|
|
21
|
+
function setWorldPosition(object, worldPosition) {
|
|
22
|
+
const parent = object.parent;
|
|
23
|
+
if (parent === null) {
|
|
24
|
+
object.position.copy(worldPosition);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
parent.updateWorldMatrix(true, false);
|
|
28
|
+
_m1.copy(parent.matrixWorld).invert();
|
|
29
|
+
object.position.copy(worldPosition).applyMatrix4(_m1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sets an object's quaternion such that its world quaternion matches the given world quaternion.
|
|
34
|
+
* Handles parent transforms correctly, including parents with non-uniform scale.
|
|
35
|
+
*
|
|
36
|
+
* @param object - The Object3D to set the quaternion on
|
|
37
|
+
* @param worldQuaternion - The desired world quaternion
|
|
38
|
+
*/
|
|
39
|
+
function setWorldQuaternion(object, worldQuaternion) {
|
|
40
|
+
const parent = object.parent;
|
|
41
|
+
if (parent === null) {
|
|
42
|
+
object.quaternion.copy(worldQuaternion);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
parent.updateWorldMatrix(true, false);
|
|
46
|
+
// Extract parent's world quaternion via decompose (handles non-uniform scale correctly)
|
|
47
|
+
parent.matrixWorld.decompose(_position, _q1, _scale);
|
|
48
|
+
object.quaternion.copy(worldQuaternion).premultiply(_q1.invert());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { setWorldPosition, setWorldQuaternion };
|
|
53
|
+
//# sourceMappingURL=transform-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-utils.js","sources":["../../src/transform/transform-utils.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAIH;AACA,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AACzB,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE;AAC5B,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE;AAC/B,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;AAE5B;;;;;;AAMG;AACG,SAAU,gBAAgB,CAC9B,MAAgB,EAChB,aAAsB,EAAA;AAEtB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;IACrC;SAAO;AACL,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AACrC,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;IACvD;AACF;AAEA;;;;;;AAMG;AACG,SAAU,kBAAkB,CAChC,MAAgB,EAChB,eAA2B,EAAA;AAE3B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;IACzC;SAAO;AACL,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;;QAErC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC;AACpD,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACnE;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,EAKN,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,EAKN,MAAM,iBAAiB,CAAC;AAOzB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;iBAMkC,GAAG;;EAG1D,CAAC;;;;;;;;;;;;;;;;;;yBAHsD,GAAG;;;;;;;;;;;;;;;;;;;;;yBAAH,GAAG;;;;;AAyI3D;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,oBAEnC;IACA,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,IAAI;CA+Bf"}
|
|
@@ -10,12 +10,13 @@ import '../asset/asset-manager.js';
|
|
|
10
10
|
import '../asset/cache-manager.js';
|
|
11
11
|
import '@pmndrs/uikit';
|
|
12
12
|
import '@preact/signals-core';
|
|
13
|
-
import { Vector3, Quaternion } from 'three';
|
|
13
|
+
import { Vector3, Quaternion, Euler } from 'three';
|
|
14
14
|
import '../ui/ui.js';
|
|
15
15
|
import '../ui/follow.js';
|
|
16
16
|
import '../ui/screenspace.js';
|
|
17
17
|
import '../level/level-root.js';
|
|
18
18
|
import '../runtime/three.js';
|
|
19
|
+
import { SyncedEuler } from './synced-euler.js';
|
|
19
20
|
import { SyncedQuaternion } from './synced-quaternion.js';
|
|
20
21
|
import { SyncedVector3 } from './synced-vector3.js';
|
|
21
22
|
|
|
@@ -74,8 +75,18 @@ function attachToEntity(entity) {
|
|
|
74
75
|
configurable: true,
|
|
75
76
|
enumerable: true,
|
|
76
77
|
});
|
|
78
|
+
const syncedQuat = new SyncedQuaternion().setTarget(object3D.quaternionView);
|
|
77
79
|
Object.defineProperty(object3D, 'quaternion', {
|
|
78
|
-
value:
|
|
80
|
+
value: syncedQuat,
|
|
81
|
+
writable: false,
|
|
82
|
+
configurable: true,
|
|
83
|
+
enumerable: true,
|
|
84
|
+
});
|
|
85
|
+
// Replace rotation with SyncedEuler that stays in sync with the quaternion
|
|
86
|
+
Object.defineProperty(object3D, 'rotation', {
|
|
87
|
+
value: new SyncedEuler()
|
|
88
|
+
.copy(object3D.rotation)
|
|
89
|
+
.setSyncedQuaternion(syncedQuat),
|
|
79
90
|
writable: false,
|
|
80
91
|
configurable: true,
|
|
81
92
|
enumerable: true,
|
|
@@ -124,6 +135,12 @@ function detachFromEntity(entity) {
|
|
|
124
135
|
configurable: true,
|
|
125
136
|
enumerable: true,
|
|
126
137
|
});
|
|
138
|
+
Object.defineProperty(object3D, 'rotation', {
|
|
139
|
+
value: new Euler().copy(object3D.rotation),
|
|
140
|
+
writable: false,
|
|
141
|
+
configurable: true,
|
|
142
|
+
enumerable: true,
|
|
143
|
+
});
|
|
127
144
|
Object.defineProperty(object3D, 'scale', {
|
|
128
145
|
value: new Vector3().copy(object3D.scale),
|
|
129
146
|
writable: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sources":["../../src/transform/transform.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transform.js","sources":["../../src/transform/transform.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/ui/follow.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createSystem } from '../ecs/system.js';
|
|
2
2
|
import '../ecs/world.js';
|
|
3
3
|
import { createComponent, Types } from 'elics';
|
|
4
|
+
import '../ecs/entity.js';
|
|
4
5
|
import '../ecs/component-registry.js';
|
|
5
6
|
import '../runtime/three.js';
|
|
6
7
|
import { Vector3, Quaternion, Euler, MathUtils } from 'three';
|
package/dist/ui/follow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"follow.js","sources":["../../src/ui/follow.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"follow.js","sources":["../../src/ui/follow.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* @category UI
|
|
12
12
|
*/
|
|
13
13
|
export { UIKitDocument } from './document.js';
|
|
14
|
-
export { PanelUI, PanelDocument, PanelUISystem, ColorSchemeType } from './ui.js';
|
|
14
|
+
export { PanelUI, PanelDocument, PanelUISystem, ColorSchemeType, } from './ui.js';
|
|
15
15
|
export type { PanelUIProps, ColorScheme } from './ui.js';
|
|
16
16
|
export * from './follow.js';
|
|
17
17
|
export * from './screenspace.js';
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzD,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
|
package/dist/ui/screenspace.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createSystem } from '../ecs/system.js';
|
|
2
2
|
import '../ecs/world.js';
|
|
3
3
|
import { createComponent, Types } from 'elics';
|
|
4
|
+
import '../ecs/entity.js';
|
|
4
5
|
import '../ecs/component-registry.js';
|
|
5
6
|
import '../runtime/three.js';
|
|
6
7
|
import { PanelUI, PanelDocument } from './ui.js';
|