"use strict"; const DebugControls = (function(){ const DebugControls = function(hollow_bond){ const self = this, euler = new THREE.Euler(0, 0, 0, "YXZ"), keys = { forward : false, backward : false, left : false, right : false, up : false, down : false }; let is_pointer_locked = false; this.setup = inspector => { const canvas = inspector.renderer.domElement; canvas.addEventListener("click", () => canvas.requestPointerLock()); document.addEventListener("pointerlockchange", () => { is_pointer_locked = (document.pointerLockElement === canvas); }); document.addEventListener("mousemove", evt => { if(!is_pointer_locked) return; euler.setFromQuaternion(inspector.camera.quaternion); euler.y -= evt.movementX * 0.002; euler.x -= evt.movementY * 0.002; euler.x = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, euler.x)); inspector.camera.quaternion.setFromEuler(euler); }); window.addEventListener("keydown", evt => { // Teclas de movimiento switch(evt.code){ case "KeyW": case "ArrowUp": keys.forward = true; break; case "KeyS": case "ArrowDown": keys.backward = true; break; case "KeyA": case "ArrowLeft": keys.left = true; break; case "KeyD": case "ArrowRight": keys.right = true; break; case "Space": keys.up = true; break; case "ShiftLeft": case "ShiftRight": case "KeyC": keys.down = true; break; // Cambio de estrato con Q y E case "KeyE": inspector.set_floor(inspector.current_floor + 1); break; case "KeyQ": inspector.set_floor(inspector.current_floor - 1); break; // Rango de capas con las teclas numéricas 1 a 5 case "Digit0": inspector.vertical_layers_range = 0; inspector.update_layer_visibility(); inspector.update_hud(); break; case "Digit1": inspector.vertical_layers_range = 1; inspector.update_layer_visibility(); inspector.update_hud(); break; case "Digit2": inspector.vertical_layers_range = 2; inspector.update_layer_visibility(); inspector.update_hud(); break; case "Digit3": inspector.vertical_layers_range = 3; inspector.update_layer_visibility(); inspector.update_hud(); break; case "Digit4": inspector.vertical_layers_range = 4; inspector.update_layer_visibility(); inspector.update_hud(); break; }; }); window.addEventListener("keyup", evt => { switch(evt.code){ case "KeyW": case "ArrowUp": keys.forward = false; break; case "KeyS": case "ArrowDown": keys.backward = false; break; case "KeyA": case "ArrowLeft": keys.left = false; break; case "KeyD": case "ArrowRight": keys.right = false; break; case "Space": keys.up = false; break; case "ShiftLeft": case "ShiftRight": case "KeyC": keys.down = false; break; }; }); }; this.update_movement = (inspector, delta) => { if(!is_pointer_locked) return; const movement = new THREE.Vector3(); if(keys.forward) movement.z --; if(keys.backward) movement.z ++; if(keys.left) movement.x --; if(keys.right) movement.x ++; if(movement.lengthSq() > 0){ movement.normalize(); movement.applyQuaternion(inspector.camera.quaternion); }; if(keys.up) movement.y ++; if(keys.down) movement.y --; inspector.camera.position.addScaledVector(movement, 25 * delta); }; }; return DebugControls; })();