@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,132 @@
|
|
|
1
|
+
import { HandleStore } from '@pmndrs/handle';
|
|
2
|
+
import '@preact/signals-core';
|
|
3
|
+
import '../ecs/world.js';
|
|
4
|
+
import { createComponent, Types } from 'elics';
|
|
5
|
+
import '../ecs/component-registry.js';
|
|
6
|
+
import '../runtime/three.js';
|
|
7
|
+
import { Vector3 } from 'three';
|
|
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
|
+
const Handle = createComponent('Handle', {
|
|
16
|
+
instance: { type: Types.Object, default: undefined },
|
|
17
|
+
}, 'Internal component storing an active interaction handle instance');
|
|
18
|
+
/** MovementMode for {@link DistanceGrabbable}. @category Grab */
|
|
19
|
+
const MovementMode = {
|
|
20
|
+
/** Object smoothly moves with the ray cast end point of the grabbing controller. */
|
|
21
|
+
MoveFromTarget: 'MoveFromTarget',
|
|
22
|
+
/** Object smoothly moves toward the input source that's grabbing. */
|
|
23
|
+
MoveTowardsTarget: 'MoveTowardsTarget',
|
|
24
|
+
/** Object moves relative to controller delta movement while maintaining distance. */
|
|
25
|
+
MoveAtSource: 'MoveAtSource',
|
|
26
|
+
/** Object rotates in place without translation or scaling. */
|
|
27
|
+
RotateAtSource: 'RotateAtSource',
|
|
28
|
+
};
|
|
29
|
+
class DistanceGrabHandle extends HandleStore {
|
|
30
|
+
constructor(target_, getOptions = () => ({}), movementMode, returnToOrigin, moveSpeed = 0.1) {
|
|
31
|
+
super(target_, getOptions);
|
|
32
|
+
this.target_ = target_;
|
|
33
|
+
this.getOptions = getOptions;
|
|
34
|
+
this.movementMode = movementMode;
|
|
35
|
+
this.returnToOrigin = returnToOrigin;
|
|
36
|
+
this.moveSpeed = moveSpeed;
|
|
37
|
+
}
|
|
38
|
+
update(time) {
|
|
39
|
+
var _a;
|
|
40
|
+
if (this.movementMode === MovementMode.RotateAtSource ||
|
|
41
|
+
this.movementMode === MovementMode.MoveFromTarget) {
|
|
42
|
+
super.update(time);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const target = this.getTarget();
|
|
46
|
+
if (target == null ||
|
|
47
|
+
this.inputState.size === 0 ||
|
|
48
|
+
(this.latestMoveEvent == null &&
|
|
49
|
+
((_a = this.getOptions().alwaysUpdate) !== null && _a !== void 0 ? _a : false) === false)) {
|
|
50
|
+
if (this.previousPointerOrigin != undefined) {
|
|
51
|
+
this.previousPointerOrigin = undefined;
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (target.parent) {
|
|
56
|
+
target.removeFromParent();
|
|
57
|
+
target.matrixWorld.decompose(target.position, target.quaternion, target.scale);
|
|
58
|
+
}
|
|
59
|
+
const pointerAmount = this.inputState.size;
|
|
60
|
+
const position = target.position;
|
|
61
|
+
const quaternion = target.quaternion;
|
|
62
|
+
const rotation = target.rotation;
|
|
63
|
+
const scale = target.scale;
|
|
64
|
+
switch (this.movementMode) {
|
|
65
|
+
case MovementMode.MoveAtSource: {
|
|
66
|
+
const [p1] = this.inputState.values();
|
|
67
|
+
const current = p1.pointerWorldOrigin;
|
|
68
|
+
if (this.previousPointerOrigin != undefined) {
|
|
69
|
+
const delta = DistanceGrabHandle._tmp
|
|
70
|
+
.copy(current)
|
|
71
|
+
.sub(this.previousPointerOrigin);
|
|
72
|
+
position.add(delta);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.previousPointerOrigin = new Vector3().copy(current);
|
|
76
|
+
}
|
|
77
|
+
// Update stored previous for next frame
|
|
78
|
+
this.previousPointerOrigin.copy(current);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case MovementMode.MoveTowardsTarget: {
|
|
82
|
+
const [p1] = this.inputState.values();
|
|
83
|
+
const pointerOrigin = p1.pointerWorldOrigin;
|
|
84
|
+
const distance = pointerOrigin.distanceTo(position);
|
|
85
|
+
if (distance > this.moveSpeed) {
|
|
86
|
+
const step = DistanceGrabHandle._tmp
|
|
87
|
+
.copy(pointerOrigin)
|
|
88
|
+
.sub(position)
|
|
89
|
+
.normalize()
|
|
90
|
+
.multiplyScalar(this.moveSpeed);
|
|
91
|
+
position.add(step);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
position.set(pointerOrigin.x, pointerOrigin.y, pointerOrigin.z);
|
|
95
|
+
quaternion.set(p1.pointerWorldQuaternion.x, p1.pointerWorldQuaternion.y, p1.pointerWorldQuaternion.z, p1.pointerWorldQuaternion.w);
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Always apply during drag; if returnToOrigin is true,
|
|
101
|
+
// the override in apply() will snap back on release.
|
|
102
|
+
this.outputState.update(this.latestMoveEvent, {
|
|
103
|
+
pointerAmount,
|
|
104
|
+
position,
|
|
105
|
+
quaternion,
|
|
106
|
+
rotation,
|
|
107
|
+
scale,
|
|
108
|
+
time,
|
|
109
|
+
});
|
|
110
|
+
this.outputState.memo = this.apply(target);
|
|
111
|
+
this.latestMoveEvent = undefined;
|
|
112
|
+
}
|
|
113
|
+
apply(target) {
|
|
114
|
+
var _a;
|
|
115
|
+
// On release (last frame), if configured to return to origin,
|
|
116
|
+
// restore the initially saved transform instead of leaving the final drag state.
|
|
117
|
+
if (this.returnToOrigin && ((_a = this.outputState) === null || _a === void 0 ? void 0 : _a.last)) {
|
|
118
|
+
target.position.copy(this.initialTargetPosition);
|
|
119
|
+
// Keep rotation order consistent when restoring
|
|
120
|
+
target.rotation.order = this.initialTargetRotation.order;
|
|
121
|
+
target.quaternion.copy(this.initialTargetQuaternion);
|
|
122
|
+
target.scale.copy(this.initialTargetScale);
|
|
123
|
+
// Do not call super.apply to avoid re-applying the drag transform.
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
return super.apply(target);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
DistanceGrabHandle._tmp = new Vector3();
|
|
130
|
+
|
|
131
|
+
export { DistanceGrabHandle, Handle, MovementMode };
|
|
132
|
+
//# sourceMappingURL=handles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handles.js","sources":["../../src/grab/handles.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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 { Interactable, Hovered, Pressed } from '../input/index.js';
|
|
8
|
+
export * from './grab-system.js';
|
|
9
|
+
export * from './one-hand-grabbable.js';
|
|
10
|
+
export * from './two-hands-grabbable.js';
|
|
11
|
+
export * from './distance-grabbable.js';
|
|
12
|
+
export { MovementMode } from './handles.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/grab/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnE,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RayIntersector, SphereIntersector } from '@pmndrs/pointer-events';
|
|
2
|
+
import { patchedIntersectRayPointerCapture, patchedIntersectSpherePointerCapture, patchedExecuteIntersection } from './pointer-events-patch.js';
|
|
3
|
+
import '../input/input-system.js';
|
|
4
|
+
export { Hovered, Interactable, Pressed } from '../input/state-tags.js';
|
|
5
|
+
export { GrabSystem } from './grab-system.js';
|
|
6
|
+
export { OneHandGrabbable } from './one-hand-grabbable.js';
|
|
7
|
+
export { TwoHandsGrabbable } from './two-hands-grabbable.js';
|
|
8
|
+
export { DistanceGrabbable } from './distance-grabbable.js';
|
|
9
|
+
export { MovementMode } from './handles.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the MIT license found in the
|
|
15
|
+
* LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/
|
|
17
|
+
// Apply monkeypatch once
|
|
18
|
+
RayIntersector.prototype.intersectPointerCapture =
|
|
19
|
+
patchedIntersectRayPointerCapture;
|
|
20
|
+
SphereIntersector.prototype.intersectPointerCapture =
|
|
21
|
+
patchedIntersectSpherePointerCapture;
|
|
22
|
+
SphereIntersector.prototype.executeIntersection = patchedExecuteIntersection;
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/grab/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAAA;;;;;AAKG;AAiBH;AACA,cAAc,CAAC,SAAS,CAAC,uBAAuB;AAC9C,IAAA,iCAAiC;AACnC,iBAAiB,CAAC,SAAS,CAAC,uBAAuB;AACjD,IAAA,oCAAoC;AACtC,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,0BAA0B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
/**
|
|
9
|
+
* Component for enabling single‑hand object grabbing and manipulation.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* - Allows users to grab and manipulate objects using a single VR controller or hand input.
|
|
13
|
+
* - Supports independent control of rotation and translation (movement) axes.
|
|
14
|
+
* - Rotation and translation can be constrained using min/max limits per axis.
|
|
15
|
+
* - Works with the {@link GrabSystem} to automatically create interaction handles.
|
|
16
|
+
* - Requires the entity to have an `object3D` for the interaction to work.
|
|
17
|
+
*
|
|
18
|
+
* @example Basic single‑hand grabbable object
|
|
19
|
+
* ```ts
|
|
20
|
+
* entity.addComponent(OneHandGrabbable, {})
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @example Constrained manipulation (rotation‑only on Y axis)
|
|
24
|
+
* ```ts
|
|
25
|
+
* entity.addComponent(OneHandGrabbable, {
|
|
26
|
+
* rotate: true,
|
|
27
|
+
* rotateMin: [0, -Math.PI, 0],
|
|
28
|
+
* rotateMax: [0, Math.PI, 0],
|
|
29
|
+
* translate: false
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example Limited movement range
|
|
34
|
+
* ```ts
|
|
35
|
+
* entity.addComponent(OneHandGrabbable, {
|
|
36
|
+
* rotate: true,
|
|
37
|
+
* translate: true,
|
|
38
|
+
* translateMin: [-2, 0, -2],
|
|
39
|
+
* translateMax: [2, 3, 2]
|
|
40
|
+
* })
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @category Grab
|
|
44
|
+
* @see {@link GrabSystem}
|
|
45
|
+
* @see {@link TwoHandsGrabbable}
|
|
46
|
+
* @see {@link DistanceGrabbable}
|
|
47
|
+
*/
|
|
48
|
+
export declare const OneHandGrabbable: import("elics").Component<{
|
|
49
|
+
/** A boolean value to set whether rotating the object is allowed. */
|
|
50
|
+
rotate: {
|
|
51
|
+
type: Types.Boolean;
|
|
52
|
+
default: true;
|
|
53
|
+
};
|
|
54
|
+
/** An optional vector to define the maximum angle of the allowed rotation in [x, y, z] axes. */
|
|
55
|
+
rotateMax: {
|
|
56
|
+
type: Types.Vec3;
|
|
57
|
+
default: [number, number, number];
|
|
58
|
+
};
|
|
59
|
+
/** An optional vector to define the minimum angle of the allowed rotation in [x, y, z] axes. */
|
|
60
|
+
rotateMin: {
|
|
61
|
+
type: Types.Vec3;
|
|
62
|
+
default: [number, number, number];
|
|
63
|
+
};
|
|
64
|
+
/** A boolean value to set whether moving the object's position is allowed. */
|
|
65
|
+
translate: {
|
|
66
|
+
type: Types.Boolean;
|
|
67
|
+
default: true;
|
|
68
|
+
};
|
|
69
|
+
/** An optional vector to define the maximum allowed position in [x, y, z] axes. */
|
|
70
|
+
translateMax: {
|
|
71
|
+
type: Types.Vec3;
|
|
72
|
+
default: [number, number, number];
|
|
73
|
+
};
|
|
74
|
+
/** An optional vector to define the minimum allowed position in [x, y, z] axes. */
|
|
75
|
+
translateMin: {
|
|
76
|
+
type: Types.Vec3;
|
|
77
|
+
default: [number, number, number];
|
|
78
|
+
};
|
|
79
|
+
}>;
|
|
80
|
+
//# sourceMappingURL=one-hand-grabbable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"one-hand-grabbable.d.ts","sourceRoot":"","sources":["../../src/grab/one-hand-grabbable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,eAAO,MAAM,gBAAgB;IAGzB,qEAAqE;;;;;IAErE,gGAAgG;;;;;IAKhG,gGAAgG;;;;;IAKhG,8EAA8E;;;;;IAE9E,mFAAmF;;;;;IAKnF,mFAAmF;;;;;EAOtF,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import '@preact/signals-core';
|
|
2
|
+
import '../ecs/world.js';
|
|
3
|
+
import { createComponent, Types } 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
|
+
* Component for enabling single‑hand object grabbing and manipulation.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* - Allows users to grab and manipulate objects using a single VR controller or hand input.
|
|
17
|
+
* - Supports independent control of rotation and translation (movement) axes.
|
|
18
|
+
* - Rotation and translation can be constrained using min/max limits per axis.
|
|
19
|
+
* - Works with the {@link GrabSystem} to automatically create interaction handles.
|
|
20
|
+
* - Requires the entity to have an `object3D` for the interaction to work.
|
|
21
|
+
*
|
|
22
|
+
* @example Basic single‑hand grabbable object
|
|
23
|
+
* ```ts
|
|
24
|
+
* entity.addComponent(OneHandGrabbable, {})
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example Constrained manipulation (rotation‑only on Y axis)
|
|
28
|
+
* ```ts
|
|
29
|
+
* entity.addComponent(OneHandGrabbable, {
|
|
30
|
+
* rotate: true,
|
|
31
|
+
* rotateMin: [0, -Math.PI, 0],
|
|
32
|
+
* rotateMax: [0, Math.PI, 0],
|
|
33
|
+
* translate: false
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @example Limited movement range
|
|
38
|
+
* ```ts
|
|
39
|
+
* entity.addComponent(OneHandGrabbable, {
|
|
40
|
+
* rotate: true,
|
|
41
|
+
* translate: true,
|
|
42
|
+
* translateMin: [-2, 0, -2],
|
|
43
|
+
* translateMax: [2, 3, 2]
|
|
44
|
+
* })
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @category Grab
|
|
48
|
+
* @see {@link GrabSystem}
|
|
49
|
+
* @see {@link TwoHandsGrabbable}
|
|
50
|
+
* @see {@link DistanceGrabbable}
|
|
51
|
+
*/
|
|
52
|
+
const OneHandGrabbable = createComponent('OneHandGrabbable', {
|
|
53
|
+
/** A boolean value to set whether rotating the object is allowed. */
|
|
54
|
+
rotate: { type: Types.Boolean, default: true },
|
|
55
|
+
/** An optional vector to define the maximum angle of the allowed rotation in [x, y, z] axes. */
|
|
56
|
+
rotateMax: {
|
|
57
|
+
type: Types.Vec3,
|
|
58
|
+
default: [Infinity, Infinity, Infinity],
|
|
59
|
+
},
|
|
60
|
+
/** An optional vector to define the minimum angle of the allowed rotation in [x, y, z] axes. */
|
|
61
|
+
rotateMin: {
|
|
62
|
+
type: Types.Vec3,
|
|
63
|
+
default: [-Infinity, -Infinity, -Infinity],
|
|
64
|
+
},
|
|
65
|
+
/** A boolean value to set whether moving the object's position is allowed. */
|
|
66
|
+
translate: { type: Types.Boolean, default: true },
|
|
67
|
+
/** An optional vector to define the maximum allowed position in [x, y, z] axes. */
|
|
68
|
+
translateMax: {
|
|
69
|
+
type: Types.Vec3,
|
|
70
|
+
default: [Infinity, Infinity, Infinity],
|
|
71
|
+
},
|
|
72
|
+
/** An optional vector to define the minimum allowed position in [x, y, z] axes. */
|
|
73
|
+
translateMin: {
|
|
74
|
+
type: Types.Vec3,
|
|
75
|
+
default: [-Infinity, -Infinity, -Infinity],
|
|
76
|
+
},
|
|
77
|
+
}, 'Component for single-hand object grabbing and manipulation');
|
|
78
|
+
|
|
79
|
+
export { OneHandGrabbable };
|
|
80
|
+
//# sourceMappingURL=one-hand-grabbable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"one-hand-grabbable.js","sources":["../../src/grab/one-hand-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;AAEI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;CACF,EACD,4DAA4D;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { Object3D } from '../runtime/index.js';
|
|
8
|
+
type PointerCapture = {
|
|
9
|
+
intersection: any;
|
|
10
|
+
object: Object3D;
|
|
11
|
+
};
|
|
12
|
+
export declare function patchedIntersectRayPointerCapture(this: any, { intersection, object }: PointerCapture): any;
|
|
13
|
+
export declare function patchedIntersectSpherePointerCapture(this: any, { intersection, object }: PointerCapture): any;
|
|
14
|
+
export declare function patchedExecuteIntersection(this: any, object: Object3D): void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=pointer-events-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer-events-patch.d.ts","sourceRoot":"","sources":["../../src/grab/pointer-events-patch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAIL,QAAQ,EAKT,MAAM,qBAAqB,CAAC;AAE7B,KAAK,cAAc,GAAG;IAAE,YAAY,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAe9D,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,GAAG,EACT,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,cAAc,OAiDzC;AAED,wBAAgB,oCAAoC,CAClD,IAAI,EAAE,GAAG,EACT,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,cAAc,OA2DzC;AA8ID,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,QASrE"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import '../runtime/three.js';
|
|
2
|
+
import { Plane, Sphere, Vector3, Quaternion, Matrix4, InstancedMesh, Mesh } 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
|
+
// Monkeypatch @pmndrs/pointer-events RayIntersector to skip expensive UV recomputation
|
|
11
|
+
// during pointer capture. This keeps grabbing performant on dense meshes.
|
|
12
|
+
const planeHelper = new Plane();
|
|
13
|
+
const helperSphere = new Sphere();
|
|
14
|
+
const vecHelper = new Vector3();
|
|
15
|
+
const oldInputDevicePointOffset = new Vector3();
|
|
16
|
+
const inputDeviceQuaternionOffset = new Quaternion();
|
|
17
|
+
const vectorHelper = new Vector3();
|
|
18
|
+
const boxSizeHelper = new Vector3();
|
|
19
|
+
const boxCenterHelper = new Vector3();
|
|
20
|
+
const vec0_0001 = new Vector3(0.0001, 0.0001, 0.0001);
|
|
21
|
+
const invertedMatrixHelper = new Matrix4();
|
|
22
|
+
function patchedIntersectRayPointerCapture({ intersection, object }) {
|
|
23
|
+
var _a, _b, _c;
|
|
24
|
+
const details = intersection.details;
|
|
25
|
+
if (details.type !== 'ray') {
|
|
26
|
+
throw new Error(`unable to process a pointer capture of type "${details.type}" with a ray intersector`);
|
|
27
|
+
}
|
|
28
|
+
if (!this.prepareTransformation()) {
|
|
29
|
+
return intersection;
|
|
30
|
+
}
|
|
31
|
+
object.updateWorldMatrix(true, false);
|
|
32
|
+
// Recompute the plane in world space using the stored localPoint and normal/face
|
|
33
|
+
const normal = (_a = intersection.normal) !== null && _a !== void 0 ? _a : (_b = intersection.face) === null || _b === void 0 ? void 0 : _b.normal;
|
|
34
|
+
if (normal != null && intersection.localPoint != null) {
|
|
35
|
+
planeHelper.setFromNormalAndCoplanarPoint(normal, intersection.localPoint);
|
|
36
|
+
planeHelper.applyMatrix4(object.matrixWorld);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Fallback: face-on plane at previous world point
|
|
40
|
+
planeHelper.setFromNormalAndCoplanarPoint(new Vector3(0, 0, 1), intersection.point);
|
|
41
|
+
}
|
|
42
|
+
const { ray } = this.raycaster;
|
|
43
|
+
const pointOnFace = (_c = ray.intersectPlane(planeHelper, new Vector3())) !== null && _c !== void 0 ? _c : intersection.point;
|
|
44
|
+
// Preserve distance along the ray from previous intersection
|
|
45
|
+
const distanceAlongRay = intersection.pointerPosition.distanceTo(intersection.point);
|
|
46
|
+
const point = vecHelper
|
|
47
|
+
.copy(ray.direction)
|
|
48
|
+
.multiplyScalar(distanceAlongRay)
|
|
49
|
+
.add(ray.origin);
|
|
50
|
+
// NOTE: We intentionally skip UV recomputation here for performance.
|
|
51
|
+
return {
|
|
52
|
+
...intersection,
|
|
53
|
+
object,
|
|
54
|
+
pointOnFace,
|
|
55
|
+
point,
|
|
56
|
+
pointerPosition: ray.origin.clone(),
|
|
57
|
+
pointerQuaternion: this.raycasterQuaternion.clone(),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function patchedIntersectSpherePointerCapture({ intersection, object }) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
const details = intersection.details;
|
|
63
|
+
if (details.type !== 'sphere') {
|
|
64
|
+
throw new Error(`unable to process a pointer capture of type "${details.type}" with a ray intersector`);
|
|
65
|
+
}
|
|
66
|
+
if (!this.prepareTransformation()) {
|
|
67
|
+
return intersection;
|
|
68
|
+
}
|
|
69
|
+
//compute old inputDevicePosition-point offset
|
|
70
|
+
oldInputDevicePointOffset
|
|
71
|
+
.copy(intersection.point)
|
|
72
|
+
.sub(intersection.pointerPosition);
|
|
73
|
+
//compute oldInputDeviceQuaternion-newInputDeviceQuaternion offset
|
|
74
|
+
inputDeviceQuaternionOffset
|
|
75
|
+
.copy(intersection.pointerQuaternion)
|
|
76
|
+
.invert()
|
|
77
|
+
.multiply(this.fromQuaternion);
|
|
78
|
+
//apply quaternion offset to old inputDevicePosition-point offset and add to new inputDevicePosition
|
|
79
|
+
const point = oldInputDevicePointOffset
|
|
80
|
+
.clone()
|
|
81
|
+
.applyQuaternion(inputDeviceQuaternionOffset)
|
|
82
|
+
.add(this.fromPosition);
|
|
83
|
+
object.updateWorldMatrix(true, false);
|
|
84
|
+
// Recompute the plane in world space using the stored localPoint and normal/face
|
|
85
|
+
const normal = (_a = intersection.normal) !== null && _a !== void 0 ? _a : (_b = intersection.face) === null || _b === void 0 ? void 0 : _b.normal;
|
|
86
|
+
if (normal != null && intersection.localPoint != null) {
|
|
87
|
+
planeHelper.setFromNormalAndCoplanarPoint(normal, intersection.localPoint);
|
|
88
|
+
planeHelper.applyMatrix4(object.matrixWorld);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Fallback: face-on plane at previous world point
|
|
92
|
+
planeHelper.setFromNormalAndCoplanarPoint(new Vector3(0, 0, 1), intersection.point);
|
|
93
|
+
}
|
|
94
|
+
const pointOnFace = planeHelper.projectPoint(this.fromPosition, new Vector3());
|
|
95
|
+
// NOTE: We intentionally skip UV recomputation here for performance.
|
|
96
|
+
return {
|
|
97
|
+
details: {
|
|
98
|
+
type: 'sphere',
|
|
99
|
+
},
|
|
100
|
+
distance: point.distanceTo(pointOnFace),
|
|
101
|
+
pointerPosition: this.fromPosition.clone(),
|
|
102
|
+
pointerQuaternion: this.fromQuaternion.clone(),
|
|
103
|
+
object,
|
|
104
|
+
point,
|
|
105
|
+
pointOnFace,
|
|
106
|
+
face: intersection.face,
|
|
107
|
+
localPoint: intersection.localPoint,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function maximizeAxisVector(vec) {
|
|
111
|
+
const absX = Math.abs(vec.x);
|
|
112
|
+
const absY = Math.abs(vec.y);
|
|
113
|
+
const absZ = Math.abs(vec.z);
|
|
114
|
+
if (absX >= absY && absX >= absZ) {
|
|
115
|
+
//x biggest
|
|
116
|
+
vec.set(vec.x < 0 ? -1 : 1, 0, 0);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (absY >= absX && absY >= absZ) {
|
|
120
|
+
//y biggest
|
|
121
|
+
vec.set(0, vec.y < 0 ? -1 : 1, 0);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
//z biggest
|
|
125
|
+
vec.set(0, 0, vec.z < 0 ? -1 : 1);
|
|
126
|
+
}
|
|
127
|
+
function patchedIsSphereIntersectingMesh(pointerSphere, { geometry }, meshMatrixWorld) {
|
|
128
|
+
var _a;
|
|
129
|
+
if (geometry.boundingSphere == null) {
|
|
130
|
+
geometry.computeBoundingSphere();
|
|
131
|
+
}
|
|
132
|
+
helperSphere
|
|
133
|
+
.copy((_a = geometry.boundingSphere) !== null && _a !== void 0 ? _a : new Sphere())
|
|
134
|
+
.applyMatrix4(meshMatrixWorld);
|
|
135
|
+
return (helperSphere.center.distanceToSquared(pointerSphere.center) <
|
|
136
|
+
(pointerSphere.radius + helperSphere.radius) ** 2);
|
|
137
|
+
}
|
|
138
|
+
const matrixHelper = new Matrix4();
|
|
139
|
+
function patchedIntersectSphereWithObject(pointerSphere, object, target) {
|
|
140
|
+
object.updateWorldMatrix(true, false);
|
|
141
|
+
if (object.spherecast != null) {
|
|
142
|
+
object.spherecast(pointerSphere, target);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (object instanceof InstancedMesh) {
|
|
146
|
+
if (object.geometry.boundingSphere == null) {
|
|
147
|
+
object.geometry.computeBoundingSphere();
|
|
148
|
+
}
|
|
149
|
+
if (object.geometry.boundingBox == null) {
|
|
150
|
+
object.geometry.computeBoundingBox();
|
|
151
|
+
}
|
|
152
|
+
for (let i = 0; i < object.count; i++) {
|
|
153
|
+
object.getMatrixAt(i, matrixHelper);
|
|
154
|
+
matrixHelper.premultiply(object.matrixWorld);
|
|
155
|
+
if (!patchedIsSphereIntersectingMesh(pointerSphere, object, matrixHelper)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const intersection = patchedIntersectSphereMesh(pointerSphere, object, matrixHelper, i);
|
|
159
|
+
if (intersection == null) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
target.push(intersection);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (!(object instanceof Mesh)) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (!patchedIsSphereIntersectingMesh(pointerSphere, object, object.matrixWorld)) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
invertedMatrixHelper.copy(object.matrixWorld).invert();
|
|
172
|
+
const intersection = patchedIntersectSphereMesh(pointerSphere, object, object.matrixWorld);
|
|
173
|
+
if (intersection == null) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
target.push(intersection);
|
|
177
|
+
}
|
|
178
|
+
function patchedIntersectSphereMesh(pointerSphere, mesh, meshMatrixWorld, instanceId) {
|
|
179
|
+
var _a, _b, _c;
|
|
180
|
+
invertedMatrixHelper.copy(meshMatrixWorld).invert();
|
|
181
|
+
helperSphere.copy(pointerSphere).applyMatrix4(invertedMatrixHelper);
|
|
182
|
+
const { geometry } = mesh;
|
|
183
|
+
if (geometry.boundingBox == null) {
|
|
184
|
+
geometry.computeBoundingBox();
|
|
185
|
+
}
|
|
186
|
+
(_a = geometry.boundingBox) === null || _a === void 0 ? void 0 : _a.getSize(boxSizeHelper);
|
|
187
|
+
(_b = geometry.boundingBox) === null || _b === void 0 ? void 0 : _b.getCenter(boxCenterHelper);
|
|
188
|
+
(_c = geometry.boundingBox) === null || _c === void 0 ? void 0 : _c.clampPoint(helperSphere.center, vectorHelper);
|
|
189
|
+
vectorHelper.applyMatrix4(meshMatrixWorld); //world coordinates
|
|
190
|
+
const distanceToSphereCenterSquared = vectorHelper.distanceToSquared(pointerSphere.center);
|
|
191
|
+
if (distanceToSphereCenterSquared >
|
|
192
|
+
pointerSphere.radius * pointerSphere.radius) {
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
boxSizeHelper.max(vec0_0001);
|
|
196
|
+
const normal = helperSphere.center.clone().sub(boxCenterHelper);
|
|
197
|
+
normal.divide(boxSizeHelper);
|
|
198
|
+
maximizeAxisVector(normal);
|
|
199
|
+
const point = vectorHelper.clone();
|
|
200
|
+
return {
|
|
201
|
+
distance: Math.sqrt(distanceToSphereCenterSquared),
|
|
202
|
+
face: {
|
|
203
|
+
a: 0,
|
|
204
|
+
b: 0,
|
|
205
|
+
c: 0,
|
|
206
|
+
materialIndex: 0,
|
|
207
|
+
normal,
|
|
208
|
+
},
|
|
209
|
+
normal,
|
|
210
|
+
point,
|
|
211
|
+
instanceId,
|
|
212
|
+
object: mesh,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function patchedExecuteIntersection(object) {
|
|
216
|
+
if (!this.isReady()) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
patchedIntersectSphereWithObject(this.collisionSphere, object, this.intersects);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export { patchedExecuteIntersection, patchedIntersectRayPointerCapture, patchedIntersectSpherePointerCapture };
|
|
223
|
+
//# sourceMappingURL=pointer-events-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer-events-patch.js","sources":["../../src/grab/pointer-events-patch.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|