forked from Rockachopa/Timmy-time-dashboard
feat: Workshop Phase 2 — Scene MVP (Three.js room) (#401)
Co-authored-by: Kimi Agent <kimi@timmy.local> Co-committed-by: Kimi Agent <kimi@timmy.local>
This commit is contained in:
50
static/world/controls.js
vendored
Normal file
50
static/world/controls.js
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user