UNPKG

polygonjs-engine

Version:

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

39 lines (33 loc) 1.4 kB
import {NodeParamsConfig} from '../../utils/params/ParamsConfig'; import {TypedObjNode, BaseObjNodeType} from '../_Base'; import {Object3D} from 'three/src/core/Object3D'; import {TransformController, TransformedObjNode} from './TransformController'; class HierarchyParamsConfig extends NodeParamsConfig {} export class HierarchyObjNode extends TypedObjNode<Object3D, HierarchyParamsConfig> { readonly hierarchy_controller: HierarchyController = new HierarchyController(this); } export class HierarchyController { constructor(private node: HierarchyObjNode) {} initializeNode() { this.node.io.inputs.setCount(0, 1); this.node.io.inputs.set_depends_on_inputs(false); this.node.io.outputs.set_has_one_output(); 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().get_parent_for_node(node); if (node.transform_controller && parent_object) { TransformController.update_node_transform_params_if_required(node as TransformedObjNode, parent_object); } if (node.io.inputs.input(0) != null) { node.root().add_to_parent_transform(node as HierarchyObjNode); } else { node.root().remove_from_parent_transform(node as HierarchyObjNode); } } on_input_updated() { HierarchyController.on_input_updated(this.node); } }