polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
39 lines (32 loc) • 909 B
text/typescript
import {BaseNodeType} from '../../nodes/_Base';
import {CoreGraphNodeId} from '../../../core/graph/CoreGraph';
type Callback = (value: void) => void;
export class CookController {
private _cooking_nodes_by_id: Map<CoreGraphNodeId, BaseNodeType> = new Map();
private _resolves: Callback[] = [];
constructor() {}
add_node(node: BaseNodeType) {
this._cooking_nodes_by_id.set(node.graphNodeId(), node);
}
remove_node(node: BaseNodeType) {
this._cooking_nodes_by_id.delete(node.graphNodeId());
if (this._cooking_nodes_by_id.size == 0) {
this.flush();
}
}
private flush() {
let callback: Callback | undefined;
while ((callback = this._resolves.pop())) {
callback();
}
}
async waitForCooksCompleted(): Promise<void> {
if (this._cooking_nodes_by_id.size == 0) {
return;
} else {
return new Promise((resolve, reject) => {
this._resolves.push(resolve);
});
}
}
}