161 lines
5.5 KiB
JavaScript
161 lines
5.5 KiB
JavaScript
"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;
|
|
})(); |