import Vector3 from '../math/Vector3'; import ClayNode from '../Node'; import Timeline from '../Timeline'; import Notifier from '../core/Notifier'; interface FreeControlOpts { /** * Scene node to control, mostly it is a camera */ target?: ClayNode; /** * Target dom to bind with mouse events */ domElement: HTMLElement; /** * Mouse move sensitivity * @type {number} */ sensitivity: number; /** * Target move speed * @type {number} */ speed: number; /** * Up axis * @type {clay.Vector3} */ up: Vector3; /** * If lock vertical movement * @type {boolean} */ verticalMoveLock: boolean; /** * @type {clay.Timeline} */ timeline?: Timeline; } interface FreeControl extends FreeControlOpts { } /** * @example * const control = new clay.plugin.FreeControl({ * target: camera, * domElement: renderer.canvas * }); * ... * timeline.on('frame', function(frameTime) { * control.update(frameTime); * renderer.render(scene, camera); * }); */ declare class FreeControl extends Notifier { private _moveForward; private _moveBackward; private _moveLeft; private _moveRight; private _offsetPitch; private _offsetRoll; constructor(opts: Omit, 'domElement'> & { domElement: HTMLElement; }); /** * init control */ init(): void; /** * Dispose control */ dispose(): void; _requestPointerLock(): void; /** * Control update. Should be invoked every frame * @param {number} frameTime Frame time */ update(frameTime: number): void; _lockChange(): void; _mouseMove(e: MouseEvent): void; _detectMovementChange(frameTime: number): void; _keyDown(e: KeyboardEvent): void; _keyUp(e: KeyboardEvent): void; } export default FreeControl;