UNPKG

blaze-2d

Version:

A fast and simple WebGL 2 2D game engine written in TypeScript

61 lines 2.21 kB
import Controls from "./controls"; export default class PointerLockControls extends Controls { /** * Creates a {@link PointerLockControls} instance and sets up it's event handlers. * * @param element The element to use when handling control events * @param camera The camera to control * @param object An optional object to follow the camera's yaw * @param sensitivity Movement sensitivity */ constructor(element, camera, object, sensitivity = 0.1) { super(element, camera, object, sensitivity); this.isLocked = false; /** * Requests pointer lock if the control's are not already locked. */ this.clickHandler = () => { if (!this.isLocked) this.element.requestPointerLock(); }; /** * Resets `movementX` and `movementY` if the controls has been unlocked. */ this.pointerLockChangeHandler = () => { this.isLocked = !this.isLocked; if (!this.isLocked) { this.movementX = 0; this.movementY = 0; } }; /** * Syncs `this.movementX` and `this.movementY` with the event's movement properties. * * @param e The mouse event */ this.mouseMoveHandler = (e) => { if (this.isLocked) { this.movementX = e.movementX; this.movementY = e.movementY; } }; element.addEventListener("click", this.clickHandler); document.addEventListener("pointerlockchange", this.pointerLockChangeHandler); element.addEventListener("mousemove", this.mouseMoveHandler); } /** * Calculates the new camera direction from `movementX` and `movementY`. * * Called every tick. */ update() { if (!this.isLocked) return; } dispose() { this.element.removeEventListener("click", this.clickHandler); document.removeEventListener("pointerlockchange", this.pointerLockChangeHandler); this.element.removeEventListener("mousemove", this.mouseMoveHandler); } } //# sourceMappingURL=pointerLock.js.map