source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/editor/js/Sidebar.Scene.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 4.5 KB
Line 
1Sidebar.Scene = function ( editor ) {
2
3 var signals = editor.signals;
4
5 var container = new UI.Panel();
6
7 container.add( new UI.Text( 'SCENE' ) );
8 container.add( new UI.Break(), new UI.Break() );
9
10 var outliner = new UI.FancySelect().setId( 'outliner' );
11 outliner.onChange( function () {
12
13 editor.selectById( parseInt( outliner.getValue() ) );
14
15 } );
16 container.add( outliner );
17 container.add( new UI.Break() );
18
19 // fog
20
21 var updateFogParameters = function () {
22
23 var near = fogNear.getValue();
24 var far = fogFar.getValue();
25 var density = fogDensity.getValue();
26
27 signals.fogParametersChanged.dispatch( near, far, density );
28
29 };
30
31 var fogTypeRow = new UI.Panel();
32 var fogType = new UI.Select().setOptions( {
33
34 'None': 'None',
35 'Fog': 'Linear',
36 'FogExp2': 'Exponential'
37
38 } ).setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' )
39 fogType.onChange( function () {
40
41 var type = fogType.getValue();
42 signals.fogTypeChanged.dispatch( type );
43
44 refreshFogUI();
45
46 } );
47
48 fogTypeRow.add( new UI.Text( 'Fog' ).setWidth( '90px' ) );
49 fogTypeRow.add( fogType );
50
51 container.add( fogTypeRow );
52
53 // fog color
54
55 var fogColorRow = new UI.Panel();
56 fogColorRow.setDisplay( 'none' );
57
58 var fogColor = new UI.Color().setValue( '#aaaaaa' )
59 fogColor.onChange( function () {
60
61 signals.fogColorChanged.dispatch( fogColor.getHexValue() );
62
63 } );
64
65 fogColorRow.add( new UI.Text( 'Fog color' ).setWidth( '90px' ) );
66 fogColorRow.add( fogColor );
67
68 container.add( fogColorRow );
69
70 // fog near
71
72 var fogNearRow = new UI.Panel();
73 fogNearRow.setDisplay( 'none' );
74
75 var fogNear = new UI.Number( 1 ).setWidth( '60px' ).setRange( 0, Infinity ).onChange( updateFogParameters );
76
77 fogNearRow.add( new UI.Text( 'Fog near' ).setWidth( '90px' ) );
78 fogNearRow.add( fogNear );
79
80 container.add( fogNearRow );
81
82 var fogFarRow = new UI.Panel();
83 fogFarRow.setDisplay( 'none' );
84
85 // fog far
86
87 var fogFar = new UI.Number( 5000 ).setWidth( '60px' ).setRange( 0, Infinity ).onChange( updateFogParameters );
88
89 fogFarRow.add( new UI.Text( 'Fog far' ).setWidth( '90px' ) );
90 fogFarRow.add( fogFar );
91
92 container.add( fogFarRow );
93
94 // fog density
95
96 var fogDensityRow = new UI.Panel();
97 fogDensityRow.setDisplay( 'none' );
98
99 var fogDensity = new UI.Number( 0.00025 ).setWidth( '60px' ).setRange( 0, 0.1 ).setPrecision( 5 ).onChange( updateFogParameters );
100
101 fogDensityRow.add( new UI.Text( 'Fog density' ).setWidth( '90px' ) );
102 fogDensityRow.add( fogDensity );
103
104 container.add( fogDensityRow );
105
106 //
107
108 var refreshFogUI = function () {
109
110 var type = fogType.getValue();
111
112 fogColorRow.setDisplay( type === 'None' ? 'none' : '' );
113 fogNearRow.setDisplay( type === 'Fog' ? '' : 'none' );
114 fogFarRow.setDisplay( type === 'Fog' ? '' : 'none' );
115 fogDensityRow.setDisplay( type === 'FogExp2' ? '' : 'none' );
116
117 };
118
119 // events
120
121 signals.sceneGraphChanged.add( function () {
122
123 var scene = editor.scene;
124 var sceneType = editor.getObjectType( scene );
125
126 var options = {};
127
128 options[ scene.id ] = '<span class="type ' + sceneType + '"></span> ' + scene.name;
129
130 ( function addObjects( objects, pad ) {
131
132 for ( var i = 0, l = objects.length; i < l; i ++ ) {
133
134 var object = objects[ i ];
135 var objectType = editor.getObjectType( object );
136
137 var option = pad + '<span class="type ' + objectType + '"></span> ' + object.name;
138
139 if ( object instanceof THREE.Mesh ) {
140
141 var geometry = object.geometry;
142 var material = object.material;
143
144 var geometryType = editor.getGeometryType( geometry );
145 var materialType = editor.getMaterialType( material );
146
147 option += ' <span class="type ' + geometryType + '"></span> ' + geometry.name;
148 option += ' <span class="type ' + materialType + '"></span> ' + material.name;
149
150 }
151
152 options[ object.id ] = option;
153
154 addObjects( object.children, pad + '&nbsp;&nbsp;&nbsp;' );
155
156 }
157
158 } )( scene.children, '&nbsp;&nbsp;&nbsp;' );
159
160 outliner.setOptions( options );
161
162 if ( editor.selected !== null ) {
163
164 outliner.setValue( editor.selected.id );
165
166 }
167
168 if ( scene.fog ) {
169
170 fogColor.setHexValue( scene.fog.color.getHex() );
171
172 if ( scene.fog instanceof THREE.Fog ) {
173
174 fogType.setValue( "Fog" );
175 fogNear.setValue( scene.fog.near );
176 fogFar.setValue( scene.fog.far );
177
178 } else if ( scene.fog instanceof THREE.FogExp2 ) {
179
180 fogType.setValue( "FogExp2" );
181 fogDensity.setValue( scene.fog.density );
182
183 }
184
185 } else {
186
187 fogType.setValue( "None" );
188
189 }
190
191 refreshFogUI();
192
193 } );
194
195 signals.objectSelected.add( function ( object ) {
196
197 outliner.setValue( object !== null ? object.id : null );
198
199 } );
200
201 return container;
202
203}
Note: See TracBrowser for help on using the repository browser.