AlicizaX/Client/Packages/com.alicizax.unity.ui/Editor/UIConfig/UIGenerateConfiguration.cs

100 lines
3.7 KiB
C#
Raw Normal View History

2025-01-24 16:21:00 +08:00
using System;
using System.Collections.Generic;
using System.IO;
2025-01-26 20:55:39 +08:00
using System.Linq;
2025-03-04 18:40:14 +08:00
using AlicizaX.Editor.Setting;
2025-04-28 19:45:45 +08:00
using AlicizaX;
2025-03-04 18:40:14 +08:00
using AlicizaX.UI.Runtime;
using Newtonsoft.Json;
2025-01-24 16:21:00 +08:00
using Sirenix.OdinInspector;
using UnityEngine;
2025-04-28 19:45:45 +08:00
using UnityEngine.Serialization;
2025-01-24 16:21:00 +08:00
namespace AlicizaX.UI.Editor
{
2025-03-04 18:40:14 +08:00
[AlicizaX.Editor.Setting.FilePath("ProjectSettings/UIGenerateConfiguration.asset")]
internal class UIGenerateConfiguration : ScriptableSingleton<UIGenerateConfiguration>
2025-01-24 16:21:00 +08:00
{
2025-03-04 18:40:14 +08:00
public UIGenerateCommonData UIGenerateCommonData = new UIGenerateCommonData();
2025-04-28 19:45:45 +08:00
public UIScriptGenerateConfig UIScriptGenerateConfig = new UIScriptGenerateConfig();
2025-01-26 20:55:39 +08:00
public List<UIEelementRegexData> UIElementRegexConfigs = new List<UIEelementRegexData>();
2025-01-24 16:21:00 +08:00
}
2025-03-04 18:40:14 +08:00
[System.Serializable]
public class UIGenerateCommonData
2025-01-24 16:21:00 +08:00
{
2025-03-04 18:40:14 +08:00
[LabelText("组件检查分隔符")] public string ComCheckSplitName = "#";
[LabelText("组件结尾分隔符")] public string ComCheckEndName = "@";
[LabelText("数组组件检查分隔符")] public string ArrayComSplitName = "*";
[LabelText("生成脚本前缀")] public string GeneratePrefix = "ui";
2025-04-28 19:45:45 +08:00
[LabelText("排除表")] public string[] ExcludeKeywords = { "ViewHolder" };
[ShowInInspector] [LabelText("生成路径拼接")]
public Dictionary<string, string> CombineWords = new Dictionary<string, string>
{
{ "Window", "Window" },
{ "ViewHolder", "ViewHolder" },
{ "Widget", "Widget" },
};
2025-01-24 16:21:00 +08:00
}
2025-01-26 20:55:39 +08:00
[System.Serializable]
2025-03-07 18:00:59 +08:00
public class UIEelementRegexData
2025-01-26 20:55:39 +08:00
{
public string uiElementRegex;
[ShowInInspector] [ValueDropdown("GetFilteredTypeList", ExpandAllMenuItems = false)]
public string componentType;
private static List<string> cacheFilterType;
public IEnumerable<string> GetFilteredTypeList()
{
if (cacheFilterType == null)
{
2025-04-28 19:45:45 +08:00
cacheFilterType = AlicizaX.Utility.Assembly.GetTypes()
2025-01-26 20:55:39 +08:00
.Where(m => !m.FullName.Contains("Editor"))
.Where(x => !x.IsAbstract || x.IsInterface)
.Where(x => !x.IsGenericTypeDefinition)
2025-04-28 19:45:45 +08:00
.Where(x => !x.IsSubclassOf(typeof(UIHolderObjectBase)))
2025-01-26 20:55:39 +08:00
.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")))
2025-04-28 19:45:45 +08:00
.Select(x => x.Name).ToList();
2025-01-26 20:55:39 +08:00
2025-04-28 19:45:45 +08:00
cacheFilterType.Add(typeof(GameObject).Name);
2025-01-26 20:55:39 +08:00
}
return cacheFilterType;
}
}
2025-04-28 19:45:45 +08:00
2025-01-26 20:55:39 +08:00
[System.Serializable]
2025-04-28 19:45:45 +08:00
public class UIScriptGenerateConfig
2025-01-26 20:55:39 +08:00
{
2025-04-28 19:45:45 +08:00
[BoxGroup("主工程")] public UIScriptGenerateData MainProjectUIScriptGenerateData = new UIScriptGenerateData();
[BoxGroup("热更工程")] public UIScriptGenerateData HotFixProjectUIScriptGenerateData = new UIScriptGenerateData();
}
2025-01-26 20:55:39 +08:00
2025-04-28 19:45:45 +08:00
[System.Serializable]
public class UIScriptGenerateData
{
2025-03-04 18:40:14 +08:00
public string NameSpace;
2025-01-26 20:55:39 +08:00
[Sirenix.OdinInspector.FolderPath(RequireExistingPath = true, AbsolutePath = false)]
2025-03-04 18:40:14 +08:00
public string GenerateHolderCodePath;
2025-01-26 20:55:39 +08:00
[Sirenix.OdinInspector.FolderPath(RequireExistingPath = true, AbsolutePath = false)]
2025-04-28 19:45:45 +08:00
public string UIPrefabRootPath;
2025-03-04 18:40:14 +08:00
public EUIResLoadType LoadType;
2025-01-26 20:55:39 +08:00
}
}