AlicizaX/Client/Packages/com.alicizax.unity.ui/Editor/UIConfig/UIGenerateConfiguration.cs
2025-03-07 18:00:59 +08:00

86 lines
3.1 KiB
C#

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<UIGenerateConfiguration>
{
public UIGenerateCommonData UIGenerateCommonData = new UIGenerateCommonData();
public List<UIScriptGenerateData> UIScriptGenerateConfigs = new List<UIScriptGenerateData>();
public List<UIEelementRegexData> UIElementRegexConfigs = new List<UIEelementRegexData>();
}
[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<string> cacheFilterType;
public IEnumerable<string> 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;
}
}