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

115 lines
5.4 KiB
C#
Raw Normal View History

2025-11-10 16:01:53 +08:00
using System;
2025-11-13 11:16:31 +08:00
using System.Collections.Generic;
using System.Linq;
2025-11-10 16:01:53 +08:00
using AlicizaX.UI.Runtime;
using UnityEngine;
namespace AlicizaX.UI.Editor
{
2026-03-16 18:33:06 +08:00
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);
}
2025-11-10 16:01:53 +08:00
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);
2025-12-01 16:45:42 +08:00
void WriteUIScriptContent(GameObject targetObject, string className, string scriptContent, UIScriptGenerateData scriptGenerateData);
2025-11-10 16:01:53 +08:00
bool CheckCanGenerate(GameObject targetObject, UIScriptGenerateData scriptGenerateData);
2025-11-13 11:16:31 +08:00
string GetReferenceNamespace(List<UIBindData> uiBindDatas);
string GetVariableContent(List<UIBindData> uiBindDatas);
2025-11-10 16:01:53 +08:00
}
2025-11-13 11:16:31 +08:00
2026-03-16 18:33:06 +08:00
public class DefaultUIGeneratorRuleHelper : IUIGeneratorRuleHelper, IContextualUIGeneratorRuleHelper
2025-11-10 16:01:53 +08:00
{
2026-03-16 18:33:06 +08:00
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())
2025-11-10 16:01:53 +08:00
{
}
2026-03-16 18:33:06 +08:00
internal DefaultUIGeneratorRuleHelper(
IUIIdentifierFormatter identifierFormatter,
IUIResourcePathResolver resourcePathResolver,
IUIScriptCodeEmitter scriptCodeEmitter,
IUIScriptFileWriter scriptFileWriter)
2025-11-10 16:01:53 +08:00
{
2026-03-16 18:33:06 +08:00
_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));
2025-11-10 16:01:53 +08:00
}
2026-03-16 18:33:06 +08:00
public string GetPrivateComponentByNameRule(string regexName, string componentName, EBindType bindType)
=> _identifierFormatter.GetPrivateComponentName(regexName, componentName, bindType);
2025-11-13 11:16:31 +08:00
2026-03-16 18:33:06 +08:00
public string GetPublicComponentByNameRule(string variableName)
=> _identifierFormatter.GetPublicComponentName(variableName);
2025-11-10 16:01:53 +08:00
2026-03-16 18:33:06 +08:00
public string GetClassGenerateName(GameObject targetObject, UIScriptGenerateData scriptGenerateData)
=> _identifierFormatter.GetClassName(targetObject);
2025-11-13 11:16:31 +08:00
2026-03-16 18:33:06 +08:00
string IContextualUIGeneratorRuleHelper.GetClassGenerateName(UIGenerationContext context)
=> _identifierFormatter.GetClassName(context.TargetObject);
2025-11-10 16:01:53 +08:00
2026-03-16 18:33:06 +08:00
public string GetUIResourceSavePath(GameObject targetObject, UIScriptGenerateData scriptGenerateData)
=> _resourcePathResolver.GetResourcePath(targetObject, scriptGenerateData);
2025-11-10 16:01:53 +08:00
2026-03-16 18:33:06 +08:00
string IContextualUIGeneratorRuleHelper.GetUIResourceSavePath(UIGenerationContext context)
=> _resourcePathResolver.GetResourcePath(context.TargetObject, context.ScriptGenerateData);
2025-11-10 16:01:53 +08:00
2025-12-01 16:45:42 +08:00
public void WriteUIScriptContent(GameObject targetObject, string className, string scriptContent, UIScriptGenerateData scriptGenerateData)
2026-03-16 18:33:06 +08:00
=> _scriptFileWriter.Write(targetObject, className, scriptContent, scriptGenerateData);
2025-11-10 16:01:53 +08:00
2026-03-16 18:33:06 +08:00
void IContextualUIGeneratorRuleHelper.WriteUIScriptContent(UIGenerationContext context, string scriptContent)
=> _scriptFileWriter.Write(context.TargetObject, context.ClassName, scriptContent, context.ScriptGenerateData);
2025-11-13 11:16:31 +08:00
2025-11-10 16:01:53 +08:00
public bool CheckCanGenerate(GameObject targetObject, UIScriptGenerateData scriptGenerateData)
2026-03-16 18:33:06 +08:00
=> _resourcePathResolver.CanGenerate(targetObject, scriptGenerateData);
2025-11-11 10:57:35 +08:00
2026-03-16 18:33:06 +08:00
bool IContextualUIGeneratorRuleHelper.CheckCanGenerate(UIGenerationContext context)
=> _resourcePathResolver.CanGenerate(context.TargetObject, context.ScriptGenerateData);
2025-11-13 11:16:31 +08:00
public string GetReferenceNamespace(List<UIBindData> uiBindDatas)
2026-03-16 18:33:06 +08:00
=> _scriptCodeEmitter.GetReferenceNamespaces(uiBindDatas);
2025-11-13 11:16:31 +08:00
2026-03-16 18:33:06 +08:00
string IContextualUIGeneratorRuleHelper.GetReferenceNamespace(UIGenerationContext context)
=> _scriptCodeEmitter.GetReferenceNamespaces(context.BindDatas?.ToList());
2025-11-13 11:16:31 +08:00
public string GetVariableContent(List<UIBindData> uiBindDatas)
2026-03-16 18:33:06 +08:00
=> _scriptCodeEmitter.GetVariableContent(uiBindDatas, GetPublicComponentByNameRule);
2025-11-13 11:16:31 +08:00
2026-03-16 18:33:06 +08:00
string IContextualUIGeneratorRuleHelper.GetVariableContent(UIGenerationContext context)
=> _scriptCodeEmitter.GetVariableContent(context.BindDatas?.ToList(), GetPublicComponentByNameRule);
2025-11-10 16:01:53 +08:00
}
}