UNPKG

@polygonjs/polygonjs

Version:

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

50 lines (49 loc) 1.54 kB
"use strict"; import { TypedEventNode } from "./_Base"; import { Poly } from "../../Poly"; export class TypedCameraControlsEventNode extends TypedEventNode { constructor() { super(...arguments); this._controls_by_viewer = /* @__PURE__ */ new Map(); } async applyControls(camera, viewer) { const canvas = viewer.canvas(); if (!canvas) { return; } const ensureParamsAreComputed = async () => { let promises; for (const param of this.params.all) { if (param.isDirty() && !param.parentParam()) { promises = promises || []; promises.push(param.compute()); } } if (promises) { await Promise.all(promises); } }; await ensureParamsAreComputed(); const controls = await this.createControlsInstance(camera, canvas); const currentControls = this._controls_by_viewer.get(viewer); if (currentControls) { currentControls.dispose(); } this._controls_by_viewer.set(viewer, controls); const performance = Poly.performance.performanceManager(); const timestamp = performance.now(); controls.name = `${this.path()}:${camera.name}:${timestamp}:${this.controls_id()}`; await this.params.evalAll(); this.setupControls(controls); return controls; } controls_id() { return JSON.stringify(this.params.all.map((p) => p.valueSerialized())); } cook() { this._controls_by_viewer.forEach((controls) => { this.setupControls(controls); }); this.cookController.endCook(); } }