@iwsdk/core 0.1.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/LICENSE +21 -0
- package/dist/asset/asset-manager.d.ts +72 -0
- package/dist/asset/asset-manager.d.ts.map +1 -0
- package/dist/asset/asset-manager.js +138 -0
- package/dist/asset/asset-manager.js.map +1 -0
- package/dist/asset/cache-manager.d.ts +44 -0
- package/dist/asset/cache-manager.d.ts.map +1 -0
- package/dist/asset/cache-manager.js +80 -0
- package/dist/asset/cache-manager.js.map +1 -0
- package/dist/asset/index.d.ts +9 -0
- package/dist/asset/index.d.ts.map +1 -0
- package/dist/asset/loaders/audio-loader.d.ts +21 -0
- package/dist/asset/loaders/audio-loader.d.ts.map +1 -0
- package/dist/asset/loaders/audio-loader.js +57 -0
- package/dist/asset/loaders/audio-loader.js.map +1 -0
- package/dist/asset/loaders/gltf-loader.d.ts +33 -0
- package/dist/asset/loaders/gltf-loader.d.ts.map +1 -0
- package/dist/asset/loaders/gltf-loader.js +79 -0
- package/dist/asset/loaders/gltf-loader.js.map +1 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts +18 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -0
- package/dist/asset/loaders/hdr-texture-loader.js +65 -0
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -0
- package/dist/asset/loaders/texture-loader.d.ts +21 -0
- package/dist/asset/loaders/texture-loader.d.ts.map +1 -0
- package/dist/asset/loaders/texture-loader.js +57 -0
- package/dist/asset/loaders/texture-loader.js.map +1 -0
- package/dist/audio/audio-pool.d.ts +59 -0
- package/dist/audio/audio-pool.d.ts.map +1 -0
- package/dist/audio/audio-pool.js +105 -0
- package/dist/audio/audio-pool.js.map +1 -0
- package/dist/audio/audio-system.d.ts +326 -0
- package/dist/audio/audio-system.d.ts.map +1 -0
- package/dist/audio/audio-system.js +478 -0
- package/dist/audio/audio-system.js.map +1 -0
- package/dist/audio/audio-utils.d.ts +71 -0
- package/dist/audio/audio-utils.d.ts.map +1 -0
- package/dist/audio/audio-utils.js +145 -0
- package/dist/audio/audio-utils.js.map +1 -0
- package/dist/audio/audio.d.ts +178 -0
- package/dist/audio/audio.d.ts.map +1 -0
- package/dist/audio/audio.js +104 -0
- package/dist/audio/audio.js.map +1 -0
- package/dist/audio/index.d.ts +11 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/ecs/component-registry.d.ts +54 -0
- package/dist/ecs/component-registry.d.ts.map +1 -0
- package/dist/ecs/component-registry.js +86 -0
- package/dist/ecs/component-registry.js.map +1 -0
- package/dist/ecs/component.d.ts +12 -0
- package/dist/ecs/component.d.ts.map +1 -0
- package/dist/ecs/entity.d.ts +17 -0
- package/dist/ecs/entity.d.ts.map +1 -0
- package/dist/ecs/entity.js +13 -0
- package/dist/ecs/entity.js.map +1 -0
- package/dist/ecs/index.d.ts +12 -0
- package/dist/ecs/index.d.ts.map +1 -0
- package/dist/ecs/system.d.ts +70 -0
- package/dist/ecs/system.d.ts.map +1 -0
- package/dist/ecs/system.js +79 -0
- package/dist/ecs/system.js.map +1 -0
- package/dist/ecs/world.d.ts +101 -0
- package/dist/ecs/world.d.ts.map +1 -0
- package/dist/ecs/world.js +165 -0
- package/dist/ecs/world.js.map +1 -0
- package/dist/environment/dome-gradient.d.ts +39 -0
- package/dist/environment/dome-gradient.d.ts.map +1 -0
- package/dist/environment/dome-gradient.js +30 -0
- package/dist/environment/dome-gradient.js.map +1 -0
- package/dist/environment/dome-texture.d.ts +39 -0
- package/dist/environment/dome-texture.d.ts.map +1 -0
- package/dist/environment/dome-texture.js +30 -0
- package/dist/environment/dome-texture.js.map +1 -0
- package/dist/environment/environment-system.d.ts +82 -0
- package/dist/environment/environment-system.d.ts.map +1 -0
- package/dist/environment/environment-system.js +389 -0
- package/dist/environment/environment-system.js.map +1 -0
- package/dist/environment/gradient-environment.d.ts +37 -0
- package/dist/environment/gradient-environment.d.ts.map +1 -0
- package/dist/environment/gradient-environment.js +99 -0
- package/dist/environment/gradient-environment.js.map +1 -0
- package/dist/environment/ibl-gradient.d.ts +38 -0
- package/dist/environment/ibl-gradient.d.ts.map +1 -0
- package/dist/environment/ibl-gradient.js +29 -0
- package/dist/environment/ibl-gradient.js.map +1 -0
- package/dist/environment/ibl-texture.d.ts +36 -0
- package/dist/environment/ibl-texture.d.ts.map +1 -0
- package/dist/environment/ibl-texture.js +30 -0
- package/dist/environment/ibl-texture.js.map +1 -0
- package/dist/environment/index.d.ts +12 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/grab/distance-grabbable.d.ts +115 -0
- package/dist/grab/distance-grabbable.d.ts.map +1 -0
- package/dist/grab/distance-grabbable.js +102 -0
- package/dist/grab/distance-grabbable.js.map +1 -0
- package/dist/grab/grab-system.d.ts +320 -0
- package/dist/grab/grab-system.d.ts.map +1 -0
- package/dist/grab/grab-system.js +239 -0
- package/dist/grab/grab-system.js.map +1 -0
- package/dist/grab/handles.d.ts +43 -0
- package/dist/grab/handles.d.ts.map +1 -0
- package/dist/grab/handles.js +132 -0
- package/dist/grab/handles.js.map +1 -0
- package/dist/grab/index.d.ts +13 -0
- package/dist/grab/index.d.ts.map +1 -0
- package/dist/grab/index.js +23 -0
- package/dist/grab/index.js.map +1 -0
- package/dist/grab/one-hand-grabbable.d.ts +80 -0
- package/dist/grab/one-hand-grabbable.d.ts.map +1 -0
- package/dist/grab/one-hand-grabbable.js +80 -0
- package/dist/grab/one-hand-grabbable.js.map +1 -0
- package/dist/grab/pointer-events-patch.d.ts +16 -0
- package/dist/grab/pointer-events-patch.d.ts.map +1 -0
- package/dist/grab/pointer-events-patch.js +223 -0
- package/dist/grab/pointer-events-patch.js.map +1 -0
- package/dist/grab/two-hands-grabbable.d.ts +103 -0
- package/dist/grab/two-hands-grabbable.d.ts.map +1 -0
- package/dist/grab/two-hands-grabbable.js +100 -0
- package/dist/grab/two-hands-grabbable.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/init/index.d.ts +9 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/world-initializer.d.ts +76 -0
- package/dist/init/world-initializer.d.ts.map +1 -0
- package/dist/init/world-initializer.js +403 -0
- package/dist/init/world-initializer.js.map +1 -0
- package/dist/init/xr.d.ts +87 -0
- package/dist/init/xr.d.ts.map +1 -0
- package/dist/init/xr.js +193 -0
- package/dist/init/xr.js.map +1 -0
- package/dist/input/index.d.ts +9 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/input-system.d.ts +52 -0
- package/dist/input/input-system.d.ts.map +1 -0
- package/dist/input/input-system.js +176 -0
- package/dist/input/input-system.js.map +1 -0
- package/dist/input/state-tags.d.ts +56 -0
- package/dist/input/state-tags.d.ts.map +1 -0
- package/dist/input/state-tags.js +63 -0
- package/dist/input/state-tags.js.map +1 -0
- package/dist/level/index.d.ts +12 -0
- package/dist/level/index.d.ts.map +1 -0
- package/dist/level/level-entity-creator.d.ts +27 -0
- package/dist/level/level-entity-creator.d.ts.map +1 -0
- package/dist/level/level-entity-creator.js +110 -0
- package/dist/level/level-entity-creator.js.map +1 -0
- package/dist/level/level-glxf-importer.d.ts +22 -0
- package/dist/level/level-glxf-importer.d.ts.map +1 -0
- package/dist/level/level-glxf-importer.js +40 -0
- package/dist/level/level-glxf-importer.js.map +1 -0
- package/dist/level/level-root.d.ts +18 -0
- package/dist/level/level-root.d.ts.map +1 -0
- package/dist/level/level-root.js +25 -0
- package/dist/level/level-root.js.map +1 -0
- package/dist/level/level-system.d.ts +54 -0
- package/dist/level/level-system.d.ts.map +1 -0
- package/dist/level/level-system.js +134 -0
- package/dist/level/level-system.js.map +1 -0
- package/dist/level/level-tag.d.ts +25 -0
- package/dist/level/level-tag.d.ts.map +1 -0
- package/dist/level/level-tag.js +28 -0
- package/dist/level/level-tag.js.map +1 -0
- package/dist/locomotion/geometries/beveled-cylinder.d.ts +12 -0
- package/dist/locomotion/geometries/beveled-cylinder.d.ts.map +1 -0
- package/dist/locomotion/geometries/beveled-cylinder.js +64 -0
- package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -0
- package/dist/locomotion/index.d.ts +11 -0
- package/dist/locomotion/index.d.ts.map +1 -0
- package/dist/locomotion/locomotion.d.ts +239 -0
- package/dist/locomotion/locomotion.d.ts.map +1 -0
- package/dist/locomotion/locomotion.js +256 -0
- package/dist/locomotion/locomotion.js.map +1 -0
- package/dist/locomotion/materials/line.d.ts +24 -0
- package/dist/locomotion/materials/line.d.ts.map +1 -0
- package/dist/locomotion/materials/line.js +307 -0
- package/dist/locomotion/materials/line.js.map +1 -0
- package/dist/locomotion/slide.d.ts +76 -0
- package/dist/locomotion/slide.d.ts.map +1 -0
- package/dist/locomotion/slide.js +131 -0
- package/dist/locomotion/slide.js.map +1 -0
- package/dist/locomotion/teleport.d.ts +68 -0
- package/dist/locomotion/teleport.d.ts.map +1 -0
- package/dist/locomotion/teleport.js +150 -0
- package/dist/locomotion/teleport.js.map +1 -0
- package/dist/locomotion/turn.d.ts +77 -0
- package/dist/locomotion/turn.d.ts.map +1 -0
- package/dist/locomotion/turn.js +126 -0
- package/dist/locomotion/turn.js.map +1 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js +13 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +154 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +66 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +162 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +519 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +15 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +32 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +10 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +41 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +35 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +24 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +92 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +382 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +2587 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +477 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +17 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +1 -0
- package/dist/physics/index.d.ts +11 -0
- package/dist/physics/index.d.ts.map +1 -0
- package/dist/physics/physics-system.d.ts +314 -0
- package/dist/physics/physics-system.d.ts.map +1 -0
- package/dist/physics/physics-system.js +419 -0
- package/dist/physics/physics-system.js.map +1 -0
- package/dist/physics/physicsBody.d.ts +83 -0
- package/dist/physics/physicsBody.d.ts.map +1 -0
- package/dist/physics/physicsBody.js +60 -0
- package/dist/physics/physicsBody.js.map +1 -0
- package/dist/physics/physicsManipulation.d.ts +51 -0
- package/dist/physics/physicsManipulation.d.ts.map +1 -0
- package/dist/physics/physicsManipulation.js +46 -0
- package/dist/physics/physicsManipulation.js.map +1 -0
- package/dist/physics/physicsShape.d.ts +133 -0
- package/dist/physics/physicsShape.d.ts.map +1 -0
- package/dist/physics/physicsShape.js +97 -0
- package/dist/physics/physicsShape.js.map +1 -0
- package/dist/physics/utils.d.ts +21 -0
- package/dist/physics/utils.d.ts.map +1 -0
- package/dist/physics/utils.js +130 -0
- package/dist/physics/utils.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/three.d.ts +8 -0
- package/dist/runtime/three.d.ts.map +1 -0
- package/dist/runtime/three.js +18 -0
- package/dist/runtime/three.js.map +1 -0
- package/dist/scene-understanding/anchor.d.ts +42 -0
- package/dist/scene-understanding/anchor.d.ts.map +1 -0
- package/dist/scene-understanding/anchor.js +45 -0
- package/dist/scene-understanding/anchor.js.map +1 -0
- package/dist/scene-understanding/index.d.ts +11 -0
- package/dist/scene-understanding/index.d.ts.map +1 -0
- package/dist/scene-understanding/mesh.d.ts +67 -0
- package/dist/scene-understanding/mesh.d.ts.map +1 -0
- package/dist/scene-understanding/mesh.js +55 -0
- package/dist/scene-understanding/mesh.js.map +1 -0
- package/dist/scene-understanding/plane.d.ts +39 -0
- package/dist/scene-understanding/plane.d.ts.map +1 -0
- package/dist/scene-understanding/plane.js +42 -0
- package/dist/scene-understanding/plane.js.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts +180 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.js +342 -0
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -0
- package/dist/transform/index.d.ts +10 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/synced-quaternion.d.ts +35 -0
- package/dist/transform/synced-quaternion.d.ts.map +1 -0
- package/dist/transform/synced-quaternion.js +128 -0
- package/dist/transform/synced-quaternion.js.map +1 -0
- package/dist/transform/synced-vector3.d.ts +34 -0
- package/dist/transform/synced-vector3.d.ts.map +1 -0
- package/dist/transform/synced-vector3.js +106 -0
- package/dist/transform/synced-vector3.js.map +1 -0
- package/dist/transform/transform.d.ts +100 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/transform.js +194 -0
- package/dist/transform/transform.js.map +1 -0
- package/dist/types/webxr-augmentations.d.ts +23 -0
- package/dist/types/webxr-augmentations.d.ts.map +1 -0
- package/dist/ui/document.d.ts +112 -0
- package/dist/ui/document.d.ts.map +1 -0
- package/dist/ui/document.js +298 -0
- package/dist/ui/document.js.map +1 -0
- package/dist/ui/follow.d.ts +197 -0
- package/dist/ui/follow.d.ts.map +1 -0
- package/dist/ui/follow.js +143 -0
- package/dist/ui/follow.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/screenspace.d.ts +219 -0
- package/dist/ui/screenspace.d.ts.map +1 -0
- package/dist/ui/screenspace.js +215 -0
- package/dist/ui/screenspace.js.map +1 -0
- package/dist/ui/ui.d.ts +209 -0
- package/dist/ui/ui.d.ts.map +1 -0
- package/dist/ui/ui.js +185 -0
- package/dist/ui/ui.js.map +1 -0
- package/dist/vendor/basis/README.md +46 -0
- package/dist/vendor/basis/basis_transcoder.js +19 -0
- package/dist/vendor/basis/basis_transcoder.wasm +0 -0
- package/dist/vendor/draco/README.md +32 -0
- package/dist/vendor/draco/draco_decoder.js +34 -0
- package/dist/vendor/draco/draco_decoder.wasm +0 -0
- package/dist/vendor/draco/draco_encoder.js +33 -0
- package/dist/vendor/draco/draco_wasm_wrapper.js +117 -0
- package/dist/vendor/draco/gltf/draco_decoder.js +33 -0
- package/dist/vendor/draco/gltf/draco_decoder.wasm +0 -0
- package/dist/vendor/draco/gltf/draco_encoder.js +33 -0
- package/dist/vendor/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/visibility/index.d.ts +8 -0
- package/dist/visibility/index.d.ts.map +1 -0
- package/dist/visibility/visibility.d.ts +37 -0
- package/dist/visibility/visibility.d.ts.map +1 -0
- package/dist/visibility/visibility.js +52 -0
- package/dist/visibility/visibility.js.map +1 -0
- package/package.json +46 -0
package/dist/init/xr.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
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
|
+
/** WebXR session modes supported by IWSDK. @category Runtime */
|
|
8
|
+
var SessionMode;
|
|
9
|
+
(function (SessionMode) {
|
|
10
|
+
SessionMode["ImmersiveVR"] = "immersive-vr";
|
|
11
|
+
SessionMode["ImmersiveAR"] = "immersive-ar";
|
|
12
|
+
})(SessionMode || (SessionMode = {}));
|
|
13
|
+
/** Common WebXR reference spaces. @category Runtime */
|
|
14
|
+
var ReferenceSpaceType;
|
|
15
|
+
(function (ReferenceSpaceType) {
|
|
16
|
+
ReferenceSpaceType["BoundedFloor"] = "bounded-floor";
|
|
17
|
+
ReferenceSpaceType["Local"] = "local";
|
|
18
|
+
ReferenceSpaceType["LocalFloor"] = "local-floor";
|
|
19
|
+
ReferenceSpaceType["Unbounded"] = "unbounded";
|
|
20
|
+
ReferenceSpaceType["Viewer"] = "viewer";
|
|
21
|
+
})(ReferenceSpaceType || (ReferenceSpaceType = {}));
|
|
22
|
+
/** Default optional features appended to requests/offers. */
|
|
23
|
+
const defaultOffers = ['local-floor', 'bounded-floor', 'layers'];
|
|
24
|
+
/** Normalize a {@link FeatureFlag} to `{ required?: boolean } | undefined`. */
|
|
25
|
+
function normalizeFlag(flag) {
|
|
26
|
+
if (flag === undefined || flag === false) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (flag === true) {
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
return { required: !!flag.required };
|
|
33
|
+
}
|
|
34
|
+
function isDepthFlagObject(flag) {
|
|
35
|
+
return typeof flag === 'object';
|
|
36
|
+
}
|
|
37
|
+
/** Build `XRSessionInit` from structured feature flags. */
|
|
38
|
+
function buildSessionInit(opts) {
|
|
39
|
+
var _a;
|
|
40
|
+
const requiredFeatures = [];
|
|
41
|
+
// Always offer helpful optional features by default
|
|
42
|
+
const optionalFeatures = Array.from(new Set(defaultOffers));
|
|
43
|
+
const f = (_a = opts.features) !== null && _a !== void 0 ? _a : {};
|
|
44
|
+
const map = {
|
|
45
|
+
handTracking: 'hand-tracking',
|
|
46
|
+
anchors: 'anchors',
|
|
47
|
+
hitTest: 'hit-test',
|
|
48
|
+
planeDetection: 'plane-detection',
|
|
49
|
+
meshDetection: 'mesh-detection',
|
|
50
|
+
lightEstimation: 'light-estimation',
|
|
51
|
+
depthSensing: 'depth-sensing',
|
|
52
|
+
layers: 'layers',
|
|
53
|
+
};
|
|
54
|
+
const push = (key, normalized) => {
|
|
55
|
+
if (!normalized) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const token = map[key];
|
|
59
|
+
if (normalized.required) {
|
|
60
|
+
requiredFeatures.push(token);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
optionalFeatures.push(token);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
// Simple flags
|
|
67
|
+
push('handTracking', normalizeFlag(f.handTracking));
|
|
68
|
+
push('anchors', normalizeFlag(f.anchors));
|
|
69
|
+
push('hitTest', normalizeFlag(f.hitTest));
|
|
70
|
+
push('planeDetection', normalizeFlag(f.planeDetection));
|
|
71
|
+
push('meshDetection', normalizeFlag(f.meshDetection));
|
|
72
|
+
push('lightEstimation', normalizeFlag(f.lightEstimation));
|
|
73
|
+
push('layers', normalizeFlag(f.layers));
|
|
74
|
+
// Depth sensing (may include preferences)
|
|
75
|
+
if (f.depthSensing) {
|
|
76
|
+
const normalized = normalizeFlag(isDepthFlagObject(f.depthSensing)
|
|
77
|
+
? { required: f.depthSensing.required }
|
|
78
|
+
: f.depthSensing);
|
|
79
|
+
push('depthSensing', normalized);
|
|
80
|
+
}
|
|
81
|
+
const sessionInit = {
|
|
82
|
+
requiredFeatures: Array.from(new Set(requiredFeatures)),
|
|
83
|
+
optionalFeatures: Array.from(new Set(optionalFeatures)),
|
|
84
|
+
};
|
|
85
|
+
if (isDepthFlagObject(f.depthSensing)) {
|
|
86
|
+
const usage = f.depthSensing.usage
|
|
87
|
+
? [f.depthSensing.usage]
|
|
88
|
+
: undefined;
|
|
89
|
+
const format = f.depthSensing.format
|
|
90
|
+
? [f.depthSensing.format]
|
|
91
|
+
: undefined;
|
|
92
|
+
// Use DOM XRDepthStateInit typing where available
|
|
93
|
+
sessionInit.depthSensing = {
|
|
94
|
+
...(usage ? { usagePreference: usage } : {}),
|
|
95
|
+
...(format ? { dataFormatPreference: format } : {}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return sessionInit;
|
|
99
|
+
}
|
|
100
|
+
function normalizeReferenceSpec(spec) {
|
|
101
|
+
var _a, _b, _c;
|
|
102
|
+
if (!spec || typeof spec === 'string') {
|
|
103
|
+
return {
|
|
104
|
+
type: (_a = spec) !== null && _a !== void 0 ? _a : ReferenceSpaceType.LocalFloor,
|
|
105
|
+
required: false,
|
|
106
|
+
fallbackOrder: [ReferenceSpaceType.Local, ReferenceSpaceType.Viewer],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
type: (_b = spec.type) !== null && _b !== void 0 ? _b : ReferenceSpaceType.LocalFloor,
|
|
111
|
+
required: !!spec.required,
|
|
112
|
+
fallbackOrder: (_c = spec.fallbackOrder) !== null && _c !== void 0 ? _c : [
|
|
113
|
+
ReferenceSpaceType.Local,
|
|
114
|
+
ReferenceSpaceType.Viewer,
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function mergeXROptions(base, overrides) {
|
|
119
|
+
var _a, _b, _c, _d, _e;
|
|
120
|
+
const b = base !== null && base !== void 0 ? base : {};
|
|
121
|
+
const o = overrides !== null && overrides !== void 0 ? overrides : {};
|
|
122
|
+
const mergedFeatures = { ...((_a = b.features) !== null && _a !== void 0 ? _a : {}), ...((_b = o.features) !== null && _b !== void 0 ? _b : {}) };
|
|
123
|
+
const merged = {
|
|
124
|
+
sessionMode: (_d = (_c = o.sessionMode) !== null && _c !== void 0 ? _c : b.sessionMode) !== null && _d !== void 0 ? _d : SessionMode.ImmersiveVR,
|
|
125
|
+
referenceSpace: (_e = o.referenceSpace) !== null && _e !== void 0 ? _e : b.referenceSpace,
|
|
126
|
+
features: Object.keys(mergedFeatures).length ? mergedFeatures : undefined,
|
|
127
|
+
};
|
|
128
|
+
return merged;
|
|
129
|
+
}
|
|
130
|
+
async function resolveReferenceSpaceType(session, preferred, fallbacks) {
|
|
131
|
+
const candidates = [];
|
|
132
|
+
for (const t of [preferred, ...fallbacks]) {
|
|
133
|
+
if (!candidates.includes(t)) {
|
|
134
|
+
candidates.push(t);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (const type of candidates) {
|
|
138
|
+
try {
|
|
139
|
+
// Probe support; three.js will request again using the resolved type.
|
|
140
|
+
await session.requestReferenceSpace(type);
|
|
141
|
+
return type;
|
|
142
|
+
}
|
|
143
|
+
catch (_err) {
|
|
144
|
+
// continue
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// If nothing worked, throw; caller will end the session.
|
|
148
|
+
throw new Error('No supported reference space available');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Explicitly request a WebXR session with the given options.
|
|
152
|
+
*
|
|
153
|
+
* @param world Target world.
|
|
154
|
+
* @param options Partial overrides merged with {@link World.xrDefaults}.
|
|
155
|
+
* @category Runtime
|
|
156
|
+
*/
|
|
157
|
+
function launchXR(world, options) {
|
|
158
|
+
var _a, _b;
|
|
159
|
+
const merged = mergeXROptions(world.xrDefaults, options);
|
|
160
|
+
const { sessionMode = SessionMode.ImmersiveVR } = merged;
|
|
161
|
+
const refSpec = normalizeReferenceSpec(merged.referenceSpace);
|
|
162
|
+
const sessionOptions = buildSessionInit(merged);
|
|
163
|
+
const onSessionStart = async (session) => {
|
|
164
|
+
session.addEventListener('end', onSessionEnd);
|
|
165
|
+
try {
|
|
166
|
+
const resolvedType = await resolveReferenceSpaceType(session, refSpec.type, refSpec.required ? [] : refSpec.fallbackOrder);
|
|
167
|
+
world.renderer.xr.setReferenceSpaceType(resolvedType);
|
|
168
|
+
await world.renderer.xr.setSession(session);
|
|
169
|
+
world.session = session;
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
console.error('[XR] Failed to acquire reference space:', err);
|
|
173
|
+
try {
|
|
174
|
+
await session.end();
|
|
175
|
+
}
|
|
176
|
+
catch (_a) { }
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const onSessionEnd = () => {
|
|
180
|
+
var _a;
|
|
181
|
+
(_a = world.session) === null || _a === void 0 ? void 0 : _a.removeEventListener('end', onSessionEnd);
|
|
182
|
+
world.session = undefined;
|
|
183
|
+
};
|
|
184
|
+
if (!world.session) {
|
|
185
|
+
(_b = (_a = navigator.xr) === null || _a === void 0 ? void 0 : _a.requestSession) === null || _b === void 0 ? void 0 : _b.call(_a, sessionMode, sessionOptions).then(onSessionStart);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.error('XRSession already exists');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export { ReferenceSpaceType, SessionMode, buildSessionInit, launchXR, normalizeReferenceSpec, resolveReferenceSpaceType };
|
|
193
|
+
//# sourceMappingURL=xr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xr.js","sources":["../../src/init/xr.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAIH;IACY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC9B,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAKvB;IACY;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;AAqE9B;AACA,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAU;AAEzE;AACA,SAAS,aAAa,CAAC,IAAkB,EAAA;IACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,EAAE;AACxC,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;IACA,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtC;AAEA,SAAS,iBAAiB,CACxB,IAAkC,EAAA;AAElC,IAAA,OAAO,OAAO,IAAI,KAAK,QAAQ;AACjC;AAEA;AACM,SAAU,gBAAgB,CAAC,IAAe,EAAA;;IAC9C,MAAM,gBAAgB,GAAa,EAAE;;AAErC,IAAA,MAAM,gBAAgB,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAErE,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;AAE7B,IAAA,MAAM,GAAG,GAA2C;AAClD,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,cAAc,EAAE,iBAAiB;AACjC,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,eAAe,EAAE,kBAAkB;AACnC,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,MAAM,EAAE,QAAQ;KACR;AAEV,IAAA,MAAM,IAAI,GAAG,CACX,GAA2B,EAC3B,UAA8C,KAC5C;QACF,IAAI,CAAC,UAAU,EAAE;YACf;QACF;AACA,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,UAAU,CAAC,QAAQ,EAAE;AACvB,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;aAAO;AACL,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;AACF,IAAA,CAAC;;IAGD,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;;AAGvC,IAAA,IAAI,CAAC,CAAC,YAAY,EAAE;QAClB,MAAM,UAAU,GAAG,aAAa,CAC9B,iBAAiB,CAAC,CAAC,CAAC,YAAY;cAC5B,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ;AACrC,cAAE,CAAC,CAAC,YAAY,CACnB;AACD,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IAClC;AAEA,IAAA,MAAM,WAAW,GAAkB;QACjC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvD,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACxD;AAED,IAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;AACrC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC;AAC3B,cAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;cACtB,SAAS;AACb,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;AAC5B,cAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;cACvB,SAAS;;QAGX,WAGD,CAAC,YAAY,GAAG;AACf,YAAA,IAAI,KAAK,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC5C,YAAA,IAAI,MAAM,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SAChC;IACvB;AAEA,IAAA,OAAO,WAAW;AACpB;AAEM,SAAU,sBAAsB,CACpC,IAAyB,EAAA;;IAEzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACrC,OAAO;AACL,YAAA,IAAI,EAAE,CAAA,EAAA,GAAC,IAA2B,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,UAAU;AACnE,YAAA,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC;SACrE;IACH;IACA,OAAO;QACL,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,UAAU;AAChD,QAAA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;AACzB,QAAA,aAAa,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI;AACnC,YAAA,kBAAkB,CAAC,KAAK;AACxB,YAAA,kBAAkB,CAAC,MAAM;AAC1B,SAAA;KACF;AACH;AAEA,SAAS,cAAc,CACrB,IAA2B,EAC3B,SAA8B,EAAA;;IAE9B,MAAM,CAAC,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAJ,IAAI,GAAI,EAAE;IACpB,MAAM,CAAC,GAAG,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAT,SAAS,GAAI,EAAE;IACzB,MAAM,cAAc,GAAG,EAAE,IAAI,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC,EAAE,IAAI,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC,EAAE;AACvE,IAAA,MAAM,MAAM,GAAc;AACxB,QAAA,WAAW,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC,WAAW;QACtE,cAAc,EAAE,MAAA,CAAC,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,CAAC,cAAc;AACpD,QAAA,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,cAAc,GAAG,SAAS;KAC1E;AACD,IAAA,OAAO,MAAM;AACf;AAEO,eAAe,yBAAyB,CAC7C,OAAkB,EAClB,SAA6B,EAC7B,SAA+B,EAAA;IAE/B,MAAM,UAAU,GAAyB,EAAE;IAC3C,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,EAAE;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC3B,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACpB;IACF;AAEA,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAI;;AAEF,YAAA,MAAM,OAAO,CAAC,qBAAqB,CACjC,IAAuC,CACxC;AACD,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,IAAI,EAAE;;QAEf;IACF;;AAEA,IAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AAC3D;AAEA;;;;;;AAMG;AACG,SAAU,QAAQ,CAAC,KAAY,EAAE,OAA4B,EAAA;;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;IACxD,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,MAAM;IACxD,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC;AAC7D,IAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAE/C,IAAA,MAAM,cAAc,GAAG,OAAO,OAAkB,KAAI;AAClD,QAAA,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC;AAC7C,QAAA,IAAI;YACF,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAClD,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,aAAa,CAC9C;YACD,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,CACrC,YAA+C,CAChD;YACD,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;AAC3C,YAAA,KAAK,CAAC,OAAO,GAAG,OAAO;QACzB;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC;AAC7D,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,CAAC,GAAG,EAAE;YACrB;YAAE,OAAA,EAAA,EAAM,EAAC;QACX;AACF,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MAAK;;QACxB,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC;AACvD,QAAA,KAAK,CAAC,OAAO,GAAG,SAAS;AAC3B,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAClB,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,EAAE,0CACR,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,WAAW,EAAE,cAAc,CAAA,CAC7C,IAAI,CAAC,cAAc,CAAC;IACzB;SAAO;AACL,QAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC;IAC3C;AACF;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export * from './input-system.js';
|
|
8
|
+
export * from './state-tags.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
declare const InputSystem_base: import("elics").SystemConstructor<{}, {
|
|
8
|
+
interactable: {
|
|
9
|
+
required: import("elics").Component<{}>[];
|
|
10
|
+
};
|
|
11
|
+
}, import("../ecs/world.js").World, import("../ecs/system.js").System<{}, {
|
|
12
|
+
interactable: {
|
|
13
|
+
required: import("elics").Component<{}>[];
|
|
14
|
+
};
|
|
15
|
+
}>>;
|
|
16
|
+
/**
|
|
17
|
+
* Samples XR poses (hands/controllers/head) and gamepads, curates the set of
|
|
18
|
+
* interactables for pointer raycasting, and attaches minimal event listeners.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* - Scheduled after player movement so pointers reflect updated transforms.
|
|
22
|
+
* - Maintains a filtered list of interactable Object3D roots when XR visibility is `Visible`.
|
|
23
|
+
* - Adds transient `Hovered` / `Pressed` tags so other systems can react declaratively.
|
|
24
|
+
*
|
|
25
|
+
* @category Input
|
|
26
|
+
* @example React to Hovered / Pressed
|
|
27
|
+
* ```ts
|
|
28
|
+
* export class HighlightSystem extends createSystem({
|
|
29
|
+
* items: { required: [Interactable] }
|
|
30
|
+
* }) {
|
|
31
|
+
* update() {
|
|
32
|
+
* this.queries.items.entities.forEach(e => {
|
|
33
|
+
* e.object3D.visible = !e.hasComponent(Pressed);
|
|
34
|
+
* })
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare class InputSystem extends InputSystem_base {
|
|
40
|
+
private intersectables;
|
|
41
|
+
private shouldSetIntersectables;
|
|
42
|
+
private dirty;
|
|
43
|
+
private listeners;
|
|
44
|
+
private lastBVHUpdate;
|
|
45
|
+
init(): void;
|
|
46
|
+
update(delta: number, time: number): void;
|
|
47
|
+
private setupEventListeners;
|
|
48
|
+
private computeBoundsTreeForEntity;
|
|
49
|
+
private cleanupEventListeners;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=input-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-system.d.ts","sourceRoot":"","sources":["../../src/input/input-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;AAQH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,WAAY,SAAQ,gBAKhC;IACC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAQb;IACJ,OAAO,CAAC,aAAa,CAAmC;IAExD,IAAI,IAAI,IAAI;IAuBZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAsBzC,OAAO,CAAC,mBAAmB;IAqD3B,OAAO,CAAC,0BAA0B;IAkBlC,OAAO,CAAC,qBAAqB;CAe9B"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { createSystem } from '../ecs/system.js';
|
|
2
|
+
import { VisibilityState } from '../ecs/world.js';
|
|
3
|
+
import 'elics';
|
|
4
|
+
import '../ecs/component-registry.js';
|
|
5
|
+
import { Transform } from '../transform/transform.js';
|
|
6
|
+
import '../runtime/three.js';
|
|
7
|
+
import { Interactable, Hovered, Pressed } from './state-tags.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
11
|
+
*
|
|
12
|
+
* This source code is licensed under the MIT license found in the
|
|
13
|
+
* LICENSE file in the root directory of this source tree.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Samples XR poses (hands/controllers/head) and gamepads, curates the set of
|
|
17
|
+
* interactables for pointer raycasting, and attaches minimal event listeners.
|
|
18
|
+
*
|
|
19
|
+
* @remarks
|
|
20
|
+
* - Scheduled after player movement so pointers reflect updated transforms.
|
|
21
|
+
* - Maintains a filtered list of interactable Object3D roots when XR visibility is `Visible`.
|
|
22
|
+
* - Adds transient `Hovered` / `Pressed` tags so other systems can react declaratively.
|
|
23
|
+
*
|
|
24
|
+
* @category Input
|
|
25
|
+
* @example React to Hovered / Pressed
|
|
26
|
+
* ```ts
|
|
27
|
+
* export class HighlightSystem extends createSystem({
|
|
28
|
+
* items: { required: [Interactable] }
|
|
29
|
+
* }) {
|
|
30
|
+
* update() {
|
|
31
|
+
* this.queries.items.entities.forEach(e => {
|
|
32
|
+
* e.object3D.visible = !e.hasComponent(Pressed);
|
|
33
|
+
* })
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
class InputSystem extends createSystem({
|
|
39
|
+
interactable: { required: [Interactable, Transform] },
|
|
40
|
+
}, {}) {
|
|
41
|
+
constructor() {
|
|
42
|
+
super(...arguments);
|
|
43
|
+
this.intersectables = [];
|
|
44
|
+
this.shouldSetIntersectables = false;
|
|
45
|
+
this.dirty = true;
|
|
46
|
+
this.listeners = new WeakMap();
|
|
47
|
+
this.lastBVHUpdate = new WeakMap();
|
|
48
|
+
}
|
|
49
|
+
init() {
|
|
50
|
+
// React to XR visibility for enabling scoped intersections
|
|
51
|
+
this.cleanupFuncs.push(this.visibilityState.subscribe((value) => {
|
|
52
|
+
const nextVisible = value === VisibilityState.Visible;
|
|
53
|
+
if (this.shouldSetIntersectables !== nextVisible) {
|
|
54
|
+
this.shouldSetIntersectables = nextVisible;
|
|
55
|
+
this.dirty = true;
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
// Handle additions/removals of interactables
|
|
59
|
+
this.queries.interactable.subscribe('qualify', (entity) => {
|
|
60
|
+
this.setupEventListeners(entity);
|
|
61
|
+
this.dirty = true;
|
|
62
|
+
});
|
|
63
|
+
this.queries.interactable.subscribe('disqualify', (entity) => {
|
|
64
|
+
this.cleanupEventListeners(entity);
|
|
65
|
+
this.dirty = true;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
update(delta, time) {
|
|
69
|
+
// Update input sampling first
|
|
70
|
+
this.input.update(this.xrManager, delta, time);
|
|
71
|
+
// Maintain the filtered list of interactables for pointer raycasting
|
|
72
|
+
if (this.dirty) {
|
|
73
|
+
this.dirty = false;
|
|
74
|
+
this.intersectables.length = 0;
|
|
75
|
+
if (this.shouldSetIntersectables) {
|
|
76
|
+
for (const entity of this.queries.interactable.entities) {
|
|
77
|
+
const obj = entity.object3D;
|
|
78
|
+
if (isDescendantOf(obj, this.scene)) {
|
|
79
|
+
this.intersectables.push(obj);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
this.scene.interactableDescendants = this.intersectables;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.scene.interactableDescendants = undefined;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
setupEventListeners(entity) {
|
|
90
|
+
const object3D = entity.object3D;
|
|
91
|
+
if (!object3D) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Compute BVH for all meshes in the entity hierarchy for fast raycasting
|
|
95
|
+
this.computeBoundsTreeForEntity(object3D);
|
|
96
|
+
// Enable pointer events for raycasting
|
|
97
|
+
object3D.pointerEvents = 'auto';
|
|
98
|
+
// Throttled subtree BVH refresh helper
|
|
99
|
+
const maybeRefreshBVH = () => {
|
|
100
|
+
var _a;
|
|
101
|
+
const now = typeof performance !== 'undefined' && performance.now
|
|
102
|
+
? performance.now()
|
|
103
|
+
: Date.now();
|
|
104
|
+
const last = (_a = this.lastBVHUpdate.get(object3D)) !== null && _a !== void 0 ? _a : 0;
|
|
105
|
+
if (now - last > 250) {
|
|
106
|
+
this.computeBoundsTreeForEntity(object3D);
|
|
107
|
+
this.lastBVHUpdate.set(object3D, now);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const enter = () => {
|
|
111
|
+
maybeRefreshBVH();
|
|
112
|
+
if (!entity.hasComponent(Hovered)) {
|
|
113
|
+
entity.addComponent(Hovered);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const leave = () => {
|
|
117
|
+
entity.removeComponent(Hovered);
|
|
118
|
+
};
|
|
119
|
+
const down = () => {
|
|
120
|
+
maybeRefreshBVH();
|
|
121
|
+
if (!entity.hasComponent(Pressed)) {
|
|
122
|
+
entity.addComponent(Pressed);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const up = () => {
|
|
126
|
+
entity.removeComponent(Pressed);
|
|
127
|
+
};
|
|
128
|
+
this.listeners.set(object3D, { enter, leave, down, up });
|
|
129
|
+
object3D.addEventListener('pointerenter', enter);
|
|
130
|
+
object3D.addEventListener('pointerleave', leave);
|
|
131
|
+
object3D.addEventListener('pointerdown', down);
|
|
132
|
+
object3D.addEventListener('pointerup', up);
|
|
133
|
+
}
|
|
134
|
+
computeBoundsTreeForEntity(object3D) {
|
|
135
|
+
object3D.traverse((child) => {
|
|
136
|
+
if (child.isMesh) {
|
|
137
|
+
const mesh = child;
|
|
138
|
+
if (mesh.geometry && !mesh.geometry.boundsTree) {
|
|
139
|
+
try {
|
|
140
|
+
mesh.geometry.computeBoundsTree();
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.warn(`[InputSystem] Failed to compute BVH for ${mesh.name || 'unnamed'}:`, error);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
cleanupEventListeners(entity) {
|
|
150
|
+
const object3D = entity.object3D;
|
|
151
|
+
if (!object3D) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const fns = this.listeners.get(object3D);
|
|
155
|
+
if (fns) {
|
|
156
|
+
object3D.removeEventListener('pointerenter', fns.enter);
|
|
157
|
+
object3D.removeEventListener('pointerleave', fns.leave);
|
|
158
|
+
object3D.removeEventListener('pointerdown', fns.down);
|
|
159
|
+
object3D.removeEventListener('pointerup', fns.up);
|
|
160
|
+
this.listeners.delete(object3D);
|
|
161
|
+
}
|
|
162
|
+
entity.removeComponent(Hovered).removeComponent(Pressed);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function isDescendantOf(object, parent) {
|
|
166
|
+
while (object) {
|
|
167
|
+
if (object === parent) {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
object = object.parent;
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export { InputSystem };
|
|
176
|
+
//# sourceMappingURL=input-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-system.js","sources":["../../src/input/input-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Marks an entity as eligible for XR/UI pointer interaction.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* - The {@link InputSystem} discovers all entities with `Interactable` and, when
|
|
12
|
+
* XR visibility is Visible, registers their Object3D roots as raycast targets
|
|
13
|
+
* (computing BVHs for meshes to accelerate intersection tests).
|
|
14
|
+
* - When a pointer enters/leaves or presses/releases on the entity, the system
|
|
15
|
+
* adds/removes the transient tags {@link Hovered} and {@link Pressed} so other
|
|
16
|
+
* systems can react declaratively without manual event wiring.
|
|
17
|
+
* - Add this tag to the root Object3D of your UI/interactive object. Children
|
|
18
|
+
* are implicitly covered because the InputSystem registers the whole subtree.
|
|
19
|
+
*
|
|
20
|
+
* @category Input
|
|
21
|
+
* @example Highlight on hover
|
|
22
|
+
* ```ts
|
|
23
|
+
* export class HighlightSystem extends createSystem({ items: { required: [Interactable] } }) {
|
|
24
|
+
* update() {
|
|
25
|
+
* this.queries.items.entities.forEach(e => {
|
|
26
|
+
* e.object3D.visible = !e.hasComponent(Pressed);
|
|
27
|
+
* e.object3D.material.emissiveIntensity = e.hasComponent(Hovered) ? 1.0 : 0.0;
|
|
28
|
+
* });
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare const Interactable: import("elics").Component<{}>;
|
|
34
|
+
/**
|
|
35
|
+
* A transient tag set while a pointer ray is intersecting an `Interactable`.
|
|
36
|
+
*
|
|
37
|
+
* @remarks
|
|
38
|
+
* - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
|
|
39
|
+
* - Use as a declarative condition for hover effects, tooltips, or affordances.
|
|
40
|
+
*
|
|
41
|
+
* @category Input
|
|
42
|
+
* @hideineditor
|
|
43
|
+
*/
|
|
44
|
+
export declare const Hovered: import("elics").Component<{}>;
|
|
45
|
+
/**
|
|
46
|
+
* A transient tag set while a pointer is actively pressing an `Interactable`.
|
|
47
|
+
*
|
|
48
|
+
* @remarks
|
|
49
|
+
* - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
|
|
50
|
+
* - Often used to gate activation logic or pressed-state visuals.
|
|
51
|
+
*
|
|
52
|
+
* @category Input
|
|
53
|
+
* @hideineditor
|
|
54
|
+
*/
|
|
55
|
+
export declare const Pressed: import("elics").Component<{}>;
|
|
56
|
+
//# sourceMappingURL=state-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-tags.d.ts","sourceRoot":"","sources":["../../src/input/state-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,YAAY,+BAIxB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import '@preact/signals-core';
|
|
2
|
+
import '../ecs/world.js';
|
|
3
|
+
import { createComponent } from 'elics';
|
|
4
|
+
import '../ecs/component-registry.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the MIT license found in the
|
|
10
|
+
* LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Marks an entity as eligible for XR/UI pointer interaction.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* - The {@link InputSystem} discovers all entities with `Interactable` and, when
|
|
17
|
+
* XR visibility is Visible, registers their Object3D roots as raycast targets
|
|
18
|
+
* (computing BVHs for meshes to accelerate intersection tests).
|
|
19
|
+
* - When a pointer enters/leaves or presses/releases on the entity, the system
|
|
20
|
+
* adds/removes the transient tags {@link Hovered} and {@link Pressed} so other
|
|
21
|
+
* systems can react declaratively without manual event wiring.
|
|
22
|
+
* - Add this tag to the root Object3D of your UI/interactive object. Children
|
|
23
|
+
* are implicitly covered because the InputSystem registers the whole subtree.
|
|
24
|
+
*
|
|
25
|
+
* @category Input
|
|
26
|
+
* @example Highlight on hover
|
|
27
|
+
* ```ts
|
|
28
|
+
* export class HighlightSystem extends createSystem({ items: { required: [Interactable] } }) {
|
|
29
|
+
* update() {
|
|
30
|
+
* this.queries.items.entities.forEach(e => {
|
|
31
|
+
* e.object3D.visible = !e.hasComponent(Pressed);
|
|
32
|
+
* e.object3D.material.emissiveIntensity = e.hasComponent(Hovered) ? 1.0 : 0.0;
|
|
33
|
+
* });
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
const Interactable = createComponent('Interactable', {}, 'Marks an entity as eligible for XR pointer interaction (ray/proximity).');
|
|
39
|
+
/**
|
|
40
|
+
* A transient tag set while a pointer ray is intersecting an `Interactable`.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
|
|
44
|
+
* - Use as a declarative condition for hover effects, tooltips, or affordances.
|
|
45
|
+
*
|
|
46
|
+
* @category Input
|
|
47
|
+
* @hideineditor
|
|
48
|
+
*/
|
|
49
|
+
const Hovered = createComponent('Hovered', {}, 'A tag added by InputSystem while a pointer is hovering over the entity.');
|
|
50
|
+
/**
|
|
51
|
+
* A transient tag set while a pointer is actively pressing an `Interactable`.
|
|
52
|
+
*
|
|
53
|
+
* @remarks
|
|
54
|
+
* - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
|
|
55
|
+
* - Often used to gate activation logic or pressed-state visuals.
|
|
56
|
+
*
|
|
57
|
+
* @category Input
|
|
58
|
+
* @hideineditor
|
|
59
|
+
*/
|
|
60
|
+
const Pressed = createComponent('Pressed', {}, 'A tag added by InputSystem while the entity is actively pressed.');
|
|
61
|
+
|
|
62
|
+
export { Hovered, Interactable, Pressed };
|
|
63
|
+
//# sourceMappingURL=state-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-tags.js","sources":["../../src/input/state-tags.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;AASG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;AASG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,kEAAkE;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export * from './level-system.js';
|
|
8
|
+
export * from './level-tag.js';
|
|
9
|
+
export * from './level-glxf-importer.js';
|
|
10
|
+
export * from './level-entity-creator.js';
|
|
11
|
+
export * from './level-root.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/level/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { Entity } from '../ecs/index.js';
|
|
8
|
+
import type { World } from '../ecs/index.js';
|
|
9
|
+
import { Object3D } from '../runtime/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Creates ECS entities from Three.js Object3D graphs and applies IWSDK components
|
|
12
|
+
* found in GLXF `meta_spatial.components` extras.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* - Only nodes present in the GLXF `nodes` array are converted to entities.
|
|
16
|
+
* - Component ids are matched against the registry by `com.iwsdk.components.<id>`.
|
|
17
|
+
* - Panel UI extras are mapped to {@link PanelUI} with JSON config paths.
|
|
18
|
+
*
|
|
19
|
+
* @category Scene
|
|
20
|
+
*/
|
|
21
|
+
export declare class EntityCreator {
|
|
22
|
+
static createEntitiesFromObject3D(object: Object3D, nodes: Object3D[], parentEntity: Entity, world: World): void;
|
|
23
|
+
private static applyComponents;
|
|
24
|
+
private static mapGLXFDataToProps;
|
|
25
|
+
private static handleMetaSpatialPanelComponents;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=level-entity-creator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-entity-creator.d.ts","sourceRoot":"","sources":["../../src/level/level-entity-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAS,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM/C;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,MAAM,CAAC,0BAA0B,CAC/B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,QAAQ,EAAE,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,KAAK,GACX,IAAI;IAsCP,OAAO,CAAC,MAAM,CAAC,eAAe;IAoC9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,OAAO,CAAC,MAAM,CAAC,gCAAgC;CAuBhD"}
|