Storyline+Dialog初步
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace SubAssetsToolbox.Editor
|
||||
{
|
||||
internal static class SubAssetsToolboxSettingsProvider
|
||||
{
|
||||
private const string SettingsPath = "Project/SubAssets Toolbox";
|
||||
private const string UxmlPath = "Packages/io.continis.subassets/UI/UIToolkit/ProjectSettings.uxml";
|
||||
|
||||
private static List<string> _extensions;
|
||||
private static ListView _listView;
|
||||
private static EnumField _redirectionModeField;
|
||||
private static Button _resetFileTypesBtn;
|
||||
|
||||
[SettingsProvider]
|
||||
private static SettingsProvider CreateSettingsProvider()
|
||||
{
|
||||
return new SettingsProvider(SettingsPath, SettingsScope.Project)
|
||||
{
|
||||
activateHandler = (_, rootElement) => CreateUI(rootElement),
|
||||
keywords = new[] { "subassets", "sub-assets", "redirect", "extensions" }
|
||||
};
|
||||
}
|
||||
|
||||
private static void SyncToSetting()
|
||||
{
|
||||
SubAssetsToolboxSettings.PatchExtensions.SetValue(_extensions.ToArray(), true);
|
||||
}
|
||||
|
||||
private static void CreateUI(VisualElement root)
|
||||
{
|
||||
ReferencePatchingMode currentMode = SubAssetsToolboxSettings.PatchReferences.value;
|
||||
bool redirectionIsEnabled = currentMode != ReferencePatchingMode.Disabled;
|
||||
_extensions = new List<string>(SubAssetsToolboxSettings.PatchExtensions.value);
|
||||
|
||||
VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(UxmlPath);
|
||||
VisualElement template = visualTree.Instantiate();
|
||||
template.style.flexGrow = 1f;
|
||||
|
||||
_redirectionModeField = template.Q<EnumField>("RedirectionModeField");
|
||||
_redirectionModeField.Init(ReferencePatchingMode.Disabled);
|
||||
_redirectionModeField.SetValueWithoutNotify(currentMode);
|
||||
_redirectionModeField.RegisterValueChangedCallback(OnRedirectionModeChanged);
|
||||
|
||||
_listView = template.Q<ListView>("ExtensionsList");
|
||||
_listView.itemsSource = _extensions;
|
||||
_listView.SetEnabled(redirectionIsEnabled);
|
||||
_listView.makeItem = MakeItem;
|
||||
_listView.bindItem = BindItem;
|
||||
_listView.unbindItem = UnbindItem;
|
||||
|
||||
_listView.itemsAdded += indices =>
|
||||
{
|
||||
foreach (int i in indices)
|
||||
_extensions[i] = "ext";
|
||||
_listView.RefreshItems();
|
||||
SyncToSetting();
|
||||
};
|
||||
|
||||
_listView.itemsRemoved += _ => SyncToSetting();
|
||||
_listView.itemIndexChanged += (_, _) => SyncToSetting();
|
||||
|
||||
_resetFileTypesBtn = template.Q<Button>("ResetBtn");
|
||||
_resetFileTypesBtn.SetEnabled(redirectionIsEnabled);
|
||||
_resetFileTypesBtn.clicked += ResetExtensionsToDefaults;
|
||||
|
||||
root.Add(template);
|
||||
}
|
||||
|
||||
private static void OnRedirectionModeChanged(ChangeEvent<Enum> evt)
|
||||
{
|
||||
ReferencePatchingMode mode = (ReferencePatchingMode)evt.newValue;
|
||||
SubAssetsToolboxSettings.PatchReferences.SetValue(mode, true);
|
||||
bool enabled = mode != ReferencePatchingMode.Disabled;
|
||||
_listView.SetEnabled(enabled);
|
||||
_resetFileTypesBtn.SetEnabled(enabled);
|
||||
}
|
||||
|
||||
private static void ResetExtensionsToDefaults()
|
||||
{
|
||||
_extensions.Clear();
|
||||
_extensions.AddRange(SubAssetsToolboxSettings.DefaultExtensionsToScan);
|
||||
_listView.RefreshItems();
|
||||
SyncToSetting();
|
||||
}
|
||||
|
||||
private static VisualElement MakeItem()
|
||||
{
|
||||
return new TextField();
|
||||
}
|
||||
|
||||
private static void BindItem(VisualElement element, int index)
|
||||
{
|
||||
TextField field = (TextField)element;
|
||||
field.SetValueWithoutNotify(_extensions[index]);
|
||||
field.userData = index;
|
||||
field.RegisterValueChangedCallback(OnExtensionChanged);
|
||||
}
|
||||
|
||||
private static void UnbindItem(VisualElement element, int index)
|
||||
{
|
||||
TextField field = (TextField)element;
|
||||
field.UnregisterValueChangedCallback(OnExtensionChanged);
|
||||
}
|
||||
|
||||
private static void OnExtensionChanged(ChangeEvent<string> evt)
|
||||
{
|
||||
TextField field = (TextField)evt.target;
|
||||
int index = (int)field.userData;
|
||||
_extensions[index] = evt.newValue;
|
||||
SyncToSetting();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user