@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
50 lines (49 loc) • 1.54 kB
JavaScript
;
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();
}
}