import { Vector3 } from 'three'; import { PointerLockControls } from 'three/examples/jsm/Addons.js'; class PointerControls { constructor(camera, hero, domElement) { this.kb = {}; this.canJump = false; this.velocity = new Vector3(); this.direction = new Vector3(); this.rotationY = 0; this.vertex = new Vector3(); this.rvelo = 0; this.camera = camera; this.hero = hero; this.click = false; this.controls = new PointerLockControls(camera, domElement); const onKeyDown = (event) => { this.kb[event.code] = true; switch (event.code) { case 'Space': if (this.canJump === true) this.velocity.y += 350; this.canJump = false; break; } }; const onKeyUp = (event) => { this.kb[event.code] = false; }; document.addEventListener('keydown', onKeyDown); document.addEventListener('keyup', onKeyUp); window.addEventListener("gamepadconnected", (e) => { this.gp = navigator.getGamepads()[e.gamepad.index]; console.log("Gamepad connected", this.gp); }); domElement.addEventListener('click', () => { this.controls.isLocked && this.clicked && this.clicked(); }); domElement.addEventListener('mousedown', () => { this.controls.isLocked && this.onpointer && this.onpointer('start'); }); domElement.addEventListener('mousemove', () => { this.controls.isLocked && this.onpointer && this.onpointer('drag'); }); domElement.addEventListener('mouseup', () => { this.controls.isLocked && this.onpointer && this.onpointer('end'); }); this.update = () => { }; } get moveForward(){ return this.kb['ArrowUp'] || this.kb['KeyW'] || false } get moveLeft(){ return this.kb['ArrowLeft'] || this.kb['KeyA'] || false } get rotateLeft(){ return this.moveLeft; } get moveRight(){ return this.kb['ArrowRight'] || this.kb['KeyD'] || false } get rotateRight(){ return this.moveRight; } get moveBackward(){ return this.kb['ArrowDown'] || this.kb['KeyS'] || false } get moveUp(){ return this.kb['KeyR'] || false } get moveDown(){ return this.kb['KeyF'] || false } get cameraLeft(){ return this.kb['KeyQ'] || false } get cameraRight(){ return this.kb['KeyE'] || false } get moving(){ return this.moveForward || this.moveBackward; } get rotating(){ return this.rotateLeft || this.rotateRight; } get motion(){ return this.moving || this.rotating; } get running(){ return this.moving && this.kb.ShiftLeft; } } export { PointerControls };