@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
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import '../../runtime/three.js';
|
|
2
|
+
import { Vector3, Color, UniformsLib, UniformsUtils, ShaderLib, ShaderMaterial } 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
|
+
// @ts-ignore
|
|
11
|
+
UniformsLib.linee = {
|
|
12
|
+
linewidth: { value: 1 },
|
|
13
|
+
color: { value: new Color(0xffffff) },
|
|
14
|
+
startPoint: { value: new Vector3() },
|
|
15
|
+
endPoint: { value: new Vector3() },
|
|
16
|
+
};
|
|
17
|
+
ShaderLib['linee'] = {
|
|
18
|
+
uniforms: UniformsUtils.merge([
|
|
19
|
+
UniformsLib.common,
|
|
20
|
+
UniformsLib.fog,
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
UniformsLib.linee,
|
|
23
|
+
]),
|
|
24
|
+
vertexShader: /* glsl */ `
|
|
25
|
+
#include <common>
|
|
26
|
+
#include <color_pars_vertex>
|
|
27
|
+
#include <fog_pars_vertex>
|
|
28
|
+
#include <logdepthbuf_pars_vertex>
|
|
29
|
+
#include <clipping_planes_pars_vertex>
|
|
30
|
+
|
|
31
|
+
uniform float linewidth;
|
|
32
|
+
uniform vec3 startPoint;
|
|
33
|
+
uniform vec3 endPoint;
|
|
34
|
+
varying float vDistanceAlpha;
|
|
35
|
+
|
|
36
|
+
attribute vec3 instanceStart;
|
|
37
|
+
attribute vec3 instanceEnd;
|
|
38
|
+
|
|
39
|
+
attribute vec3 instanceColorStart;
|
|
40
|
+
attribute vec3 instanceColorEnd;
|
|
41
|
+
|
|
42
|
+
varying vec4 worldPos;
|
|
43
|
+
varying vec3 worldStart;
|
|
44
|
+
varying vec3 worldEnd;
|
|
45
|
+
|
|
46
|
+
void trimSegment( const in vec4 start, inout vec4 end ) {
|
|
47
|
+
|
|
48
|
+
// trim end segment so it terminates between the camera plane and the near plane
|
|
49
|
+
|
|
50
|
+
// conservative estimate of the near plane
|
|
51
|
+
float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column
|
|
52
|
+
float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column
|
|
53
|
+
float nearEstimate = - 0.5 * b / a;
|
|
54
|
+
|
|
55
|
+
float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );
|
|
56
|
+
|
|
57
|
+
end.xyz = mix( start.xyz, end.xyz, alpha );
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void main() {
|
|
62
|
+
|
|
63
|
+
#ifdef USE_COLOR
|
|
64
|
+
|
|
65
|
+
vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;
|
|
66
|
+
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
// camera space
|
|
70
|
+
vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
|
|
71
|
+
vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
worldStart = start.xyz;
|
|
75
|
+
worldEnd = end.xyz;
|
|
76
|
+
|
|
77
|
+
vec3 currentPosition = (position.y < 0.5) ? instanceStart : instanceEnd;
|
|
78
|
+
float distanceToStart = length(currentPosition - startPoint);
|
|
79
|
+
float startAlpha = smoothstep(0.0, 0.8, distanceToStart);
|
|
80
|
+
float distanceToEnd = length(currentPosition - endPoint);
|
|
81
|
+
float endAlpha = smoothstep(0.5, 2.0, distanceToEnd);
|
|
82
|
+
// Compute vDistanceAlpha using smoothstep
|
|
83
|
+
vDistanceAlpha = min(startAlpha, endAlpha);
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
// special case for perspective projection, and segments that terminate either in, or behind, the camera plane
|
|
87
|
+
// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
|
|
88
|
+
// but we need to perform ndc-space calculations in the shader, so we must address this issue directly
|
|
89
|
+
// perhaps there is a more elegant solution -- WestLangley
|
|
90
|
+
|
|
91
|
+
bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column
|
|
92
|
+
|
|
93
|
+
if ( perspective ) {
|
|
94
|
+
|
|
95
|
+
if ( start.z < 0.0 && end.z >= 0.0 ) {
|
|
96
|
+
|
|
97
|
+
trimSegment( start, end );
|
|
98
|
+
|
|
99
|
+
} else if ( end.z < 0.0 && start.z >= 0.0 ) {
|
|
100
|
+
|
|
101
|
+
trimSegment( end, start );
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// clip space
|
|
108
|
+
vec4 clipStart = projectionMatrix * start;
|
|
109
|
+
vec4 clipEnd = projectionMatrix * end;
|
|
110
|
+
|
|
111
|
+
// ndc space
|
|
112
|
+
vec3 ndcStart = clipStart.xyz / clipStart.w;
|
|
113
|
+
vec3 ndcEnd = clipEnd.xyz / clipEnd.w;
|
|
114
|
+
|
|
115
|
+
// direction
|
|
116
|
+
vec2 dir = ndcEnd.xy - ndcStart.xy;
|
|
117
|
+
dir = normalize( dir );
|
|
118
|
+
|
|
119
|
+
vec3 worldDir = normalize( end.xyz - start.xyz );
|
|
120
|
+
vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );
|
|
121
|
+
vec3 worldUp = normalize( cross( worldDir, tmpFwd ) );
|
|
122
|
+
vec3 worldFwd = cross( worldDir, worldUp );
|
|
123
|
+
worldPos = position.y < 0.5 ? start: end;
|
|
124
|
+
|
|
125
|
+
// height offset
|
|
126
|
+
float hw = linewidth * 0.5;
|
|
127
|
+
worldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;
|
|
128
|
+
|
|
129
|
+
// don't extend the line if we're rendering dashes because we
|
|
130
|
+
// won't be rendering the endcaps
|
|
131
|
+
|
|
132
|
+
// cap extension
|
|
133
|
+
worldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;
|
|
134
|
+
|
|
135
|
+
// add width to the box
|
|
136
|
+
worldPos.xyz += worldFwd * hw;
|
|
137
|
+
|
|
138
|
+
// endcaps
|
|
139
|
+
if ( position.y > 1.0 || position.y < 0.0 ) {
|
|
140
|
+
|
|
141
|
+
worldPos.xyz -= worldFwd * 2.0 * hw;
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
// project the worldpos
|
|
147
|
+
vec4 clip = projectionMatrix * worldPos;
|
|
148
|
+
|
|
149
|
+
// shift the depth of the projected points so the line
|
|
150
|
+
// segments overlap neatly
|
|
151
|
+
vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;
|
|
152
|
+
clip.z = clipPose.z * clip.w;
|
|
153
|
+
|
|
154
|
+
gl_Position = clip;
|
|
155
|
+
|
|
156
|
+
vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation
|
|
157
|
+
|
|
158
|
+
#include <logdepthbuf_vertex>
|
|
159
|
+
#include <clipping_planes_vertex>
|
|
160
|
+
#include <fog_vertex>
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
`,
|
|
164
|
+
fragmentShader: /* glsl */ `
|
|
165
|
+
uniform float linewidth;
|
|
166
|
+
|
|
167
|
+
varying vec4 worldPos;
|
|
168
|
+
varying vec3 worldStart;
|
|
169
|
+
varying vec3 worldEnd;
|
|
170
|
+
varying float vDistanceAlpha;
|
|
171
|
+
|
|
172
|
+
#include <common>
|
|
173
|
+
#include <color_pars_fragment>
|
|
174
|
+
#include <fog_pars_fragment>
|
|
175
|
+
#include <logdepthbuf_pars_fragment>
|
|
176
|
+
#include <clipping_planes_pars_fragment>
|
|
177
|
+
|
|
178
|
+
vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {
|
|
179
|
+
|
|
180
|
+
float mua;
|
|
181
|
+
float mub;
|
|
182
|
+
|
|
183
|
+
vec3 p13 = p1 - p3;
|
|
184
|
+
vec3 p43 = p4 - p3;
|
|
185
|
+
|
|
186
|
+
vec3 p21 = p2 - p1;
|
|
187
|
+
|
|
188
|
+
float d1343 = dot( p13, p43 );
|
|
189
|
+
float d4321 = dot( p43, p21 );
|
|
190
|
+
float d1321 = dot( p13, p21 );
|
|
191
|
+
float d4343 = dot( p43, p43 );
|
|
192
|
+
float d2121 = dot( p21, p21 );
|
|
193
|
+
|
|
194
|
+
float denom = d2121 * d4343 - d4321 * d4321;
|
|
195
|
+
|
|
196
|
+
float numer = d1343 * d4321 - d1321 * d4343;
|
|
197
|
+
|
|
198
|
+
mua = numer / denom;
|
|
199
|
+
mua = clamp( mua, 0.0, 1.0 );
|
|
200
|
+
mub = ( d1343 + d4321 * ( mua ) ) / d4343;
|
|
201
|
+
mub = clamp( mub, 0.0, 1.0 );
|
|
202
|
+
|
|
203
|
+
return vec2( mua, mub );
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
void main() {
|
|
208
|
+
|
|
209
|
+
#include <clipping_planes_fragment>
|
|
210
|
+
|
|
211
|
+
// Find the closest points on the view ray and the line segment
|
|
212
|
+
vec3 rayEnd = normalize( worldPos.xyz ) * 1e5;
|
|
213
|
+
vec3 lineDir = worldEnd - worldStart;
|
|
214
|
+
vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );
|
|
215
|
+
|
|
216
|
+
vec3 p1 = worldStart + lineDir * params.x;
|
|
217
|
+
vec3 p2 = rayEnd * params.y;
|
|
218
|
+
vec3 delta = p1 - p2;
|
|
219
|
+
float len = length( delta );
|
|
220
|
+
float norm = len / linewidth;
|
|
221
|
+
|
|
222
|
+
if ( norm > 0.5 ) {
|
|
223
|
+
discard;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
#include <logdepthbuf_fragment>
|
|
227
|
+
|
|
228
|
+
gl_FragColor = vec4( 1.0, 1.0, 1.0, vDistanceAlpha );
|
|
229
|
+
|
|
230
|
+
#include <tonemapping_fragment>
|
|
231
|
+
#include <colorspace_fragment>
|
|
232
|
+
#include <fog_fragment>
|
|
233
|
+
#include <premultiplied_alpha_fragment>
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
`,
|
|
237
|
+
};
|
|
238
|
+
class LineMaterial extends ShaderMaterial {
|
|
239
|
+
constructor(parameters) {
|
|
240
|
+
super({
|
|
241
|
+
// @ts-ignore
|
|
242
|
+
type: 'LineMaterial',
|
|
243
|
+
uniforms: UniformsUtils.clone(ShaderLib['linee'].uniforms),
|
|
244
|
+
vertexShader: ShaderLib['linee'].vertexShader,
|
|
245
|
+
fragmentShader: ShaderLib['linee'].fragmentShader,
|
|
246
|
+
clipping: true, // required for clipping support
|
|
247
|
+
});
|
|
248
|
+
this.isLineMaterial = true;
|
|
249
|
+
// Compatibility flags with three/examples LineMaterial API
|
|
250
|
+
// worldUnits is effectively always true in this shader, but we accept the flag to avoid warnings
|
|
251
|
+
this._worldUnits = true;
|
|
252
|
+
this.setValues(parameters);
|
|
253
|
+
}
|
|
254
|
+
get color() {
|
|
255
|
+
return this.uniforms.diffuse.value;
|
|
256
|
+
}
|
|
257
|
+
set color(value) {
|
|
258
|
+
this.uniforms.diffuse.value = value;
|
|
259
|
+
}
|
|
260
|
+
// @ts-ignore
|
|
261
|
+
get linewidth() {
|
|
262
|
+
return this.uniforms.linewidth.value;
|
|
263
|
+
}
|
|
264
|
+
// @ts-ignore
|
|
265
|
+
set linewidth(value) {
|
|
266
|
+
if (!this.uniforms.linewidth) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.uniforms.linewidth.value = value;
|
|
270
|
+
}
|
|
271
|
+
get dashed() {
|
|
272
|
+
return 'USE_DASH' in this.defines;
|
|
273
|
+
}
|
|
274
|
+
set dashed(value) {
|
|
275
|
+
if ((value === true) !== this.dashed) {
|
|
276
|
+
this.needsUpdate = true;
|
|
277
|
+
}
|
|
278
|
+
if (value === true) {
|
|
279
|
+
this.defines.USE_DASH = '';
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
delete this.defines.USE_DASH;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// @ts-ignore
|
|
286
|
+
get opacity() {
|
|
287
|
+
return this.uniforms.opacity.value;
|
|
288
|
+
}
|
|
289
|
+
set opacity(value) {
|
|
290
|
+
if (!this.uniforms) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
this.uniforms.opacity.value = value;
|
|
294
|
+
}
|
|
295
|
+
// --- Compatibility API ---
|
|
296
|
+
// Accept and expose `worldUnits` so Material.setValues doesn't warn.
|
|
297
|
+
// Our implementation measures linewidth in world space, so this is a no-op.
|
|
298
|
+
get worldUnits() {
|
|
299
|
+
return this._worldUnits;
|
|
300
|
+
}
|
|
301
|
+
set worldUnits(v) {
|
|
302
|
+
this._worldUnits = !!v;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
export { LineMaterial };
|
|
307
|
+
//# sourceMappingURL=line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line.js","sources":["../../../src/locomotion/materials/line.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { InputComponent } from '@iwsdk/xr-input';
|
|
8
|
+
import { Types } from '../ecs/index.js';
|
|
9
|
+
declare const SlideSystem_base: import("elics").SystemConstructor<{
|
|
10
|
+
/** Locomotor engine shared across locomotion systems. */
|
|
11
|
+
locomotor: {
|
|
12
|
+
type: Types.Object;
|
|
13
|
+
default: undefined;
|
|
14
|
+
};
|
|
15
|
+
/** Maximum linear speed in meters/second. */
|
|
16
|
+
maxSpeed: {
|
|
17
|
+
type: Types.Float32;
|
|
18
|
+
default: number;
|
|
19
|
+
};
|
|
20
|
+
/** Comfort vignette strength [0..1]; 0 disables vignetting. */
|
|
21
|
+
comfortAssist: {
|
|
22
|
+
type: Types.Float32;
|
|
23
|
+
default: number;
|
|
24
|
+
};
|
|
25
|
+
/** Button used to trigger jump. */
|
|
26
|
+
jumpButton: {
|
|
27
|
+
type: Types.String;
|
|
28
|
+
default: InputComponent;
|
|
29
|
+
};
|
|
30
|
+
}, {}, import("../ecs/world.js").World, import("../ecs/system.js").System<{
|
|
31
|
+
/** Locomotor engine shared across locomotion systems. */
|
|
32
|
+
locomotor: {
|
|
33
|
+
type: Types.Object;
|
|
34
|
+
default: undefined;
|
|
35
|
+
};
|
|
36
|
+
/** Maximum linear speed in meters/second. */
|
|
37
|
+
maxSpeed: {
|
|
38
|
+
type: Types.Float32;
|
|
39
|
+
default: number;
|
|
40
|
+
};
|
|
41
|
+
/** Comfort vignette strength [0..1]; 0 disables vignetting. */
|
|
42
|
+
comfortAssist: {
|
|
43
|
+
type: Types.Float32;
|
|
44
|
+
default: number;
|
|
45
|
+
};
|
|
46
|
+
/** Button used to trigger jump. */
|
|
47
|
+
jumpButton: {
|
|
48
|
+
type: Types.String;
|
|
49
|
+
default: InputComponent;
|
|
50
|
+
};
|
|
51
|
+
}, {}>>;
|
|
52
|
+
/**
|
|
53
|
+
* Analog stick sliding locomotion with optional comfort vignette and jump.
|
|
54
|
+
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* - Reads left controller thumbstick for planar movement relative to head yaw.
|
|
57
|
+
* - Applies a dynamic peripheral vignette based on input magnitude scaled by
|
|
58
|
+
* `comfortAssist` to reduce motion sickness.
|
|
59
|
+
* - Triggers jump when `jumpButton` is pressed.
|
|
60
|
+
*
|
|
61
|
+
* @category Locomotion
|
|
62
|
+
*/
|
|
63
|
+
export declare class SlideSystem extends SlideSystem_base {
|
|
64
|
+
private movementVector;
|
|
65
|
+
private movementDirection;
|
|
66
|
+
private input2D;
|
|
67
|
+
private isMoving;
|
|
68
|
+
private vignette;
|
|
69
|
+
private vignetteAlphaTarget;
|
|
70
|
+
private locomotor;
|
|
71
|
+
init(): void;
|
|
72
|
+
destroy(): void;
|
|
73
|
+
update(delta: number): void;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=slide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide.d.ts","sourceRoot":"","sources":["../../src/locomotion/slide.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAgB,MAAM,iBAAiB,CAAC;;IAuElD,yDAAyD;;;;;IAEzD,6CAA6C;;;;;IAE7C,+DAA+D;;;;;IAE/D,mCAAmC;;;;;;IANnC,yDAAyD;;;;;IAEzD,6CAA6C;;;;;IAE7C,+DAA+D;;;;;IAE/D,mCAAmC;;;;;;AApBvC;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,SAAQ,gBAYhC;IACC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,SAAS,CAAa;IAE9B,IAAI;IAKJ,OAAO,IAAI,IAAI;IAIf,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CA+C5B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { InputComponent } from '@iwsdk/xr-input';
|
|
2
|
+
import { lerp } from '../node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js';
|
|
3
|
+
import { createSystem } from '../ecs/system.js';
|
|
4
|
+
import '../ecs/world.js';
|
|
5
|
+
import { Types } from 'elics';
|
|
6
|
+
import '../ecs/component-registry.js';
|
|
7
|
+
import '../runtime/three.js';
|
|
8
|
+
import { Vector3, Quaternion, Vector2, Mesh, CylinderGeometry, ShaderMaterial, BackSide, Color } from 'three';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
12
|
+
*
|
|
13
|
+
* This source code is licensed under the MIT license found in the
|
|
14
|
+
* LICENSE file in the root directory of this source tree.
|
|
15
|
+
*/
|
|
16
|
+
const vertexShader = `
|
|
17
|
+
varying vec2 vUv;
|
|
18
|
+
|
|
19
|
+
void main() {
|
|
20
|
+
vUv = uv;
|
|
21
|
+
vec4 modelPosition = modelMatrix * vec4(position, 1.0);
|
|
22
|
+
vec4 viewPosition = viewMatrix * modelPosition;
|
|
23
|
+
vec4 projectedPosition = projectionMatrix * viewPosition;
|
|
24
|
+
|
|
25
|
+
gl_Position = projectedPosition;
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
const fragmentShader = `
|
|
29
|
+
uniform vec3 uColor;
|
|
30
|
+
uniform float uAlpha;
|
|
31
|
+
varying vec2 vUv;
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
gl_FragColor = vec4(uColor, uAlpha * vUv.y);
|
|
35
|
+
}
|
|
36
|
+
`;
|
|
37
|
+
const createVignette = (radius, colorRep = 0x000000) => {
|
|
38
|
+
const vignette = new Mesh(new CylinderGeometry(radius, radius * 0.5, 0.3, 16, 1, true), new ShaderMaterial({
|
|
39
|
+
vertexShader: vertexShader,
|
|
40
|
+
fragmentShader: fragmentShader,
|
|
41
|
+
uniforms: {
|
|
42
|
+
uColor: { value: new Color(colorRep) },
|
|
43
|
+
uAlpha: { value: 0 },
|
|
44
|
+
},
|
|
45
|
+
depthTest: false,
|
|
46
|
+
side: BackSide,
|
|
47
|
+
transparent: true,
|
|
48
|
+
}));
|
|
49
|
+
vignette.frustumCulled = false;
|
|
50
|
+
vignette.renderOrder = 999;
|
|
51
|
+
vignette.rotateX(Math.PI / 2);
|
|
52
|
+
vignette.position.z = -0.15;
|
|
53
|
+
return vignette;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Analog stick sliding locomotion with optional comfort vignette and jump.
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* - Reads left controller thumbstick for planar movement relative to head yaw.
|
|
60
|
+
* - Applies a dynamic peripheral vignette based on input magnitude scaled by
|
|
61
|
+
* `comfortAssist` to reduce motion sickness.
|
|
62
|
+
* - Triggers jump when `jumpButton` is pressed.
|
|
63
|
+
*
|
|
64
|
+
* @category Locomotion
|
|
65
|
+
*/
|
|
66
|
+
class SlideSystem extends createSystem({}, {
|
|
67
|
+
/** Locomotor engine shared across locomotion systems. */
|
|
68
|
+
locomotor: { type: Types.Object, default: undefined },
|
|
69
|
+
/** Maximum linear speed in meters/second. */
|
|
70
|
+
maxSpeed: { type: Types.Float32, default: 5 },
|
|
71
|
+
/** Comfort vignette strength [0..1]; 0 disables vignetting. */
|
|
72
|
+
comfortAssist: { type: Types.Float32, default: 0.5 },
|
|
73
|
+
/** Button used to trigger jump. */
|
|
74
|
+
jumpButton: { type: Types.String, default: InputComponent.A_Button },
|
|
75
|
+
}) {
|
|
76
|
+
constructor() {
|
|
77
|
+
super(...arguments);
|
|
78
|
+
this.movementVector = new Vector3();
|
|
79
|
+
this.movementDirection = new Quaternion();
|
|
80
|
+
this.input2D = new Vector2();
|
|
81
|
+
this.isMoving = false;
|
|
82
|
+
this.vignette = createVignette(0.3);
|
|
83
|
+
this.vignetteAlphaTarget = 0;
|
|
84
|
+
}
|
|
85
|
+
init() {
|
|
86
|
+
this.locomotor = this.config.locomotor.value;
|
|
87
|
+
this.player.head.add(this.vignette);
|
|
88
|
+
}
|
|
89
|
+
destroy() {
|
|
90
|
+
this.vignette.removeFromParent();
|
|
91
|
+
}
|
|
92
|
+
update(delta) {
|
|
93
|
+
var _a, _b;
|
|
94
|
+
this.vignetteAlphaTarget = 0;
|
|
95
|
+
// Handle jump input
|
|
96
|
+
if ((_a = this.input.gamepads.right) === null || _a === void 0 ? void 0 : _a.getButtonDown(this.config.jumpButton.value)) {
|
|
97
|
+
this.locomotor.jump();
|
|
98
|
+
}
|
|
99
|
+
if (this.input.isPrimary('controller', 'left')) {
|
|
100
|
+
this.input2D.copy(((_b = this.input.gamepads.left) === null || _b === void 0 ? void 0 : _b.getAxesValues(InputComponent.Thumbstick)) || {
|
|
101
|
+
x: 0,
|
|
102
|
+
y: 0,
|
|
103
|
+
});
|
|
104
|
+
this.movementVector.set(this.input2D.x, 0, this.input2D.y);
|
|
105
|
+
const inputValue = this.input2D.length();
|
|
106
|
+
if (inputValue > 0) {
|
|
107
|
+
this.player.head.getWorldQuaternion(this.movementDirection);
|
|
108
|
+
this.movementVector.applyQuaternion(this.movementDirection);
|
|
109
|
+
this.movementVector.y = 0;
|
|
110
|
+
this.movementVector
|
|
111
|
+
.normalize()
|
|
112
|
+
.multiplyScalar(inputValue * this.config.maxSpeed.value);
|
|
113
|
+
this.locomotor.slide(this.movementVector);
|
|
114
|
+
this.vignetteAlphaTarget =
|
|
115
|
+
inputValue * this.config.comfortAssist.value;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
if (this.isMoving) {
|
|
119
|
+
// Stop movement by sending zero vector
|
|
120
|
+
this.movementVector.set(0, 0, 0);
|
|
121
|
+
this.locomotor.slide(this.movementVector);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
this.isMoving = inputValue > 0;
|
|
125
|
+
this.vignette.material.uniforms.uAlpha.value = lerp(this.vignette.material.uniforms.uAlpha.value, this.vignetteAlphaTarget, delta * 10);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export { SlideSystem };
|
|
131
|
+
//# sourceMappingURL=slide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide.js","sources":["../../src/locomotion/slide.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 { Types } from '../ecs/index.js';
|
|
8
|
+
declare const TeleportSystem_base: import("elics").SystemConstructor<{
|
|
9
|
+
/** Downward acceleration for the parabolic guide (negative). */
|
|
10
|
+
rayGravity: {
|
|
11
|
+
type: Types.Float32;
|
|
12
|
+
default: number;
|
|
13
|
+
};
|
|
14
|
+
/** Locomotor engine used for hit testing and teleport execution. */
|
|
15
|
+
locomotor: {
|
|
16
|
+
type: Types.Object;
|
|
17
|
+
default: undefined;
|
|
18
|
+
};
|
|
19
|
+
/** Enable hand‑tracking micro‑gesture flow for activation/confirm. */
|
|
20
|
+
microGestureControlsEnabled: {
|
|
21
|
+
type: Types.Boolean;
|
|
22
|
+
default: false;
|
|
23
|
+
};
|
|
24
|
+
}, {}, import("../ecs/world.js").World, import("../ecs/system.js").System<{
|
|
25
|
+
/** Downward acceleration for the parabolic guide (negative). */
|
|
26
|
+
rayGravity: {
|
|
27
|
+
type: Types.Float32;
|
|
28
|
+
default: number;
|
|
29
|
+
};
|
|
30
|
+
/** Locomotor engine used for hit testing and teleport execution. */
|
|
31
|
+
locomotor: {
|
|
32
|
+
type: Types.Object;
|
|
33
|
+
default: undefined;
|
|
34
|
+
};
|
|
35
|
+
/** Enable hand‑tracking micro‑gesture flow for activation/confirm. */
|
|
36
|
+
microGestureControlsEnabled: {
|
|
37
|
+
type: Types.Boolean;
|
|
38
|
+
default: false;
|
|
39
|
+
};
|
|
40
|
+
}, {}>>;
|
|
41
|
+
/**
|
|
42
|
+
* Arc‑based teleportation with surface validation and hand/controller input.
|
|
43
|
+
*
|
|
44
|
+
* @remarks
|
|
45
|
+
* - Uses locomotor ray hit tests and only allows targets with upward normals.
|
|
46
|
+
* - In hand‑tracking mode, optional micro‑gestures can control activation
|
|
47
|
+
* (e.g., thumb tap to confirm).
|
|
48
|
+
* - Draws a curved parabolic guide and landing marker with visual feedback.
|
|
49
|
+
*
|
|
50
|
+
* @category Locomotion
|
|
51
|
+
*/
|
|
52
|
+
export declare class TeleportSystem extends TeleportSystem_base {
|
|
53
|
+
private rayOrigin;
|
|
54
|
+
private rayDirection;
|
|
55
|
+
private markers;
|
|
56
|
+
private targetValid;
|
|
57
|
+
private teleportMarker;
|
|
58
|
+
private markerMat;
|
|
59
|
+
private line;
|
|
60
|
+
private teleportWasActive;
|
|
61
|
+
private activeInput;
|
|
62
|
+
private locomotor;
|
|
63
|
+
init(): void;
|
|
64
|
+
destroy(): void;
|
|
65
|
+
update(): void;
|
|
66
|
+
}
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=teleport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teleport.d.ts","sourceRoot":"","sources":["../../src/locomotion/teleport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,KAAK,EAAgB,MAAM,iBAAiB,CAAC;;IAkClD,gEAAgE;;;;;IAEhE,oEAAoE;;;;;IAEpE,sEAAsE;;;;;;IAJtE,gEAAgE;;;;;IAEhE,oEAAoE;;;;;IAEpE,sEAAsE;;;;;;AAlB1E;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,SAAQ,mBAUnC;IACC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,SAAS,CAAa;IAE9B,IAAI;IA8BJ,OAAO,IAAI,IAAI;IAMf,MAAM,IAAI,IAAI;CAyFf"}
|