forked from Rockachopa/the-matrix
Applies Replit PR #21 feature on top of current main: - buildWorld()/teardown() lifecycle for world rebuild on context restore - disposeWorld(), disposeAgents(), disposeEffects(), disposeInteraction() - getAgentStates()/applyAgentStates() for state preservation across rebuilds - webgl-recovery-overlay in index.html - Canvas reuse on reinit (existingCanvas param in initWorld) - Preserves: visibility-change pause, visitor init, debounced resize
32 lines
807 B
JavaScript
32 lines
807 B
JavaScript
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
|
|
|
|
let controls;
|
|
|
|
export function initInteraction(camera, renderer) {
|
|
controls = new OrbitControls(camera, renderer.domElement);
|
|
controls.enableDamping = true;
|
|
controls.dampingFactor = 0.05;
|
|
controls.screenSpacePanning = false;
|
|
controls.minDistance = 5;
|
|
controls.maxDistance = 80;
|
|
controls.maxPolarAngle = Math.PI / 2.1;
|
|
controls.target.set(0, 0, 0);
|
|
controls.update();
|
|
|
|
renderer.domElement.addEventListener('contextmenu', e => e.preventDefault());
|
|
}
|
|
|
|
export function updateControls() {
|
|
if (controls) controls.update();
|
|
}
|
|
|
|
/**
|
|
* Dispose orbit controls (used on world teardown).
|
|
*/
|
|
export function disposeInteraction() {
|
|
if (controls) {
|
|
controls.dispose();
|
|
controls = null;
|
|
}
|
|
}
|