Files
Timmy-time-dashboard/static/world/controls.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

/**
* Camera + touch controls for the Workshop scene.
*
* Uses Three.js OrbitControls with constrained range the visitor
* can look around the room but not leave it.
*/
import { OrbitControls } from "https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/controls/OrbitControls.js";
/**
* Set up camera controls.
* @param {THREE.PerspectiveCamera} camera
* @param {HTMLCanvasElement} domElement
* @returns {OrbitControls}
*/
export function setupControls(camera, domElement) {
const controls = new OrbitControls(camera, domElement);
// Smooth damping
controls.enableDamping = true;
controls.dampingFactor = 0.08;
// Limit zoom range
controls.minDistance = 3;
controls.maxDistance = 12;
// Limit vertical angle (don't look below floor or straight up)
controls.minPolarAngle = Math.PI * 0.2;
controls.maxPolarAngle = Math.PI * 0.6;
// Limit horizontal rotation range (stay facing the desk area)
controls.minAzimuthAngle = -Math.PI * 0.4;
controls.maxAzimuthAngle = Math.PI * 0.4;
// Target: roughly the desk area
controls.target.set(0, 1.2, 0);
// Touch settings
controls.touches = {
ONE: 0, // ROTATE
TWO: 2, // DOLLY
};
// Disable panning (visitor stays in place)
controls.enablePan = false;
controls.update();
return controls;
}