UNPKG

@polygonjs/polygonjs

Version:

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

79 lines (78 loc) 3.09 kB
"use strict"; import { JsConnectionPointType, ARRAY_JS_CONNECTION_TYPES_SET, JsConnectionPointTypeFromArrayTypeMap } from "../utils/io/connections/Js"; import { TypedJsNode } from "./_Base"; import { TypeAssert } from "../../poly/Assert"; export const ALLOWED_INPUT_TYPES = ARRAY_JS_CONNECTION_TYPES_SET; export class BaseArrayElementJsNode extends TypedJsNode { 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_input_name_function(this._expectedInputName.bind(this)); this.io.connection_points.set_output_name_function(this._expectedOutputName.bind(this)); } _expectedInputTypes() { const firstType = this.io.connection_points.first_input_connection_type(); const type = firstType != null && ALLOWED_INPUT_TYPES.has(firstType) ? firstType : JsConnectionPointType.FLOAT_ARRAY; return [type]; } _expectedInputName(index) { const type = this._expectedInputTypes()[0]; return [`${type}`][index]; } _expectedOutputName(index) { const type = this._expectedOutputTypes()[0]; return `${type}`; } _expectedOutputTypes() { const firstType = this._expectedInputTypes()[0]; const outputType = JsConnectionPointTypeFromArrayTypeMap[firstType] || JsConnectionPointType.FLOAT; return [outputType]; } setLines(linesController) { const firstType = this._expectedInputTypes()[0]; switch (firstType) { case JsConnectionPointType.BOOLEAN_ARRAY: case JsConnectionPointType.FLOAT_ARRAY: case JsConnectionPointType.INT_ARRAY: case JsConnectionPointType.STRING_ARRAY: { return this._setLinesAsPrimitive(linesController); } case JsConnectionPointType.COLOR_ARRAY: case JsConnectionPointType.MATRIX4_ARRAY: case JsConnectionPointType.QUATERNION_ARRAY: case JsConnectionPointType.VECTOR2_ARRAY: case JsConnectionPointType.VECTOR3_ARRAY: case JsConnectionPointType.VECTOR4_ARRAY: { return this._setLinesAsVector(linesController); } case JsConnectionPointType.OBJECT_3D_ARRAY: { return this._setLinesAsPrimitive(linesController); } case JsConnectionPointType.INTERSECTION_ARRAY: { return this._setLinesAsPrimitive(linesController); } case JsConnectionPointType.TEXTURE_ARRAY: { return this._setLinesAsPrimitive(linesController); } } TypeAssert.unreachable(firstType); } _setLinesAsPrimitive(linesController) { } _setLinesAsVector(linesController) { } // private _setLinesAsObject(linesController: JsLinesCollectionController) { // console.warn('not implemented'); // } // private _setLinesAsIntersection(linesController: JsLinesCollectionController) { // console.warn('not implemented'); // } // private _setLinesAsTexture(linesController: JsLinesCollectionController) { // console.warn('not implemented'); // } }