using System; using System.Collections.Generic; using System.IO; using System.Linq; using AlicizaX; using AlicizaX.Editor.Setting; using AlicizaX.UI.Runtime; using UnityEngine; using UnityEditor; namespace AlicizaX.UI.Editor { [AlicizaX.Editor.Setting.FilePath("ProjectSettings/UIGenerateConfiguration.asset")] internal class UIGenerateConfiguration : AlicizaX.Editor.Setting.ScriptableSingleton { [Header("通用生成配置")] public UIGenerateCommonData UIGenerateCommonData = new UIGenerateCommonData(); [Header("UI生成规则(根据正则匹配)")] public List UIElementRegexConfigs = new List(); [Header("UI脚本生成配置(支持多个项目)")] public List UIScriptGenerateConfigs = new List(); [Header("UI脚本生成辅助类")] public string UIScriptGeneratorHelper; } [Serializable] public class UIGenerateCommonData { [Header("命名规则")] [Tooltip("组件检查分隔符,例如:Button#Close")] public string ComCheckSplitName = "#"; [Tooltip("组件结尾分隔符,例如:@End")] public string ComCheckEndName = "@"; [Tooltip("数组组件检查分隔符,例如:*Item")] public string ArrayComSplitName = "*"; [Tooltip("生成脚本前缀")] public string GeneratePrefix = "ui"; [Tooltip("排除的关键字(匹配则不生成)")] public string[] ExcludeKeywords = { "ViewHolder" }; [Tooltip("路径拼接映射,如:Window -> Window 文件夹")] public List CombineWords = new List() { new StringPair("Window", "Window"), new StringPair("ViewHolder", "ViewHolder"), new StringPair("Widget", "Widget"), }; } [Serializable] public class UIEelementRegexData { [Tooltip("匹配UI元素名称的正则表达式")] public string uiElementRegex; [Tooltip("匹配到的UI组件类型")] public string componentType; } [Serializable] public class UIScriptGenerateData { [Header("项目识别信息")] [Tooltip("该UI工程的名称(例如:MainProject, HotFix, EditorUI)")] public string ProjectName = "MainProject"; [Tooltip("该UI工程所属命名空间")] public string NameSpace = "Game.UI"; [Header("路径设置")] [Tooltip("生成的UI脚本路径(相对Assets)")] public string GenerateHolderCodePath = "Assets/Scripts/UI/Generated"; [Tooltip("UI Prefab根目录")] public string UIPrefabRootPath = "Assets/Art/UI/Prefabs"; [Header("加载类型")] [Tooltip("UI资源加载方式(本地 / YooAsset / Addressable等)")] public EUIResLoadType LoadType = EUIResLoadType.Resources; } [Serializable] public class StringPair { public string Key; public string Value; public StringPair(string key, string value) { Key = key; Value = value; } } }