Files
Room-3D/js/controls.js
2026-01-08 16:37:17 +03:00

51 lines
1.7 KiB
JavaScript

import { camera } from './camera.js';
import { room } from './scene.js';
export const controls = {
isDragging: false,
previousMousePosition: { x: 0, y: 0 },
rotationSpeed: 0.01,
zoomSpeed: 0.1,
minZoom: 1,
maxZoom: 20,
// Обновление — пока не нужно, всё в событиях
update: function() {}
};
// --- Вращение модели при нажатой левой кнопке мыши ---
document.addEventListener('mousedown', (event) => {
if (event.button === 0) {
controls.isDragging = true;
controls.previousMousePosition = { x: event.clientX, y: event.clientY };
}
});
document.addEventListener('mouseup', () => {
controls.isDragging = false;
});
document.addEventListener('mousemove', (event) => {
if (controls.isDragging && room) {
const deltaX = event.clientX - controls.previousMousePosition.x;
const deltaY = event.clientY - controls.previousMousePosition.y;
room.rotation.y += deltaX * controls.rotationSpeed;
room.rotation.x += deltaY * controls.rotationSpeed;
// Ограничение наклона по X (чтобы не перевернуть комнату)
room.rotation.x = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, room.rotation.x));
}
controls.previousMousePosition = { x: event.clientX, y: event.clientY };
});
// --- Зум колёсиком мыши ---
document.addEventListener('wheel', (event) => {
const delta = event.deltaY * 0.01; // Чем меньше число, тем мягче зум
const newZ = camera.position.z + delta * controls.zoomSpeed * camera.position.z;
// Ограничение диапазона зума
camera.position.z = Math.max(controls.minZoom, Math.min(controls.maxZoom, newZ));
});