import Vector3 from '../math/Vector3'; import Notifier from '../core/Notifier'; import type ClayNode from '../Node'; import type Timeline from '../Timeline'; interface GamepadControlOpts { target?: ClayNode; /** * Move speed. */ moveSpeed: number; /** * Look around speed. */ lookAroundSpeed: number; /** * Up axis. */ up: Vector3; /** * Timeline. */ timeline?: Timeline; /** * Function to be called when a standard gamepad is ready to use. */ onStandardGamepadReady?: (gamepad: Gamepad) => void; /** * Function to be called when a gamepad is disconnected. */ onGamepadDisconnected?: (gamepad: Gamepad) => void; } interface GamepadControl extends GamepadControlOpts { } /** * Gamepad Control plugin. * * @example * init(app) { * this._gamepadControl = new clay.plugin.GamepadControl({ * target: camera, * onStandardGamepadReady: customCallback * }); * }, * * loop(app) { * this._gamepadControl.update(app.frameTime); * } */ declare class GamepadControl extends Notifier { private _moveForward; private _moveBackward; private _moveLeft; private _moveRight; private _offsetPitch; private _offsetRoll; private _standardGamepadIndex; private _standardGamepadAvailable; private _gamepadAxisThreshold; constructor(opts: Omit, 'domElement'> & { domElement: HTMLElement; }); /** * Init. control. */ init(): void; /** * Dispose control. */ dispose(): void; /** * Control's update. Should be invoked every frame. * * @param {number} frameTime Frame time. */ update(frameTime: number): void; _checkGamepadCompatibility(event: GamepadEvent): void; _disconnectGamepad(event: GamepadEvent): void; _getStandardGamepad(): Gamepad | null; _scanPressedGamepadButtons(): void; _scanInclinedGamepadAxes(): void; } export default GamepadControl;