Sidebar.Material.Program.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { UIButton, UIRow, UIText } from './libs/ui.js';
  2. function SidebarMaterialProgram( editor, property ) {
  3. const signals = editor.signals;
  4. const strings = editor.strings;
  5. let object = null;
  6. let material = null;
  7. const container = new UIRow();
  8. container.add( new UIText( strings.getKey( 'sidebar/material/program' ) ).setWidth( '90px' ) );
  9. const programInfo = new UIButton( strings.getKey( 'sidebar/material/info' ) );
  10. programInfo.setMarginRight( '4px' );
  11. programInfo.onClick( function () {
  12. signals.editScript.dispatch( object, 'programInfo' );
  13. } );
  14. container.add( programInfo );
  15. const programVertex = new UIButton( strings.getKey( 'sidebar/material/vertex' ) );
  16. programVertex.setMarginRight( '4px' );
  17. programVertex.onClick( function () {
  18. signals.editScript.dispatch( object, 'vertexShader' );
  19. } );
  20. container.add( programVertex );
  21. const programFragment = new UIButton( strings.getKey( 'sidebar/material/fragment' ) );
  22. programFragment.setMarginRight( '4px' );
  23. programFragment.onClick( function () {
  24. signals.editScript.dispatch( object, 'fragmentShader' );
  25. } );
  26. container.add( programFragment );
  27. function update() {
  28. if ( object === null ) return;
  29. if ( object.material === undefined ) return;
  30. material = object.material;
  31. if ( property in material ) {
  32. container.setDisplay( '' );
  33. } else {
  34. container.setDisplay( 'none' );
  35. }
  36. }
  37. //
  38. signals.objectSelected.add( function ( selected ) {
  39. object = selected;
  40. update();
  41. } );
  42. signals.materialChanged.add( update );
  43. return container;
  44. }
  45. export { SidebarMaterialProgram };