12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import { LabelElement } from 'flow';
- import { Color, Vector2, Vector3, Vector4 } from 'three';
- import * as Nodes from 'three/nodes';
- import { uniform } from 'three/nodes';
- import { BaseNodeEditor } from '../BaseNodeEditor.js';
- import { createInputLib } from '../NodeEditorUtils.js';
- import { setInputAestheticsFromType } from '../DataTypeLib.js';
- const typeToValue = {
- 'color': Color,
- 'vec2': Vector2,
- 'vec3': Vector3,
- 'vec4': Vector4
- };
- const createElementFromProperty = ( node, property ) => {
- const nodeType = property.nodeType;
- const defaultValue = uniform( typeToValue[ nodeType ] ? new typeToValue[ nodeType ]() : 0 );
- let label = property.label;
- if ( label === undefined ) {
- label = property.name;
- if ( label.endsWith( 'Node' ) === true ) {
- label = label.slice( 0, label.length - 4 );
- }
- }
- node[ property.name ] = defaultValue;
- const element = setInputAestheticsFromType( new LabelElement( label ), nodeType );
- if ( createInputLib[ nodeType ] !== undefined ) {
- createInputLib[ nodeType ]( defaultValue, element );
- }
- element.onConnect( ( elmt ) => {
- elmt.setEnabledInputs( ! elmt.getLinkedObject() );
- node[ property.name ] = elmt.getLinkedObject() || defaultValue;
- } );
- return element;
- };
- export class CustomNodeEditor extends BaseNodeEditor {
- constructor( settings ) {
- const shaderNode = Nodes[ settings.shaderNode ];
- let node = null;
- const elements = [];
- if ( settings.properties !== undefined ) {
- node = shaderNode();
- for ( const property of settings.properties ) {
- elements.push( createElementFromProperty( node, property ) );
- }
- } else {
- node = shaderNode;
- }
- node.nodeType = node.nodeType || settings.nodeType;
- super( settings.name, node, 300 );
- this.title.setIcon( 'ti ti-' + settings.icon );
- for ( const element of elements ) {
- this.add( element );
- }
- }
- }
|