SwizzleEditor.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { LabelElement } from 'flow';
  2. import { BaseNodeEditor } from '../BaseNodeEditor.js';
  3. import { createElementFromJSON } from '../NodeEditorUtils.js';
  4. import { split, float } from 'three/tsl';
  5. import { setInputAestheticsFromType } from '../DataTypeLib.js';
  6. export class SwizzleEditor extends BaseNodeEditor {
  7. constructor() {
  8. const node = split( float(), 'x' );
  9. super( 'Swizzle', node, 175 );
  10. const inputElement = setInputAestheticsFromType( new LabelElement( 'Input' ), 'node' ).onConnect( () => {
  11. node.node = inputElement.getLinkedObject() || float();
  12. } );
  13. this.add( inputElement );
  14. //
  15. const { element: componentsElement } = createElementFromJSON( {
  16. inputType: 'String',
  17. allows: 'xyzwrgba',
  18. transform: 'lowercase',
  19. options: [ 'x', 'y', 'z', 'w', 'r', 'g', 'b', 'a' ],
  20. maxLength: 4
  21. } );
  22. componentsElement.addEventListener( 'changeInput', () => {
  23. const string = componentsElement.value.value;
  24. node.components = string || 'x';
  25. this.invalidate();
  26. } );
  27. this.add( componentsElement );
  28. }
  29. }