JoinEditor.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { LabelElement } from 'flow';
  2. import { BaseNodeEditor } from '../BaseNodeEditor.js';
  3. import { JoinNode, UniformNode } from 'three/webgpu';
  4. import { float } from 'three/tsl';
  5. import { setInputAestheticsFromType } from '../DataTypeLib.js';
  6. const NULL_VALUE = new UniformNode( 0 );
  7. export class JoinEditor extends BaseNodeEditor {
  8. constructor() {
  9. const node = new JoinNode();
  10. super( 'Join', node, 175 );
  11. const update = () => {
  12. const values = [
  13. xElement.getLinkedObject(),
  14. yElement.getLinkedObject(),
  15. zElement.getLinkedObject(),
  16. wElement.getLinkedObject()
  17. ];
  18. let length = 1;
  19. if ( values[ 3 ] !== null ) length = 4;
  20. else if ( values[ 2 ] !== null ) length = 3;
  21. else if ( values[ 1 ] !== null ) length = 2;
  22. const nodes = [];
  23. for ( let i = 0; i < length; i ++ ) {
  24. nodes.push( float( values[ i ] || NULL_VALUE ) );
  25. }
  26. node.nodes = nodes;
  27. this.invalidate();
  28. this.title.setOutput( length );
  29. };
  30. const xElement = setInputAestheticsFromType( new LabelElement( 'x | r' ), 'Number' ).onConnect( update );
  31. const yElement = setInputAestheticsFromType( new LabelElement( 'y | g' ), 'Number' ).onConnect( update );
  32. const zElement = setInputAestheticsFromType( new LabelElement( 'z | b' ), 'Number' ).onConnect( update );
  33. const wElement = setInputAestheticsFromType( new LabelElement( 'w | a' ), 'Number' ).onConnect( update );
  34. this.add( xElement )
  35. .add( yElement )
  36. .add( zElement )
  37. .add( wElement );
  38. update();
  39. }
  40. }
粤ICP备19079148号