@threlte/xr 1.0.0-next.2 → 1.0.0-next.4
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/dist/components/ARButton.svelte +8 -6
- package/dist/components/ARButton.svelte.d.ts +12 -2
- package/dist/components/Controller.svelte +55 -41
- package/dist/components/Controller.svelte.d.ts +26 -19
- package/dist/components/Hand.svelte +37 -15
- package/dist/components/Hand.svelte.d.ts +15 -19
- package/dist/components/VRButton.svelte +4 -3
- package/dist/components/VRButton.svelte.d.ts +12 -2
- package/dist/components/XR.svelte +17 -12
- package/dist/components/XR.svelte.d.ts +18 -25
- package/dist/components/XRButton.svelte +9 -7
- package/dist/components/XRButton.svelte.d.ts +12 -2
- package/dist/components/internal/Cursor.svelte.d.ts +3 -3
- package/dist/components/internal/PointerCursor.svelte +5 -3
- package/dist/components/internal/PointerCursor.svelte.d.ts +1 -4
- package/dist/components/internal/ShortRay.svelte +23 -21
- package/dist/components/internal/ShortRay.svelte.d.ts +1 -4
- package/dist/components/internal/TeleportCursor.svelte +5 -3
- package/dist/components/internal/TeleportCursor.svelte.d.ts +1 -4
- package/dist/components/internal/TeleportRay.svelte +5 -3
- package/dist/components/internal/TeleportRay.svelte.d.ts +1 -4
- package/dist/internal/defaultFeatures.d.ts +4 -0
- package/dist/internal/defaultFeatures.js +14 -0
- package/dist/internal/setupControllers.js +1 -1
- package/dist/internal/setupHands.js +1 -1
- package/dist/internal/setupHeadset.js +14 -5
- package/dist/internal/setupRaf.js +8 -12
- package/dist/internal/stores.d.ts +5 -4
- package/dist/plugins/pointerControls/plugin.js +6 -2
- package/dist/plugins/pointerControls/setup.js +28 -27
- package/dist/plugins/pointerControls/types.d.ts +10 -10
- package/dist/plugins/pointerControls/types.js +9 -9
- package/dist/plugins/teleportControls/context.d.ts +9 -3
- package/dist/plugins/teleportControls/context.js +45 -2
- package/dist/plugins/teleportControls/index.js +4 -13
- package/dist/plugins/teleportControls/plugin.js +2 -2
- package/dist/plugins/teleportControls/setup.js +1 -1
- package/dist/types.d.ts +20 -2
- package/package.json +3 -3
- package/dist/plugins/teleportControls/hook.d.ts +0 -7
- package/dist/plugins/teleportControls/hook.js +0 -38
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
import { Raycaster } from 'three';
|
|
2
1
|
import { currentWritable, watch } from '@threlte/core';
|
|
3
|
-
import {
|
|
2
|
+
import { createTeleportContext, useTeleportControls, getHandContext } from './context';
|
|
4
3
|
import { injectTeleportControlsPlugin } from './plugin';
|
|
5
|
-
import { defaultComputeFunction } from './compute';
|
|
6
4
|
import { setHandContext } from './context';
|
|
7
5
|
import { setupTeleportControls } from './setup';
|
|
8
6
|
import { teleportState } from '../../internal/stores';
|
|
9
7
|
let controlsCounter = 0;
|
|
10
8
|
export const teleportControls = (handedness, options) => {
|
|
11
|
-
if (
|
|
9
|
+
if (useTeleportControls() === undefined) {
|
|
12
10
|
injectTeleportControlsPlugin();
|
|
13
|
-
|
|
14
|
-
interactiveObjects: [],
|
|
15
|
-
surfaces: new Map(),
|
|
16
|
-
blockers: new Map(),
|
|
17
|
-
dispatchers: new WeakMap(),
|
|
18
|
-
raycaster: new Raycaster(),
|
|
19
|
-
compute: options?.compute ?? defaultComputeFunction
|
|
20
|
-
});
|
|
11
|
+
createTeleportContext(options?.compute);
|
|
21
12
|
}
|
|
22
|
-
const context =
|
|
13
|
+
const context = useTeleportControls();
|
|
23
14
|
if (getHandContext(handedness) === undefined) {
|
|
24
15
|
const enabled = options?.enabled ?? true;
|
|
25
16
|
controlsCounter += enabled ? 1 : -1;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { writable } from 'svelte/store';
|
|
2
2
|
import { watch } from '@threlte/core';
|
|
3
3
|
import { injectPlugin } from '@threlte/core';
|
|
4
|
-
import { useTeleportControls } from './
|
|
4
|
+
import { useTeleportControls } from './context';
|
|
5
5
|
/**
|
|
6
6
|
* Registers T components with "teleportSurface" or "teleportBlocker" attributes.
|
|
7
7
|
*/
|
|
@@ -24,7 +24,7 @@ export const injectTeleportControlsPlugin = () => {
|
|
|
24
24
|
return noop;
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
addSurface($refStore, props
|
|
27
|
+
addSurface($refStore, props);
|
|
28
28
|
return () => removeSurface($refStore);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -49,7 +49,7 @@ export const setupTeleportControls = (context, handContext, fixedStep = 1 / 40)
|
|
|
49
49
|
handContext.hovered.set(intersect);
|
|
50
50
|
}, {
|
|
51
51
|
fixedStep,
|
|
52
|
-
|
|
52
|
+
autoStart: false
|
|
53
53
|
});
|
|
54
54
|
watch([useXR().isPresenting, handContext.enabled], ([isPresenting, enabled]) => {
|
|
55
55
|
if (isPresenting && enabled) {
|
package/dist/types.d.ts
CHANGED
|
@@ -4,16 +4,27 @@ import type { XRControllerModel } from 'three/examples/jsm/webxr/XRControllerMod
|
|
|
4
4
|
import type { XRHandModel } from 'three/examples/jsm/webxr/XRHandModelFactory.js';
|
|
5
5
|
export type XRSessionEventType = 'sessionstart' | 'sessionend' | 'visibilitychange' | 'frameratechange';
|
|
6
6
|
export type XRControllerEventType = 'select' | 'selectstart' | 'selectend' | 'squeeze' | 'squeezeend' | 'squeezestart' | 'disconnected' | 'connected';
|
|
7
|
+
export type XRControllerEvents = {
|
|
8
|
+
onconnected?: XRControllerEventCallback<'connected'>;
|
|
9
|
+
ondisconnected?: XRControllerEventCallback<'disconnected'>;
|
|
10
|
+
onselect?: XRControllerEventCallback<'select'>;
|
|
11
|
+
onselectstart?: XRControllerEventCallback<'selectstart'>;
|
|
12
|
+
onselectend?: XRControllerEventCallback<'selectend'>;
|
|
13
|
+
onsqueeze?: XRControllerEventCallback<'squeeze'>;
|
|
14
|
+
onsqueezeend?: XRControllerEventCallback<'squeezeend'>;
|
|
15
|
+
onsqueezestart?: XRControllerEventCallback<'squeezestart'>;
|
|
16
|
+
};
|
|
7
17
|
export type XRHandEventType = 'pinchstart' | 'pinchend' | 'connected' | 'disconnected';
|
|
8
|
-
export type XRSessionEvent<Type = XRSessionEventType> = Event & {
|
|
18
|
+
export type XRSessionEvent<Type = XRSessionEventType> = (event: Event & {
|
|
9
19
|
type: Type;
|
|
10
20
|
target: XRSession;
|
|
11
|
-
};
|
|
21
|
+
}) => void;
|
|
12
22
|
export type XRControllerEvent<Type = XRControllerEventType> = Event & {
|
|
13
23
|
type: Type;
|
|
14
24
|
target: Group;
|
|
15
25
|
data: XRInputSource;
|
|
16
26
|
};
|
|
27
|
+
export type XRControllerEventCallback<Type = XRControllerEventType> = (event: XRControllerEvent<Type>) => void;
|
|
17
28
|
export type XRController = {
|
|
18
29
|
targetRay: XRTargetRaySpace;
|
|
19
30
|
grip: XRGripSpace;
|
|
@@ -35,3 +46,10 @@ export type XRHandEvent<Type = XRHandEventType> = Type extends 'connected' | 'di
|
|
|
35
46
|
handedness: 'left' | 'right';
|
|
36
47
|
target: null;
|
|
37
48
|
} : never;
|
|
49
|
+
export type XRHandEventCallback<Type> = (event: XRHandEvent<Type>) => void;
|
|
50
|
+
export type XRHandEvents = {
|
|
51
|
+
onconnected?: XRHandEventCallback<'connected'>;
|
|
52
|
+
ondisconnected?: XRHandEventCallback<'disconnected'>;
|
|
53
|
+
onpinchstart?: XRHandEventCallback<'pinchstart'>;
|
|
54
|
+
onpinchend?: XRHandEventCallback<'pinchend'>;
|
|
55
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threlte/xr",
|
|
3
|
-
"version": "1.0.0-next.
|
|
3
|
+
"version": "1.0.0-next.4",
|
|
4
4
|
"author": "Micheal Parks <michealparks1989@gmail.com> (https://parks.lol)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"devDependencies": {
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"tslib": "^2.6.2",
|
|
24
24
|
"vite": "^5.2.8",
|
|
25
25
|
"vite-plugin-mkcert": "^1.17.5",
|
|
26
|
-
"@threlte/core": "8.0.0-next.
|
|
26
|
+
"@threlte/core": "8.0.0-next.6"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"svelte": ">=5",
|
|
30
|
-
"three": ">=0.
|
|
30
|
+
"three": ">=0.155"
|
|
31
31
|
},
|
|
32
32
|
"type": "module",
|
|
33
33
|
"exports": {
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Mesh } from 'three';
|
|
2
|
-
export declare const useTeleportControls: () => {
|
|
3
|
-
addSurface: (mesh: Mesh, events: Record<string, (arg: unknown) => void>) => void;
|
|
4
|
-
removeSurface: (mesh: Mesh) => void;
|
|
5
|
-
addBlocker: (mesh: Mesh) => void;
|
|
6
|
-
removeBlocker: (mesh: Mesh) => void;
|
|
7
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { getTeleportContext } from './context';
|
|
2
|
-
export const useTeleportControls = () => {
|
|
3
|
-
const context = getTeleportContext();
|
|
4
|
-
const addSurface = (mesh, events) => {
|
|
5
|
-
// check if the object is already in the list
|
|
6
|
-
if (context.interactiveObjects.indexOf(mesh) > -1) {
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
context.interactiveObjects.push(mesh);
|
|
10
|
-
context.surfaces.set(mesh.uuid, mesh);
|
|
11
|
-
context.dispatchers.set(mesh, events);
|
|
12
|
-
};
|
|
13
|
-
const removeSurface = (mesh) => {
|
|
14
|
-
const index = context.interactiveObjects.indexOf(mesh);
|
|
15
|
-
context.interactiveObjects.splice(index, 1);
|
|
16
|
-
context.surfaces.delete(mesh.uuid);
|
|
17
|
-
context.dispatchers.delete(mesh);
|
|
18
|
-
};
|
|
19
|
-
const addBlocker = (mesh) => {
|
|
20
|
-
// check if the object is already in the list
|
|
21
|
-
if (context.interactiveObjects.indexOf(mesh) > -1) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
context.interactiveObjects.push(mesh);
|
|
25
|
-
context.blockers.set(mesh.uuid, mesh);
|
|
26
|
-
};
|
|
27
|
-
const removeBlocker = (mesh) => {
|
|
28
|
-
const index = context.interactiveObjects.indexOf(mesh);
|
|
29
|
-
context.interactiveObjects.splice(index, 1);
|
|
30
|
-
context.blockers.delete(mesh.uuid);
|
|
31
|
-
};
|
|
32
|
-
return {
|
|
33
|
-
addSurface,
|
|
34
|
-
removeSurface,
|
|
35
|
-
addBlocker,
|
|
36
|
-
removeBlocker
|
|
37
|
-
};
|
|
38
|
-
};
|