mirror of
https://github.com/sinai-dev/UnityExplorer.git
synced 2025-06-16 22:27:45 +08:00
Add search filter to scene loader dropdown
This commit is contained in:
parent
b9c641f170
commit
587842f46b
@ -42,6 +42,11 @@ namespace UnityExplorer.ObjectExplorer
|
|||||||
private Dropdown sceneDropdown;
|
private Dropdown sceneDropdown;
|
||||||
private readonly Dictionary<Scene, Dropdown.OptionData> sceneToDropdownOption = new Dictionary<Scene, Dropdown.OptionData>();
|
private readonly Dictionary<Scene, Dropdown.OptionData> sceneToDropdownOption = new Dictionary<Scene, Dropdown.OptionData>();
|
||||||
|
|
||||||
|
// scene loader
|
||||||
|
private Dropdown allSceneDropdown;
|
||||||
|
private ButtonRef loadButton;
|
||||||
|
private ButtonRef loadAdditiveButton;
|
||||||
|
|
||||||
private IEnumerable<GameObject> GetRootEntries() => SceneHandler.CurrentRootObjects;
|
private IEnumerable<GameObject> GetRootEntries() => SceneHandler.CurrentRootObjects;
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
@ -155,7 +160,7 @@ namespace UnityExplorer.ObjectExplorer
|
|||||||
|
|
||||||
private void TryLoadScene(LoadSceneMode mode, Dropdown allSceneDrop)
|
private void TryLoadScene(LoadSceneMode mode, Dropdown allSceneDrop)
|
||||||
{
|
{
|
||||||
var text = allSceneDrop.options[allSceneDrop.value].text;
|
var text = allSceneDrop.captionText.text;
|
||||||
|
|
||||||
if (text == DEFAULT_LOAD_TEXT)
|
if (text == DEFAULT_LOAD_TEXT)
|
||||||
return;
|
return;
|
||||||
@ -250,57 +255,26 @@ namespace UnityExplorer.ObjectExplorer
|
|||||||
|
|
||||||
private const string DEFAULT_LOAD_TEXT = "[Select a scene]";
|
private const string DEFAULT_LOAD_TEXT = "[Select a scene]";
|
||||||
|
|
||||||
private void ConstructSceneLoader()
|
private void RefreshSceneLoaderOptions(string filter)
|
||||||
{
|
{
|
||||||
// Scene Loader
|
allSceneDropdown.options.Clear();
|
||||||
try
|
allSceneDropdown.options.Add(new Dropdown.OptionData(DEFAULT_LOAD_TEXT));
|
||||||
{
|
|
||||||
if (SceneHandler.WasAbleToGetScenesInBuild)
|
|
||||||
{
|
|
||||||
var sceneLoaderObj = UIFactory.CreateVerticalGroup(m_uiRoot, "SceneLoader", true, true, true, true);
|
|
||||||
UIFactory.SetLayoutElement(sceneLoaderObj, minHeight: 25);
|
|
||||||
//sceneLoaderObj.SetActive(false);
|
|
||||||
|
|
||||||
var loaderTitle = UIFactory.CreateLabel(sceneLoaderObj, "SceneLoaderLabel", "Scene Loader", TextAnchor.MiddleLeft, Color.white, true, 14);
|
|
||||||
UIFactory.SetLayoutElement(loaderTitle.gameObject, minHeight: 25, flexibleHeight: 0);
|
|
||||||
|
|
||||||
var allSceneDropObj = UIFactory.CreateDropdown(sceneLoaderObj, out Dropdown allSceneDrop, "", 14, null);
|
|
||||||
UIFactory.SetLayoutElement(allSceneDropObj, minHeight: 25, minWidth: 150, flexibleWidth: 0, flexibleHeight: 0);
|
|
||||||
|
|
||||||
allSceneDrop.options.Add(new Dropdown.OptionData(DEFAULT_LOAD_TEXT));
|
|
||||||
|
|
||||||
foreach (var scene in SceneHandler.AllSceneNames)
|
foreach (var scene in SceneHandler.AllSceneNames)
|
||||||
allSceneDrop.options.Add(new Dropdown.OptionData(Path.GetFileNameWithoutExtension(scene)));
|
|
||||||
|
|
||||||
allSceneDrop.value = 1;
|
|
||||||
allSceneDrop.value = 0;
|
|
||||||
|
|
||||||
var buttonRow = UIFactory.CreateHorizontalGroup(sceneLoaderObj, "LoadButtons", true, true, true, true, 4);
|
|
||||||
|
|
||||||
var loadButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Single)", new Color(0.1f, 0.3f, 0.3f));
|
|
||||||
UIFactory.SetLayoutElement(loadButton.Component.gameObject, minHeight: 25, minWidth: 150);
|
|
||||||
loadButton.OnClick += () =>
|
|
||||||
{
|
{
|
||||||
TryLoadScene(LoadSceneMode.Single, allSceneDrop);
|
if (string.IsNullOrEmpty(filter) || scene.ContainsIgnoreCase(filter))
|
||||||
};
|
allSceneDropdown.options.Add(new Dropdown.OptionData(Path.GetFileNameWithoutExtension(scene)));
|
||||||
|
}
|
||||||
|
|
||||||
var loadAdditiveButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Additive)", new Color(0.1f, 0.3f, 0.3f));
|
allSceneDropdown.RefreshShownValue();
|
||||||
UIFactory.SetLayoutElement(loadAdditiveButton.Component.gameObject, minHeight: 25, minWidth: 150);
|
|
||||||
loadAdditiveButton.OnClick += () =>
|
if (loadButton != null)
|
||||||
|
RefreshSceneLoaderButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshSceneLoaderButtons()
|
||||||
{
|
{
|
||||||
TryLoadScene(LoadSceneMode.Additive, allSceneDrop);
|
var text = allSceneDropdown.captionText.text;
|
||||||
};
|
|
||||||
|
|
||||||
var disabledColor = new Color(0.24f, 0.24f, 0.24f);
|
|
||||||
RuntimeProvider.Instance.SetColorBlock(loadButton.Component, disabled: disabledColor);
|
|
||||||
RuntimeProvider.Instance.SetColorBlock(loadAdditiveButton.Component, disabled: disabledColor);
|
|
||||||
|
|
||||||
loadButton.Component.interactable = false;
|
|
||||||
loadAdditiveButton.Component.interactable = false;
|
|
||||||
|
|
||||||
allSceneDrop.onValueChanged.AddListener((int val) =>
|
|
||||||
{
|
|
||||||
var text = allSceneDrop.options[val].text;
|
|
||||||
if (text == DEFAULT_LOAD_TEXT)
|
if (text == DEFAULT_LOAD_TEXT)
|
||||||
{
|
{
|
||||||
loadButton.Component.interactable = false;
|
loadButton.Component.interactable = false;
|
||||||
@ -311,6 +285,64 @@ namespace UnityExplorer.ObjectExplorer
|
|||||||
loadButton.Component.interactable = true;
|
loadButton.Component.interactable = true;
|
||||||
loadAdditiveButton.Component.interactable = true;
|
loadAdditiveButton.Component.interactable = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConstructSceneLoader()
|
||||||
|
{
|
||||||
|
// Scene Loader
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (SceneHandler.WasAbleToGetScenesInBuild)
|
||||||
|
{
|
||||||
|
var sceneLoaderObj = UIFactory.CreateVerticalGroup(m_uiRoot, "SceneLoader", true, true, true, true);
|
||||||
|
UIFactory.SetLayoutElement(sceneLoaderObj, minHeight: 25);
|
||||||
|
|
||||||
|
// Title
|
||||||
|
|
||||||
|
var loaderTitle = UIFactory.CreateLabel(sceneLoaderObj, "SceneLoaderLabel", "Scene Loader", TextAnchor.MiddleLeft, Color.white, true, 14);
|
||||||
|
UIFactory.SetLayoutElement(loaderTitle.gameObject, minHeight: 25, flexibleHeight: 0);
|
||||||
|
|
||||||
|
// Search filter
|
||||||
|
|
||||||
|
var searchFilterObj = UIFactory.CreateInputField(sceneLoaderObj, "SearchFilterInput", "Filter scene names...");
|
||||||
|
UIFactory.SetLayoutElement(searchFilterObj.UIRoot, minHeight: 25, flexibleHeight: 0);
|
||||||
|
searchFilterObj.OnValueChanged += RefreshSceneLoaderOptions;
|
||||||
|
|
||||||
|
// Dropdown
|
||||||
|
|
||||||
|
var allSceneDropObj = UIFactory.CreateDropdown(sceneLoaderObj, out allSceneDropdown, "", 14, null);
|
||||||
|
UIFactory.SetLayoutElement(allSceneDropObj, minHeight: 25, minWidth: 150, flexibleWidth: 0, flexibleHeight: 0);
|
||||||
|
|
||||||
|
RefreshSceneLoaderOptions(string.Empty);
|
||||||
|
|
||||||
|
// Button row
|
||||||
|
|
||||||
|
var buttonRow = UIFactory.CreateHorizontalGroup(sceneLoaderObj, "LoadButtons", true, true, true, true, 4);
|
||||||
|
|
||||||
|
loadButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Single)", new Color(0.1f, 0.3f, 0.3f));
|
||||||
|
UIFactory.SetLayoutElement(loadButton.Component.gameObject, minHeight: 25, minWidth: 150);
|
||||||
|
loadButton.OnClick += () =>
|
||||||
|
{
|
||||||
|
TryLoadScene(LoadSceneMode.Single, allSceneDropdown);
|
||||||
|
};
|
||||||
|
|
||||||
|
loadAdditiveButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Additive)", new Color(0.1f, 0.3f, 0.3f));
|
||||||
|
UIFactory.SetLayoutElement(loadAdditiveButton.Component.gameObject, minHeight: 25, minWidth: 150);
|
||||||
|
loadAdditiveButton.OnClick += () =>
|
||||||
|
{
|
||||||
|
TryLoadScene(LoadSceneMode.Additive, allSceneDropdown);
|
||||||
|
};
|
||||||
|
|
||||||
|
var disabledColor = new Color(0.24f, 0.24f, 0.24f);
|
||||||
|
RuntimeProvider.Instance.SetColorBlock(loadButton.Component, disabled: disabledColor);
|
||||||
|
RuntimeProvider.Instance.SetColorBlock(loadAdditiveButton.Component, disabled: disabledColor);
|
||||||
|
|
||||||
|
loadButton.Component.interactable = false;
|
||||||
|
loadAdditiveButton.Component.interactable = false;
|
||||||
|
|
||||||
|
allSceneDropdown.onValueChanged.AddListener((int val) =>
|
||||||
|
{
|
||||||
|
RefreshSceneLoaderButtons();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user