using System; using System.Collections.Generic; using System.Linq; using AlicizaX.UI.Runtime; using UnityEngine; namespace AlicizaX.UI.Editor { internal interface IContextualUIGeneratorRuleHelper { string GetClassGenerateName(UIGenerationContext context); string GetUIResourceSavePath(UIGenerationContext context); bool CheckCanGenerate(UIGenerationContext context); string GetReferenceNamespace(UIGenerationContext context); string GetVariableContent(UIGenerationContext context); void WriteUIScriptContent(UIGenerationContext context, string scriptContent); } public interface IUIGeneratorRuleHelper { string GetPrivateComponentByNameRule(string regexName, string componetName, EBindType bindType); string GetPublicComponentByNameRule(string variableName); string GetClassGenerateName(GameObject targetObject, UIScriptGenerateData scriptGenerateData); string GetUIResourceSavePath(GameObject targetObject, UIScriptGenerateData scriptGenerateData); void WriteUIScriptContent(GameObject targetObject, string className, string scriptContent, UIScriptGenerateData scriptGenerateData); bool CheckCanGenerate(GameObject targetObject, UIScriptGenerateData scriptGenerateData); string GetReferenceNamespace(List uiBindDatas); string GetVariableContent(List uiBindDatas); } public class DefaultUIGeneratorRuleHelper : IUIGeneratorRuleHelper, IContextualUIGeneratorRuleHelper { private readonly IUIIdentifierFormatter _identifierFormatter; private readonly IUIResourcePathResolver _resourcePathResolver; private readonly IUIScriptCodeEmitter _scriptCodeEmitter; private readonly IUIScriptFileWriter _scriptFileWriter; public DefaultUIGeneratorRuleHelper() : this( new DefaultUIIdentifierFormatter(), new DefaultUIResourcePathResolver(), new DefaultUIScriptCodeEmitter(), new DefaultUIScriptFileWriter()) { } internal DefaultUIGeneratorRuleHelper( IUIIdentifierFormatter identifierFormatter, IUIResourcePathResolver resourcePathResolver, IUIScriptCodeEmitter scriptCodeEmitter, IUIScriptFileWriter scriptFileWriter) { _identifierFormatter = identifierFormatter ?? throw new ArgumentNullException(nameof(identifierFormatter)); _resourcePathResolver = resourcePathResolver ?? throw new ArgumentNullException(nameof(resourcePathResolver)); _scriptCodeEmitter = scriptCodeEmitter ?? throw new ArgumentNullException(nameof(scriptCodeEmitter)); _scriptFileWriter = scriptFileWriter ?? throw new ArgumentNullException(nameof(scriptFileWriter)); } public string GetPrivateComponentByNameRule(string regexName, string componentName, EBindType bindType) => _identifierFormatter.GetPrivateComponentName(regexName, componentName, bindType); public string GetPublicComponentByNameRule(string variableName) => _identifierFormatter.GetPublicComponentName(variableName); public string GetClassGenerateName(GameObject targetObject, UIScriptGenerateData scriptGenerateData) => _identifierFormatter.GetClassName(targetObject); string IContextualUIGeneratorRuleHelper.GetClassGenerateName(UIGenerationContext context) => _identifierFormatter.GetClassName(context.TargetObject); public string GetUIResourceSavePath(GameObject targetObject, UIScriptGenerateData scriptGenerateData) => _resourcePathResolver.GetResourcePath(targetObject, scriptGenerateData); string IContextualUIGeneratorRuleHelper.GetUIResourceSavePath(UIGenerationContext context) => _resourcePathResolver.GetResourcePath(context.TargetObject, context.ScriptGenerateData); public void WriteUIScriptContent(GameObject targetObject, string className, string scriptContent, UIScriptGenerateData scriptGenerateData) => _scriptFileWriter.Write(targetObject, className, scriptContent, scriptGenerateData); void IContextualUIGeneratorRuleHelper.WriteUIScriptContent(UIGenerationContext context, string scriptContent) => _scriptFileWriter.Write(context.TargetObject, context.ClassName, scriptContent, context.ScriptGenerateData); public bool CheckCanGenerate(GameObject targetObject, UIScriptGenerateData scriptGenerateData) => _resourcePathResolver.CanGenerate(targetObject, scriptGenerateData); bool IContextualUIGeneratorRuleHelper.CheckCanGenerate(UIGenerationContext context) => _resourcePathResolver.CanGenerate(context.TargetObject, context.ScriptGenerateData); public string GetReferenceNamespace(List uiBindDatas) => _scriptCodeEmitter.GetReferenceNamespaces(uiBindDatas); string IContextualUIGeneratorRuleHelper.GetReferenceNamespace(UIGenerationContext context) => _scriptCodeEmitter.GetReferenceNamespaces(context.BindDatas?.ToList()); public string GetVariableContent(List uiBindDatas) => _scriptCodeEmitter.GetVariableContent(uiBindDatas, GetPublicComponentByNameRule); string IContextualUIGeneratorRuleHelper.GetVariableContent(UIGenerationContext context) => _scriptCodeEmitter.GetVariableContent(context.BindDatas?.ToList(), GetPublicComponentByNameRule); } }