UNPKG

@polygonjs/polygonjs

Version:

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

86 lines (81 loc) 3.47 kB
import { JsConnectionPointType, ARRAY_JS_CONNECTION_TYPES_SET, JsConnectionPointTypeFromArrayTypeMap, JsConnectionPointTypeArray, } from '../utils/io/connections/Js'; import {TypedJsNode} from './_Base'; import {NodeParamsConfig} from '../utils/params/ParamsConfig'; import {JsLinesCollectionController} from './code/utils/JsLinesCollectionController'; import {TypeAssert} from '../../poly/Assert'; export const ALLOWED_INPUT_TYPES = ARRAY_JS_CONNECTION_TYPES_SET; export class BaseArrayElementJsNode<T extends NodeParamsConfig> extends TypedJsNode<T> { override 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)); } protected _expectedInputTypes(): JsConnectionPointType[] { const firstType = this.io.connection_points.first_input_connection_type(); const type = firstType != null && ALLOWED_INPUT_TYPES.has(firstType as JsConnectionPointTypeArray) ? (firstType as JsConnectionPointTypeArray) : JsConnectionPointType.FLOAT_ARRAY; return [type]; } protected _expectedInputName(index: number): string { const type = this._expectedInputTypes()[0]; return [`${type}`][index]; } protected _expectedOutputName(index: number): string { const type = this._expectedOutputTypes()[0]; return `${type}`; } protected _expectedOutputTypes() { const firstType = this._expectedInputTypes()[0]; const outputType = JsConnectionPointTypeFromArrayTypeMap[firstType] || JsConnectionPointType.FLOAT; return [outputType]; } override setLines(linesController: JsLinesCollectionController) { const firstType = this._expectedInputTypes()[0] as JsConnectionPointTypeArray; 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); } protected _setLinesAsPrimitive(linesController: JsLinesCollectionController) {} protected _setLinesAsVector(linesController: JsLinesCollectionController) {} // private _setLinesAsObject(linesController: JsLinesCollectionController) { // console.warn('not implemented'); // } // private _setLinesAsIntersection(linesController: JsLinesCollectionController) { // console.warn('not implemented'); // } // private _setLinesAsTexture(linesController: JsLinesCollectionController) { // console.warn('not implemented'); // } }