UNPKG

polygonjs-engine

Version:

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

57 lines (51 loc) 1.5 kB
import {TypedAnimNode} from './_Base'; import {CopyStamp} from './utils/CopyStamp'; import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; import {TimelineBuilder} from '../../../core/animation/TimelineBuilder'; class CopyAnimParamsConfig extends NodeParamsConfig { count = ParamConfig.INTEGER(1, { range: [1, 20], rangeLocked: [true, false], }); } const ParamsConfig = new CopyAnimParamsConfig(); export class CopyAnimNode extends TypedAnimNode<CopyAnimParamsConfig> { params_config = ParamsConfig; static type() { return 'copy'; } private _stamp_node!: CopyStamp; initializeNode() { this.io.inputs.setCount(1); } async cook(input_contents: TimelineBuilder[]) { const builder = new TimelineBuilder(); for (let i = 0; i < this.pv.count; i++) { this.stampNode().set_global_index(i); const container = await this.container_controller.requestInputContainer(0); if (container) { const stamped_builder = container.coreContentCloned(); if (stamped_builder) { builder.add_timeline_builder(stamped_builder); } } } this.set_timeline_builder(builder); } // // // STAMP // // stamp_value(attrib_name?: string) { return this.stampNode().value(attrib_name); } stampNode() { return (this._stamp_node = this._stamp_node || this.create_stamp_node()); } private create_stamp_node() { const stamp_node = new CopyStamp(this.scene()); this.dirtyController.set_forbidden_trigger_nodes([stamp_node]); return stamp_node; } }