Files
caravels-community-simulation/js/controls.js
rafaeldpsilva adbbf6bf50 first commit
2025-12-10 12:32:12 +00:00

59 lines
2.2 KiB
JavaScript

let mouse;
let raycaster;
function initControls(scene, camera, renderer){
// --- Add OrbitControls ---
controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true; // Smooth movement
controls.dampingFactor = 0.05;
controls.enableRotate = false;
controls.enablePan = true;
controls.enableZoom = false;
controls.mouseButtons = {
LEFT: THREE.MOUSE.PAN
}
controls.target.set(0, 0, 0); // Focus on scene center
controls.update();
const transformControls = new THREE.TransformControls(camera, renderer.domElement);
transformControls.setMode('translate'); // Move mode
transformControls.showX = true;
transformControls.showY = false;
transformControls.showZ = true;
transformControls.enabled = false;
transformControls.addEventListener('dragging-changed', function (event) {
controls.enabled = !event.value; // Disable OrbitControls while dragging
});
scene.add(transformControls);
window.addEventListener('keydown', function(event) {
if (event.key === 'm') {
transformControls.enabled = !transformControls.enabled;
}
});
// Add event listener for selecting Building To Move
renderer.domElement.addEventListener('pointerdown', function(event) {
// Calculate mouse position in normalized device coordinates
const rect = renderer.domElement.getBoundingClientRect();
mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
const intersects = raycaster.intersectObjects(interactableObjects);
if (transformControls.enabled) {
raycaster.setFromCamera(mouse, camera);
const intersects = raycaster.intersectObjects(interactableObjects);
if (intersects.length > 0) {
const selected = intersects[0].object.userData.parentGroup || intersects[0].object;
transformControls.attach(selected);
} else {
transformControls.detach();
}
}
});
mouse = new THREE.Vector2();
raycaster = new THREE.Raycaster();
}