51 lines
1.7 KiB
JavaScript
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));
|
|
});
|