com.alicizax.unity.framework/Editor/UI/Helper/IUIGeneratorRuleHelper.cs

115 lines
5.4 KiB
C#

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<UIBindData> uiBindDatas);
string GetVariableContent(List<UIBindData> 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<UIBindData> uiBindDatas)
=> _scriptCodeEmitter.GetReferenceNamespaces(uiBindDatas);
string IContextualUIGeneratorRuleHelper.GetReferenceNamespace(UIGenerationContext context)
=> _scriptCodeEmitter.GetReferenceNamespaces(context.BindDatas?.ToList());
public string GetVariableContent(List<UIBindData> uiBindDatas)
=> _scriptCodeEmitter.GetVariableContent(uiBindDatas, GetPublicComponentByNameRule);
string IContextualUIGeneratorRuleHelper.GetVariableContent(UIGenerationContext context)
=> _scriptCodeEmitter.GetVariableContent(context.BindDatas?.ToList(), GetPublicComponentByNameRule);
}
}