UNPKG

@polygonjs/polygonjs

Version:

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

39 lines (33 loc) 1.37 kB
import {NodeParamsConfig} from '../../utils/params/ParamsConfig'; import {TypedObjNode, BaseObjNodeType} from '../_Base'; import {Object3D} from 'three'; import {TransformController, TransformedObjNode} from './TransformController'; class HierarchyParamsConfig extends NodeParamsConfig {} export class HierarchyObjNode extends TypedObjNode<Object3D, HierarchyParamsConfig> { override readonly hierarchyController: HierarchyController = new HierarchyController(this); } export class HierarchyController { constructor(private node: HierarchyObjNode) {} initializeNode() { this.node.io.inputs.setCount(0, 1); this.node.io.inputs.setDependsOnInputs(false); this.node.io.outputs.setHasOneOutput(); this.node.io.inputs.add_on_set_input_hook('on_input_updated:update_parent', () => { this.on_input_updated(); }); } static on_input_updated(node: BaseObjNodeType) { const parent_object = node.root().getParentForNode(node); if (node.transformController && parent_object) { TransformController.update_node_transform_params_if_required(node as TransformedObjNode, parent_object); } if (node.io.inputs.input(0) != null) { node.root().addToParentTransform(node as HierarchyObjNode); } else { node.root().removeFromParentTransform(node as HierarchyObjNode); } } on_input_updated() { HierarchyController.on_input_updated(this.node); } }