Initial commit
This commit is contained in:
50
js/controls.js
vendored
Normal file
50
js/controls.js
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
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));
|
||||
});
|
||||
Reference in New Issue
Block a user