SwizzleEditor.js 971 B

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