Skip to content

Commit b29e754

Browse files
authored
Merge pull request #17556 from sdinesh86/editor-material-browser
Editor : Basic Material browser implementation
2 parents 960e927 + 212dfb1 commit b29e754

File tree

5 files changed

+83
-7
lines changed

5 files changed

+83
-7
lines changed

editor/css/dark.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,6 @@ select {
273273

274274
.Panel {
275275
color: #888;
276-
border-top: 1px solid #222;
277276
}
278277
/* */
279278

editor/css/light.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ select {
267267

268268
.Panel {
269269
color: #888;
270-
border-top: 1px solid #ccc;
271270
}
272271
/* */
273272

editor/js/Editor.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ var Editor = function () {
5757
helperAdded: new Signal(),
5858
helperRemoved: new Signal(),
5959

60+
materialAdded: new Signal(),
6061
materialChanged: new Signal(),
62+
materialRemoved: new Signal(),
6163

6264
scriptAdded: new Signal(),
6365
scriptChanged: new Signal(),
@@ -234,6 +236,32 @@ Editor.prototype = {
234236
addMaterial: function ( material ) {
235237

236238
this.materials[ material.uuid ] = material;
239+
this.signals.materialAdded.dispatch();
240+
241+
},
242+
243+
removeMaterial: function ( material ) {
244+
245+
delete this.materials[ material.uuid ];
246+
this.signals.materialRemoved.dispatch();
247+
248+
},
249+
250+
getMaterialById ( id ) {
251+
252+
var material;
253+
var materials = Object.values( this.materials );
254+
255+
for( var i = 0; i < materials.length; i ++ ) {
256+
257+
if ( materials[i].id === id ) {
258+
material = materials[i];
259+
break;
260+
}
261+
262+
}
263+
264+
return material;
237265

238266
},
239267

editor/js/Sidebar.Project.js

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,14 @@ Sidebar.Project = function ( editor ) {
1919

2020
var container = new UI.Panel();
2121
container.setBorderTop( '0' );
22+
container.setPadding( '0' );
2223
container.setPaddingTop( '20px' );
2324

25+
var projectsettings = new UI.Panel();
26+
projectsettings.setBorderTop( '0' );
27+
28+
container.add( projectsettings );
29+
2430
// Title
2531

2632
var titleRow = new UI.Row();
@@ -33,7 +39,7 @@ Sidebar.Project = function ( editor ) {
3339
titleRow.add( new UI.Text( strings.getKey( 'sidebar/project/title' ) ).setWidth( '90px' ) );
3440
titleRow.add( title );
3541

36-
container.add( titleRow );
42+
projectsettings.add( titleRow );
3743

3844
// Editable
3945

@@ -47,7 +53,7 @@ Sidebar.Project = function ( editor ) {
4753
editableRow.add( new UI.Text( strings.getKey( 'sidebar/project/editable' ) ).setWidth( '90px' ) );
4854
editableRow.add( editable );
4955

50-
container.add( editableRow );
56+
projectsettings.add( editableRow );
5157

5258
// VR
5359

@@ -61,7 +67,7 @@ Sidebar.Project = function ( editor ) {
6167
vrRow.add( new UI.Text( strings.getKey( 'sidebar/project/vr' ) ).setWidth( '90px' ) );
6268
vrRow.add( vr );
6369

64-
container.add( vrRow );
70+
projectsettings.add( vrRow );
6571

6672
// Renderer
6773

@@ -89,7 +95,7 @@ Sidebar.Project = function ( editor ) {
8995
rendererTypeRow.add( new UI.Text( strings.getKey( 'sidebar/project/renderer' ) ).setWidth( '90px' ) );
9096
rendererTypeRow.add( rendererType );
9197

92-
container.add( rendererTypeRow );
98+
projectsettings.add( rendererTypeRow );
9399

94100
if ( config.getKey( 'project/renderer' ) !== undefined ) {
95101

@@ -119,7 +125,7 @@ Sidebar.Project = function ( editor ) {
119125
} );
120126
rendererPropertiesRow.add( rendererShadows );
121127

122-
container.add( rendererPropertiesRow );
128+
projectsettings.add( rendererPropertiesRow );
123129

124130
//
125131

@@ -165,6 +171,49 @@ Sidebar.Project = function ( editor ) {
165171

166172
createRenderer( config.getKey( 'project/renderer' ), config.getKey( 'project/renderer/antialias' ), config.getKey( 'project/renderer/shadows' ) );
167173

174+
var materialbrowserpanel = new UI.Panel();
175+
176+
var headerRow = new UI.Row();
177+
headerRow.add( new UI.Text( strings.getKey( 'sidebar/project/materialbrowser' ) ) );
178+
179+
materialbrowserpanel.add( headerRow );
180+
181+
var listbox = new UI.Listbox( );
182+
signals.materialAdded.add( function () {
183+
184+
var materials = Object.values( editor.materials );
185+
listbox.setItems( materials );
186+
187+
} );
188+
materialbrowserpanel.add( listbox );
189+
190+
var buttonsRow = new UI.Row( );
191+
buttonsRow.setPadding( '10px 0px' );
192+
materialbrowserpanel.add( buttonsRow );
193+
194+
var addButton = new UI.Button( ).setLabel( 'Add' ).setMarginRight( '5px' );
195+
addButton.onClick( function ( ) {
196+
197+
editor.addMaterial( new THREE.MeshStandardMaterial({ color: 0xffffff }) );
198+
199+
} );
200+
buttonsRow.add( addButton );
201+
202+
var assignMaterial = new UI.Button( ).setLabel( 'Assign' ).setMargin( '0px 5px' );
203+
assignMaterial.onClick( function ( ) {
204+
205+
if ( typeof editor.selected !== 'undefined' ) {
206+
var material = editor.getMaterialById( parseInt( listbox.getValue( ) ) );
207+
if ( typeof material !== 'undefined' ) {
208+
editor.execute( new SetMaterialCommand( editor, editor.selected, material ) );
209+
}
210+
}
211+
212+
} );
213+
buttonsRow.add( assignMaterial );
214+
215+
container.add( materialbrowserpanel );
216+
168217
return container;
169218

170219
};

editor/js/Strings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ var Strings = function ( config ) {
274274
'sidebar/script/remove': 'Remove',
275275

276276
'sidebar/project': 'Project',
277+
'sidebar/project/materialbrowser': 'MATERIAL BROWSER',
277278
'sidebar/project/title': 'Title',
278279
'sidebar/project/editable': 'Editable',
279280
'sidebar/project/vr': 'VR',

0 commit comments

Comments
 (0)