UNPKG

@polygonjs/polygonjs

Version:

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

101 lines (100 loc) 4.03 kB
"use strict"; import { TypedJsNode } from "./_Base"; import { NodeParamsConfig } from "../utils/params/ParamsConfig"; import { JsConnectionPointType } from "../utils/io/connections/Js"; import { inputObject3D, setObject3DOutputLine } from "./_BaseObject3D"; import { Poly } from "../../Poly"; export const SetGeometryInstanceTransformsInputName = { [JsConnectionPointType.TRIGGER]: JsConnectionPointType.TRIGGER, [JsConnectionPointType.OBJECT_3D]: JsConnectionPointType.OBJECT_3D, position: "position", quaternion: "quaternion", scale: "scale", mult: "mult", lerp: "lerp", attributeNeedsUpdate: "attributeNeedsUpdate" }; const INPUT_NAMES = [ SetGeometryInstanceTransformsInputName.trigger, SetGeometryInstanceTransformsInputName.Object3D, SetGeometryInstanceTransformsInputName.position, SetGeometryInstanceTransformsInputName.quaternion, SetGeometryInstanceTransformsInputName.scale, SetGeometryInstanceTransformsInputName.mult, SetGeometryInstanceTransformsInputName.lerp, SetGeometryInstanceTransformsInputName.attributeNeedsUpdate ]; const DefaultValues = { [SetGeometryInstanceTransformsInputName.lerp]: 1, [SetGeometryInstanceTransformsInputName.attributeNeedsUpdate]: true }; class SetGeometryInstanceTransformsJsParamsConfig extends NodeParamsConfig { } const ParamsConfig = new SetGeometryInstanceTransformsJsParamsConfig(); export class SetGeometryInstanceTransformsJsNode extends TypedJsNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "setGeometryInstanceTransforms"; } initializeNode() { super.initializeNode(); this.io.connection_points.set_expected_input_types_function(this.expectedInputTypes.bind(this)); this.io.connection_points.set_expected_output_types_function(this._expectedOutputTypes.bind(this)); this.io.connection_points.set_output_name_function( (i) => [JsConnectionPointType.TRIGGER, JsConnectionPointType.OBJECT_3D][i] ); this.io.connection_points.set_input_name_function(this._expectedInputName.bind(this)); } paramDefaultValue(name) { return DefaultValues[name]; } expectedInputTypes() { return [ JsConnectionPointType.TRIGGER, JsConnectionPointType.OBJECT_3D, JsConnectionPointType.VECTOR3_ARRAY, JsConnectionPointType.QUATERNION_ARRAY, JsConnectionPointType.VECTOR3_ARRAY, JsConnectionPointType.FLOAT_ARRAY, JsConnectionPointType.FLOAT, JsConnectionPointType.BOOLEAN ]; } _expectedOutputTypes() { return [JsConnectionPointType.TRIGGER, JsConnectionPointType.OBJECT_3D]; } _expectedInputName(index) { return INPUT_NAMES[index]; } setLines(linesController) { setObject3DOutputLine(this, linesController); } setTriggerableLines(shadersCollectionController) { const object3D = inputObject3D(this, shadersCollectionController); const positions = this.variableForInput( shadersCollectionController, SetGeometryInstanceTransformsInputName.position ); const quaternions = this.variableForInput( shadersCollectionController, SetGeometryInstanceTransformsInputName.quaternion ); const scales = this.variableForInput(shadersCollectionController, SetGeometryInstanceTransformsInputName.scale); const mult = this.variableForInput(shadersCollectionController, SetGeometryInstanceTransformsInputName.mult); const lerp = this.variableForInput(shadersCollectionController, SetGeometryInstanceTransformsInputName.lerp); const attributeNeedsUpdate = this.variableForInput( shadersCollectionController, SetGeometryInstanceTransformsInputName.attributeNeedsUpdate ); const func = Poly.namedFunctionsRegister.getFunction( "setGeometryInstanceTransforms", this, shadersCollectionController ); const bodyLine = func.asString(object3D, positions, quaternions, scales, mult, lerp, attributeNeedsUpdate); shadersCollectionController.addTriggerableLines(this, [bodyLine]); } }