59 lines
2.2 KiB
JavaScript
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();
|
|
} |