@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
166 lines (165 loc) • 4.95 kB
TypeScript
import type { IMinimalMotionControllerObject, MotionControllerComponentType } from "./webXRAbstractMotionController.js";
import { Observable } from "../../Misc/observable.js";
import type { IDisposable } from "../../scene.js";
/**
* X-Y values for axes in WebXR
*/
export interface IWebXRMotionControllerAxesValue {
/**
* The value of the x axis
*/
x: number;
/**
* The value of the y-axis
*/
y: number;
}
/**
* changed / previous values for the values of this component
*/
export interface IWebXRMotionControllerComponentChangesValues<T> {
/**
* current (this frame) value
*/
current: T;
/**
* previous (last change) value
*/
previous: T;
}
/**
* Represents changes in the component between current frame and last values recorded
*/
export interface IWebXRMotionControllerComponentChanges {
/**
* will be populated with previous and current values if axes changed
*/
axes?: IWebXRMotionControllerComponentChangesValues<IWebXRMotionControllerAxesValue>;
/**
* will be populated with previous and current values if pressed changed
*/
pressed?: IWebXRMotionControllerComponentChangesValues<boolean>;
/**
* will be populated with previous and current values if touched changed
*/
touched?: IWebXRMotionControllerComponentChangesValues<boolean>;
/**
* will be populated with previous and current values if value changed
*/
value?: IWebXRMotionControllerComponentChangesValues<number>;
}
/**
* This class represents a single component (for example button or thumbstick) of a motion controller
*/
export declare class WebXRControllerComponent implements IDisposable {
/**
* the id of this component
*/
id: string;
/**
* the type of the component
*/
type: MotionControllerComponentType;
private _buttonIndex;
private _axesIndices;
private _axes;
private _changes;
private _currentValue;
private _hasChanges;
private _pressed;
private _touched;
/**
* button component type
*/
static BUTTON_TYPE: MotionControllerComponentType;
/**
* squeeze component type
*/
static SQUEEZE_TYPE: MotionControllerComponentType;
/**
* Thumbstick component type
*/
static THUMBSTICK_TYPE: MotionControllerComponentType;
/**
* Touchpad component type
*/
static TOUCHPAD_TYPE: MotionControllerComponentType;
/**
* trigger component type
*/
static TRIGGER_TYPE: MotionControllerComponentType;
/**
* If axes are available for this component (like a touchpad or thumbstick) the observers will be notified when
* the axes data changes
*/
onAxisValueChangedObservable: Observable<{
x: number;
y: number;
}>;
/**
* Observers registered here will be triggered when the state of a button changes
* State change is either pressed / touched / value
*/
onButtonStateChangedObservable: Observable<WebXRControllerComponent>;
/**
* Creates a new component for a motion controller.
* It is created by the motion controller itself
*
* @param id the id of this component
* @param type the type of the component
* @param _buttonIndex index in the buttons array of the gamepad
* @param _axesIndices indices of the values in the axes array of the gamepad
*/
constructor(
/**
* the id of this component
*/
id: string,
/**
* the type of the component
*/
type: MotionControllerComponentType, _buttonIndex?: number, _axesIndices?: number[]);
/**
* The current axes data. If this component has no axes it will still return an object { x: 0, y: 0 }
*/
get axes(): IWebXRMotionControllerAxesValue;
/**
* Get the changes. Elements will be populated only if they changed with their previous and current value
*/
get changes(): IWebXRMotionControllerComponentChanges;
/**
* Return whether or not the component changed the last frame
*/
get hasChanges(): boolean;
/**
* is the button currently pressed
*/
get pressed(): boolean;
/**
* is the button currently touched
*/
get touched(): boolean;
/**
* Get the current value of this component
*/
get value(): number;
/**
* Dispose this component
*/
dispose(): void;
/**
* Are there axes correlating to this component
* @returns true is axes data is available
*/
isAxes(): boolean;
/**
* Is this component a button (hence - pressable)
* @returns true if can be pressed
*/
isButton(): boolean;
/**
* update this component using the gamepad object it is in. Called on every frame
* @param nativeController the native gamepad controller object
*/
update(nativeController: IMinimalMotionControllerObject): void;
}