Skip to content

Commit

Permalink
feat(WebXRManager): add missing methods, update getCamera signature (#…
Browse files Browse the repository at this point in the history
…169)

* chore(WebXRManager): add missing methods, update getCamera signature

* chore(WebXRManager): move three types out of webxr spec types

* chore: run prettier

* fix(WebXRManager): leave XRProjectionLayer out of getBaseLayer for now

* fix(WebXRManager): add setReferenceSpace

From mrdoob/three.js#20949

* chore: update webxr types, complete webxr controller types

* chore(XRHandSpace): make joints readonly

* chore: lint

* fix: unwrap mangled

* chore: lint

* chore: lint

* chore: prefer record

* chore: lint
  • Loading branch information
CodyJasonBennett authored May 25, 2022
1 parent 52e8c66 commit f675677
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 9 deletions.
33 changes: 30 additions & 3 deletions types/three/src/renderers/webxr/WebXRController.d.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,40 @@
import { Group } from '../../objects/Group';
import { Vector3 } from '../../math/Vector3';

export type XRControllerEventType = XRSessionEventType | XRInputSourceEventType | 'disconnected' | 'connected';

export type XRHandJoints = Record<XRHandJoint, number>;

export interface XRHandInputState {
pinching: boolean;
}

export class XRHandSpace extends Group {
readonly joints: Partial<XRHandJoints>;
readonly inputState: XRHandInputState;
}

export class XRTargetRaySpace extends Group {
hasLinearVelocity: boolean;
readonly linearVelocity: Vector3;
hasAngularVelocity: boolean;
readonly angularVelocity: Vector3;
}

export class XRGripSpace extends Group {
hasLinearVelocity: boolean;
readonly linearVelocity: Vector3;
hasAngularVelocity: boolean;
readonly angularVelocity: Vector3;
}

export class WebXRController {
constructor();

getTargetRaySpace(): Group;
getGripSpace(): Group;
dispatchEvent(event: { type: XRControllerEventType; data?: XRInputSource | undefined }): this;
getHandSpace(): XRHandSpace;
getTargetRaySpace(): XRTargetRaySpace;
getGripSpace(): XRGripSpace;
dispatchEvent(event: { type: XRControllerEventType; data?: XRInputSource }): this;
disconnect(inputSource: XRInputSource): this;
update(inputSource: XRInputSource, frame: XRFrame, referenceSpace: XRReferenceSpace): this;
}
27 changes: 21 additions & 6 deletions types/three/src/renderers/webxr/WebXRManager.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { Group } from '../../objects/Group';
import { Camera } from '../../cameras/Camera';
import { Vector4 } from '../../math/Vector4';
import { ArrayCamera } from '../../cameras/ArrayCamera';
import { PerspectiveCamera } from '../../cameras/PerspectiveCamera';
import { EventDispatcher } from '../../core/EventDispatcher';
import { XRTargetRaySpace, XRGripSpace, XRHandSpace } from './WebXRController';

export type WebXRCamera = PerspectiveCamera & { viewport: Vector4 };
export type WebXRArrayCamera = Omit<ArrayCamera, 'cameras'> & { cameras: [WebXRCamera, WebXRCamera] };

export class WebXRManager extends EventDispatcher {
constructor(renderer: any, gl: WebGLRenderingContext);
Expand All @@ -15,15 +20,25 @@ export class WebXRManager extends EventDispatcher {
*/
isPresenting: boolean;

getController(index: number): Group;
getControllerGrip(index: number): Group;
getHand(index: number): Group;
/**
* @default true
*/
cameraAutoUpdate: boolean;

getController(index: number): XRTargetRaySpace;
getControllerGrip(index: number): XRGripSpace;
getHand(index: number): XRHandSpace;
setFramebufferScaleFactor(value: number): void;
setReferenceSpaceType(value: XRReferenceSpaceType): void;
getReferenceSpace(): XRReferenceSpace | null;
setReferenceSpace(value: XRReferenceSpace): void;
getBaseLayer(): XRWebGLLayer | XRProjectionLayer;
getBinding(): XRWebGLBinding;
getFrame(): XRFrame;
getSession(): XRSession | null;
setSession(value: XRSession): Promise<void>;
getCamera(camera: Camera): Camera;
getCamera(): WebXRArrayCamera;
updateCamera(camera: PerspectiveCamera): void;
setAnimationLoop(callback: XRFrameRequestCallback | null): void;
getFoveation(): number | undefined;
setFoveation(foveation: number): void;
Expand Down

0 comments on commit f675677

Please sign in to comment.