Files
SpaceGame/Packages/com.boxfriend.utils@58cc9986a36b/Editor/TALGeneratorSettingsProvider.cs
2025-11-16 18:31:17 -05:00

157 lines
4.4 KiB
C#

using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class TALGeneratorSettingsProvider : SettingsProvider
{
private TALGeneratorSettings _settings;
public TALGeneratorSettingsProvider(string path, SettingsScope scopes, IEnumerable<string> keywords = null) : base(path, scopes, keywords) { }
[SettingsProvider]
public static SettingsProvider CreateCustomSettingsProvider()
{
return new TALGeneratorSettingsProvider("Project/Tags and Layers Generator", SettingsScope.Project);
}
public override void OnActivate(string searchContext, VisualElement rootElement)
{
_settings = TALGeneratorSettings.GetOrCreate();
var container = new VisualElement
{
style =
{
paddingTop = 10,
paddingLeft = 10,
paddingRight = 10
}
};
var titleLabel = new Label("Tags And Layers Generator Settings")
{
style =
{
fontSize = 14,
unityFontStyleAndWeight = FontStyle.Bold
}
};
container.Add(titleLabel);
var folderPickerRow = new VisualElement
{
style =
{
flexDirection = FlexDirection.Row,
marginBottom = 5
}
};
var folderPathField = new TextField("Selected Path")
{
value = _settings.FilePath,
tooltip = "Select a folder that the generated class will be placed into",
isReadOnly = true,
style =
{
flexGrow = 1
}
};
folderPickerRow.Add(folderPathField);
var button = new Button(() =>
{
var path = EditorUtility.OpenFolderPanel("Select a Folder", Application.dataPath, "");
if (string.IsNullOrWhiteSpace(path) || !IsInAssetFolder(path)) return;
_settings.FilePath = path;
_settings.Save();
folderPathField.value = path;
})
{
text = "Browse",
style =
{
marginLeft = 5
}
};
folderPickerRow.Add(button);
container.Add(folderPickerRow);
var fileNameRow = new VisualElement
{
style =
{
flexDirection = FlexDirection.Row,
marginBottom = 5
}
};
var fileNameField = new TextField("File Name")
{
value = _settings.FileName,
tooltip = "Select a name for the generated file",
style = { flexGrow = 1 }
};
fileNameField.RegisterValueChangedCallback(evt =>
{
_settings.FileName = evt.newValue;
_settings.Save();
});
fileNameRow.Add(fileNameField);
var csLabel = new Label(".cs")
{
style = { marginRight = 10 }
};
fileNameRow.Add(csLabel);
container.Add(fileNameRow);
var buttonRow = new VisualElement()
{
style =
{
flexGrow = 1,
flexDirection = FlexDirection.RowReverse,
justifyContent = new StyleEnum<Justify>(Justify.SpaceBetween),
marginBottom = 5
}
};
var generateButton = new Button(TagAndLayerGenerator.Generate)
{
text = "Manually Generate",
style =
{
flexGrow = 0,
marginRight = 10
}
};
buttonRow.Add(generateButton);
var secondsField = new IntegerField("AutoGenerate Threshold")
{
value = _settings.Seconds,
tooltip = "Minimum number of seconds to wait before allowing auto generation again. Minimum of 5 seconds",
style =
{
minWidth = 30
}
};
secondsField.RegisterValueChangedCallback(evt =>
{
_settings.Seconds = Mathf.Max(evt.newValue, 5);
_settings.Save();
});
buttonRow.Add(secondsField);
container.Add(buttonRow);
rootElement.Add(container);
}
private bool IsInAssetFolder(string path)
{
var fullName = Path.GetFullPath(path);
return fullName.StartsWith(Application.dataPath);
}
}