| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- import { UIPanel, UIText, UITabbedPanel, UIListbox, UIButton } from './libs/ui.js';
- import { SetGeometryCommand } from './commands/SetGeometryCommand.js';
- import { SetMaterialCommand } from './commands/SetMaterialCommand.js';
- function SidebarProjectResources( editor ) {
- const signals = editor.signals;
- const strings = editor.strings;
- const container = new UITabbedPanel();
- // Geometries
- const geometriesTab = new UIPanel();
- geometriesTab.dom.style.borderTop = 'none';
- const geometriesListbox = new UIListbox();
- geometriesListbox.dom.style.height = '140px';
- geometriesListbox.dom.style.resize = 'vertical';
- geometriesListbox.dom.style.marginBottom = '10px';
- geometriesTab.add( geometriesListbox );
- const geometriesAssign = new UIButton( strings.getKey( 'sidebar/project/Assign' ) );
- geometriesTab.add( geometriesAssign );
- const geometriesInfo = new UIText();
- geometriesInfo.dom.style.float = 'right';
- geometriesTab.add( geometriesInfo );
- geometriesAssign.onClick( function () {
- const selectedObject = editor.selected;
- if ( selectedObject !== null && selectedObject.geometry !== undefined ) {
- const selectedId = geometriesListbox.getValue();
- const geometries = Object.values( editor.geometries );
- const geometry = geometries.find( g => g.id === parseInt( selectedId ) );
- if ( geometry !== undefined ) {
- editor.execute( new SetGeometryCommand( editor, selectedObject, geometry ) );
- }
- }
- } );
- container.addTab( 'geometries', strings.getKey( 'sidebar/project/geometries' ), geometriesTab );
- // Materials
- const materialsTab = new UIPanel();
- materialsTab.dom.style.borderTop = 'none';
- const materialsListbox = new UIListbox();
- materialsListbox.dom.style.height = '140px';
- materialsListbox.dom.style.resize = 'vertical';
- materialsListbox.dom.style.marginBottom = '10px';
- materialsTab.add( materialsListbox );
- const materialsAssign = new UIButton( strings.getKey( 'sidebar/project/Assign' ) );
- materialsTab.add( materialsAssign );
- const materialsInfo = new UIText();
- materialsInfo.dom.style.float = 'right';
- materialsTab.add( materialsInfo );
- materialsAssign.onClick( function () {
- const selectedObject = editor.selected;
- if ( selectedObject !== null && selectedObject.material !== undefined ) {
- const selectedId = materialsListbox.getValue();
- const materials = Object.values( editor.materials );
- const material = materials.find( m => m.id === parseInt( selectedId ) );
- if ( material !== undefined ) {
- editor.execute( new SetMaterialCommand( editor, selectedObject, material ) );
- }
- }
- } );
- container.addTab( 'materials', strings.getKey( 'sidebar/project/materials' ), materialsTab );
- // Textures
- const texturesTab = new UIPanel();
- texturesTab.dom.style.borderTop = 'none';
- const texturesListbox = new UIListbox();
- texturesListbox.dom.style.height = '140px';
- texturesListbox.dom.style.resize = 'vertical';
- texturesListbox.dom.style.marginBottom = '10px';
- texturesTab.add( texturesListbox );
- const texturesInfo = new UIText();
- texturesInfo.dom.style.float = 'right';
- texturesTab.add( texturesInfo );
- container.addTab( 'textures', strings.getKey( 'sidebar/project/textures' ), texturesTab );
- container.select( 'geometries' );
- // Signals
- function refreshGeometriesUI() {
- const geometries = Object.values( editor.geometries );
- geometriesListbox.setItems( geometries );
- geometriesInfo.setValue( geometries.length + ' ' + strings.getKey( 'sidebar/project/geometries' ).toLowerCase() );
- }
- function refreshMaterialsUI() {
- const materials = Object.values( editor.materials );
- materialsListbox.setItems( materials );
- materialsInfo.setValue( materials.length + ' ' + strings.getKey( 'sidebar/project/materials' ).toLowerCase() );
- }
- function refreshTexturesUI() {
- const textures = [];
- const texturesUsed = new Set();
- const materials = Object.values( editor.materials );
- for ( const material of materials ) {
- for ( const property in material ) {
- const value = material[ property ];
- if ( value !== null && value !== undefined && value.isTexture === true ) {
- if ( texturesUsed.has( value.uuid ) === false ) {
- textures.push( value );
- texturesUsed.add( value.uuid );
- }
- }
- }
- }
- texturesListbox.setItems( textures );
- texturesInfo.setValue( textures.length + ' ' + strings.getKey( 'sidebar/project/textures' ).toLowerCase() );
- }
- function refreshUI() {
- refreshGeometriesUI();
- refreshMaterialsUI();
- refreshTexturesUI();
- }
- let timeout;
- function refreshUIDelayed() {
- clearTimeout( timeout );
- timeout = setTimeout( refreshUI, 100 );
- }
- signals.editorCleared.add( refreshUIDelayed );
- signals.sceneGraphChanged.add( refreshUIDelayed );
- signals.geometryChanged.add( refreshUIDelayed );
- signals.materialAdded.add( refreshUIDelayed );
- signals.materialChanged.add( refreshUIDelayed );
- signals.materialRemoved.add( refreshUIDelayed );
- signals.objectSelected.add( function ( object ) {
- if ( object !== null ) {
- const geometries = Object.values( editor.geometries );
- const materials = Object.values( editor.materials );
- if ( object.geometry !== undefined ) {
- const geometryIndex = geometries.indexOf( object.geometry );
- geometriesListbox.selectIndex( geometryIndex );
- }
- if ( object.material !== undefined ) {
- const material = Array.isArray( object.material ) ? object.material[ 0 ] : object.material;
- const materialIndex = materials.indexOf( material );
- materialsListbox.selectIndex( materialIndex );
- }
- } else {
- geometriesListbox.selectIndex( - 1 );
- materialsListbox.selectIndex( - 1 );
- }
- } );
- return container;
- }
- export { SidebarProjectResources };
|