@@ -42,6 +42,11 @@ public SceneExplorer(ObjectExplorerPanel parent)
42
42
private Dropdown sceneDropdown ;
43
43
private readonly Dictionary < Scene , Dropdown . OptionData > sceneToDropdownOption = new Dictionary < Scene , Dropdown . OptionData > ( ) ;
44
44
45
+ // scene loader
46
+ private Dropdown allSceneDropdown ;
47
+ private ButtonRef loadButton ;
48
+ private ButtonRef loadAdditiveButton ;
49
+
45
50
private IEnumerable < GameObject > GetRootEntries ( ) => SceneHandler . CurrentRootObjects ;
46
51
47
52
public void Update ( )
@@ -155,7 +160,7 @@ private void OnFilterInput(string input)
155
160
156
161
private void TryLoadScene ( LoadSceneMode mode , Dropdown allSceneDrop )
157
162
{
158
- var text = allSceneDrop . options [ allSceneDrop . value ] . text ;
163
+ var text = allSceneDrop . captionText . text ;
159
164
160
165
if ( text == DEFAULT_LOAD_TEXT )
161
166
return ;
@@ -250,6 +255,38 @@ public override void ConstructUI(GameObject content)
250
255
251
256
private const string DEFAULT_LOAD_TEXT = "[Select a scene]" ;
252
257
258
+ private void RefreshSceneLoaderOptions ( string filter )
259
+ {
260
+ allSceneDropdown . options . Clear ( ) ;
261
+ allSceneDropdown . options . Add ( new Dropdown . OptionData ( DEFAULT_LOAD_TEXT ) ) ;
262
+
263
+ foreach ( var scene in SceneHandler . AllSceneNames )
264
+ {
265
+ if ( string . IsNullOrEmpty ( filter ) || scene . ContainsIgnoreCase ( filter ) )
266
+ allSceneDropdown . options . Add ( new Dropdown . OptionData ( Path . GetFileNameWithoutExtension ( scene ) ) ) ;
267
+ }
268
+
269
+ allSceneDropdown . RefreshShownValue ( ) ;
270
+
271
+ if ( loadButton != null )
272
+ RefreshSceneLoaderButtons ( ) ;
273
+ }
274
+
275
+ private void RefreshSceneLoaderButtons ( )
276
+ {
277
+ var text = allSceneDropdown . captionText . text ;
278
+ if ( text == DEFAULT_LOAD_TEXT )
279
+ {
280
+ loadButton . Component . interactable = false ;
281
+ loadAdditiveButton . Component . interactable = false ;
282
+ }
283
+ else
284
+ {
285
+ loadButton . Component . interactable = true ;
286
+ loadAdditiveButton . Component . interactable = true ;
287
+ }
288
+ }
289
+
253
290
private void ConstructSceneLoader ( )
254
291
{
255
292
// Scene Loader
@@ -259,36 +296,41 @@ private void ConstructSceneLoader()
259
296
{
260
297
var sceneLoaderObj = UIFactory . CreateVerticalGroup ( m_uiRoot , "SceneLoader" , true , true , true , true ) ;
261
298
UIFactory . SetLayoutElement ( sceneLoaderObj , minHeight : 25 ) ;
262
- //sceneLoaderObj.SetActive(false);
299
+
300
+ // Title
263
301
264
302
var loaderTitle = UIFactory . CreateLabel ( sceneLoaderObj , "SceneLoaderLabel" , "Scene Loader" , TextAnchor . MiddleLeft , Color . white , true , 14 ) ;
265
303
UIFactory . SetLayoutElement ( loaderTitle . gameObject , minHeight : 25 , flexibleHeight : 0 ) ;
266
304
267
- var allSceneDropObj = UIFactory . CreateDropdown ( sceneLoaderObj , out Dropdown allSceneDrop , "" , 14 , null ) ;
268
- UIFactory . SetLayoutElement ( allSceneDropObj , minHeight : 25 , minWidth : 150 , flexibleWidth : 0 , flexibleHeight : 0 ) ;
305
+ // Search filter
306
+
307
+ var searchFilterObj = UIFactory . CreateInputField ( sceneLoaderObj , "SearchFilterInput" , "Filter scene names..." ) ;
308
+ UIFactory . SetLayoutElement ( searchFilterObj . UIRoot , minHeight : 25 , flexibleHeight : 0 ) ;
309
+ searchFilterObj . OnValueChanged += RefreshSceneLoaderOptions ;
269
310
270
- allSceneDrop . options . Add ( new Dropdown . OptionData ( DEFAULT_LOAD_TEXT ) ) ;
311
+ // Dropdown
312
+
313
+ var allSceneDropObj = UIFactory . CreateDropdown ( sceneLoaderObj , out allSceneDropdown , "" , 14 , null ) ;
314
+ UIFactory . SetLayoutElement ( allSceneDropObj , minHeight : 25 , minWidth : 150 , flexibleWidth : 0 , flexibleHeight : 0 ) ;
271
315
272
- foreach ( var scene in SceneHandler . AllSceneNames )
273
- allSceneDrop . options . Add ( new Dropdown . OptionData ( Path . GetFileNameWithoutExtension ( scene ) ) ) ;
316
+ RefreshSceneLoaderOptions ( string . Empty ) ;
274
317
275
- allSceneDrop . value = 1 ;
276
- allSceneDrop . value = 0 ;
318
+ // Button row
277
319
278
320
var buttonRow = UIFactory . CreateHorizontalGroup ( sceneLoaderObj , "LoadButtons" , true , true , true , true , 4 ) ;
279
321
280
- var loadButton = UIFactory . CreateButton ( buttonRow , "LoadSceneButton" , "Load (Single)" , new Color ( 0.1f , 0.3f , 0.3f ) ) ;
322
+ loadButton = UIFactory . CreateButton ( buttonRow , "LoadSceneButton" , "Load (Single)" , new Color ( 0.1f , 0.3f , 0.3f ) ) ;
281
323
UIFactory . SetLayoutElement ( loadButton . Component . gameObject , minHeight : 25 , minWidth : 150 ) ;
282
324
loadButton . OnClick += ( ) =>
283
325
{
284
- TryLoadScene ( LoadSceneMode . Single , allSceneDrop ) ;
326
+ TryLoadScene ( LoadSceneMode . Single , allSceneDropdown ) ;
285
327
} ;
286
328
287
- var loadAdditiveButton = UIFactory . CreateButton ( buttonRow , "LoadSceneButton" , "Load (Additive)" , new Color ( 0.1f , 0.3f , 0.3f ) ) ;
329
+ loadAdditiveButton = UIFactory . CreateButton ( buttonRow , "LoadSceneButton" , "Load (Additive)" , new Color ( 0.1f , 0.3f , 0.3f ) ) ;
288
330
UIFactory . SetLayoutElement ( loadAdditiveButton . Component . gameObject , minHeight : 25 , minWidth : 150 ) ;
289
331
loadAdditiveButton . OnClick += ( ) =>
290
332
{
291
- TryLoadScene ( LoadSceneMode . Additive , allSceneDrop ) ;
333
+ TryLoadScene ( LoadSceneMode . Additive , allSceneDropdown ) ;
292
334
} ;
293
335
294
336
var disabledColor = new Color ( 0.24f , 0.24f , 0.24f ) ;
@@ -298,19 +340,9 @@ private void ConstructSceneLoader()
298
340
loadButton . Component . interactable = false ;
299
341
loadAdditiveButton . Component . interactable = false ;
300
342
301
- allSceneDrop . onValueChanged . AddListener ( ( int val ) =>
343
+ allSceneDropdown . onValueChanged . AddListener ( ( int val ) =>
302
344
{
303
- var text = allSceneDrop . options [ val ] . text ;
304
- if ( text == DEFAULT_LOAD_TEXT )
305
- {
306
- loadButton . Component . interactable = false ;
307
- loadAdditiveButton . Component . interactable = false ;
308
- }
309
- else
310
- {
311
- loadButton . Component . interactable = true ;
312
- loadAdditiveButton . Component . interactable = true ;
313
- }
345
+ RefreshSceneLoaderButtons ( ) ;
314
346
} ) ;
315
347
}
316
348
}
0 commit comments