Sidebar.Material.Program.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 materialSlot = null;
  7. let material = null;
  8. const container = new UIRow();
  9. container.add( new UIText( strings.getKey( 'sidebar/material/program' ) ).setClass( 'Label' ) );
  10. const programInfo = new UIButton( strings.getKey( 'sidebar/material/info' ) );
  11. programInfo.setMarginRight( '4px' );
  12. programInfo.onClick( function () {
  13. signals.editScript.dispatch( object, 'programInfo' );
  14. } );
  15. container.add( programInfo );
  16. const programVertex = new UIButton( strings.getKey( 'sidebar/material/vertex' ) );
  17. programVertex.setMarginRight( '4px' );
  18. programVertex.onClick( function () {
  19. signals.editScript.dispatch( object, 'vertexShader' );
  20. } );
  21. container.add( programVertex );
  22. const programFragment = new UIButton( strings.getKey( 'sidebar/material/fragment' ) );
  23. programFragment.setMarginRight( '4px' );
  24. programFragment.onClick( function () {
  25. signals.editScript.dispatch( object, 'fragmentShader' );
  26. } );
  27. container.add( programFragment );
  28. function update( currentObject, currentMaterialSlot = 0 ) {
  29. object = currentObject;
  30. materialSlot = currentMaterialSlot;
  31. if ( object === null ) return;
  32. if ( object.material === undefined ) return;
  33. material = editor.getObjectMaterial( object, materialSlot );
  34. if ( property in material ) {
  35. container.setDisplay( '' );
  36. } else {
  37. container.setDisplay( 'none' );
  38. }
  39. }
  40. //
  41. signals.objectSelected.add( update );
  42. signals.materialChanged.add( update );
  43. return container;
  44. }
  45. export { SidebarMaterialProgram };