UNPKG

@polygonjs/polygonjs

Version:

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

62 lines (57 loc) 1.79 kB
/** * Fetches the previous frame of a parent solver node. * * @remarks * Can only be created inside a solver SOP. * */ import {NetworkNodeType} from './../../poly/NodeContext'; import {TypedSopNode} from './_Base'; import {NodeParamsConfig} from '../utils/params/ParamsConfig'; import type {SolverSopNode} from './Solver'; // import {CoreGraphNode} from '../../../core/graph/CoreGraphNode'; class SolverPreviousFrameSopParamsConfig extends NodeParamsConfig {} const ParamsConfig = new SolverPreviousFrameSopParamsConfig(); export class SolverPreviousFrameSopNode extends TypedSopNode<SolverPreviousFrameSopParamsConfig> { override paramsConfig = ParamsConfig; static override type() { return 'solverPreviousFrame'; } override cook() { const solverNode = this._solverNode(); if (!solverNode) { this.states.error.set(`subnet input has no parent`); this.cookController.endCook(); return; } this._createSolverNodeDependencyIfRequired(); const previousFrameCoreGroup = solverNode.previousFrameCoreGroup(); if (previousFrameCoreGroup) { this.setObjects(previousFrameCoreGroup.allObjects()); } else { this.setObjects([]); } } private _solverNodeDependencyCreated = false; private _createSolverNodeDependencyIfRequired() { if (this._solverNodeDependencyCreated) { return; } const solverNode = this._solverNode(); if (!solverNode) { return; } this.addGraphInput(solverNode.iterationStamp()); this._solverNodeDependencyCreated = true; } private _solverNode() { const solverNode = this.parentController.findParent((parent) => parent.type() == NetworkNodeType.SOLVER) as | SolverSopNode | undefined; if (!solverNode) { this.states.error.set('parent is not a solver node'); return; } return solverNode; } }