UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

85 lines (84 loc) 2.33 kB
"use strict"; import { EventDispatcher } from "three"; export var CameraControlsEvent = /* @__PURE__ */ ((CameraControlsEvent2) => { CameraControlsEvent2["start"] = "start"; CameraControlsEvent2["end"] = "end"; return CameraControlsEvent2; })(CameraControlsEvent || {}); export const CAMERA_CONTROLS_EVENTS = ["start" /* start */, "end" /* end */]; const START_EVENT = { type: "start" /* start */ }; const END_EVENT = { type: "end" /* end */ }; export class ViewerControlsController extends EventDispatcher { constructor(viewer) { super(); this.viewer = viewer; this._active = false; this._mounted = false; this._boundEventHandler = { ["start" /* start */]: () => this.dispatchEvent(START_EVENT), ["end" /* end */]: () => this.dispatchEvent(END_EVENT) }; } controls() { return this._controls; } mount() { if (this._mounted) { return; } this._mounted = true; const controlsNode = this.viewer.controlsNode(); const camera = this.viewer.camera(); if (!(controlsNode && camera)) { return; } controlsNode.applyControls(camera, this.viewer).then((controls) => { this._controls = controls; this._updateControlsFunc = controls ? (delta) => controls.update(delta) : void 0; for (const eventName of CAMERA_CONTROLS_EVENTS) { controls.addEventListener(eventName, this._boundEventHandler[eventName]); } if (!this._mounted) { this._disposeControls(); } }); } unmount() { if (!this._mounted) { return; } this._mounted = false; this._disposeControls(); } _disposeControls() { if (this._controls) { for (const eventName of CAMERA_CONTROLS_EVENTS) { this._controls.removeEventListener(eventName, this._boundEventHandler[eventName]); } this._controls.dispose(); } this._updateControlsFunc = void 0; } update(delta) { if (this._updateControlsFunc) { this._updateControlsFunc(delta); } } setActive(active) { if (active) { this.mount(); } else { this.unmount(); } } setTarget(target) { if (!this._controls) { return; } const orbitControls = this._controls; if (!orbitControls.target) { return; } orbitControls.target.copy(target); } }