blaze-2d
Version:
A fast and simple WebGL 2 2D game engine written in TypeScript
61 lines • 2.21 kB
JavaScript
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