using System; using System.Collections.Generic; using System.IO; using System.Linq; using AlicizaX.Editor.Setting; using AlicizaX.Runtime; using AlicizaX.UI.Runtime; using Newtonsoft.Json; using Sirenix.OdinInspector; using UnityEngine; namespace AlicizaX.UI.Editor { [AlicizaX.Editor.Setting.FilePath("ProjectSettings/UIGenerateConfiguration.asset")] internal class UIGenerateConfiguration : ScriptableSingleton { public UIGenerateCommonData UIGenerateCommonData = new UIGenerateCommonData(); public List UIScriptGenerateConfigs = new List(); public List UIElementRegexConfigs = new List(); } [System.Serializable] public class UIGenerateCommonData { [LabelText("组件检查分隔符")] public string ComCheckSplitName = "#"; [LabelText("组件结尾分隔符")] public string ComCheckEndName = "@"; [LabelText("数组组件检查分隔符")] public string ArrayComSplitName = "*"; [LabelText("生成脚本前缀")] public string GeneratePrefix = "ui"; } [System.Serializable] public class UIEelementRegexData { public string uiElementRegex; [ShowInInspector] [ValueDropdown("GetFilteredTypeList", ExpandAllMenuItems = false)] public string componentType; private static List cacheFilterType; public IEnumerable GetFilteredTypeList() { if (cacheFilterType == null) { cacheFilterType = AlicizaX.Runtime.Utility.Assembly.GetTypes() .Where(m => !m.FullName.Contains("Editor")) .Where(x => !x.IsAbstract || x.IsInterface) .Where(x => !x.IsGenericTypeDefinition) .Where(x => !x.IsSubclassOf(typeof(GameFrameworkComponent))) .Where(x => x.IsSubclassOf(typeof(Component))) .Where(x => !x.FullName.Contains("YooAsset")) .Where(x => !x.FullName.Contains(("Unity.VisualScripting"))) .Where(x => !x.FullName.Contains(("Cysharp.Threading"))) .Where(x => !x.FullName.Contains(("UnityEngine.Rendering.UI.Debug"))) .Where(x => !x.FullName.Contains(("Unity.PerformanceTesting"))) .Where(x => !x.FullName.Contains(("UnityEngine.TestTools"))) .Select(x => x.FullName).ToList(); cacheFilterType.Add(typeof(GameObject).FullName); } return cacheFilterType; } } [System.Serializable] public class UIScriptGenerateData { public string ConfigName; public string NameSpace; [Sirenix.OdinInspector.FolderPath(RequireExistingPath = true, AbsolutePath = false)] public string GenerateHolderCodePath; public string GenerateUICodePath; [Sirenix.OdinInspector.FolderPath(RequireExistingPath = true, AbsolutePath = false)] public string UIPrefabPath; public EUIResLoadType LoadType; } }