@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
76 lines (75 loc) • 2.12 kB
JavaScript
"use strict";
import { Poly } from "../../Poly";
import { CoreGraphNode } from "../../../core/graph/CoreGraphNode";
export class ViewersRegister {
constructor(_scene) {
this._scene = _scene;
this._viewersById = /* @__PURE__ */ new Map();
}
registerViewer(viewer) {
this._viewersById.set(viewer.id(), viewer);
this._updateCache();
}
unregisterViewer(viewer) {
this._viewersById.delete(viewer.id());
this._updateCache();
}
traverseViewers(callback) {
this._viewersById.forEach(callback);
}
viewer(options) {
const createViewerOptions = {
camera: options.camera,
canvas: options.canvas,
scene: this._scene
};
return Poly.camerasRegister.createViewer(createViewerOptions);
}
firstViewer() {
return this._firstViewer;
}
markViewerAsRendered(viewer) {
this._lastRenderedViewer = viewer;
}
lastRenderedViewer() {
return this._lastRenderedViewer;
}
_updateCache() {
this._firstViewer = void 0;
this._viewersById.forEach((viewer) => {
this._firstViewer = this._firstViewer || viewer;
});
}
graphNode() {
return this._graphNode = this._graphNode || this._createGraphNode();
}
_createGraphNode() {
const coreGraphNode = new CoreGraphNode(this._scene, "SceneViewersRegister");
return coreGraphNode;
}
// private _viewerWithResizeRequired: Set<string> = new Set();
markViewerAsSizeUpdated(viewer) {
var _a;
if (!this._viewersById.has(viewer.id())) {
return;
}
(_a = this._graphNode) == null ? void 0 : _a.setDirty();
}
// markViewerAsResizeCompleted(viewer: BaseViewerType) {
// if (!this._viewersById.has(viewer.id())) {
// return;
// }
// this._viewerWithResizeRequired.delete(viewer.id());
// }
// isViewerResizeRequired(viewer: BaseViewerType) {
// return this._viewerWithResizeRequired.has(viewer.id());
// }
// updateViewersSize() {
// this._viewerWithResizeRequired.forEach((viewerId) => {
// const viewer = this._viewersById.get(viewerId);
// if (viewer) {
// viewer.updateSize();
// }
// });
// }
}