Files
wyatt 648386cd73 Lua向C#逻辑迁移 一期 #13
将整个插件代码上传
2025-10-26 21:48:39 +08:00

58 lines
2.0 KiB
C#

using System;
using EpicGames.UHT.Types;
using UnrealSharpScriptGenerator.Utilities;
namespace UnrealSharpScriptGenerator.PropertyTranslators;
public class EnumPropertyTranslator : BlittableTypePropertyTranslator
{
public EnumPropertyTranslator() : base(typeof(UhtByteProperty), "", PropertyKind.Enum)
{
}
public override bool CanExport(UhtProperty property)
{
return property is UhtEnumProperty or UhtByteProperty && GetEnum(property) != null;
}
public override string ConvertCPPDefaultValue(string defaultValue, UhtFunction function, UhtProperty parameter)
{
UhtEnum enumObj = GetEnum(parameter)!;
int index = enumObj.GetIndexByName(defaultValue);
string valueName = ScriptGeneratorUtilities.GetCleanEnumValueName(enumObj, enumObj.EnumValues[index]);
return $"{GetManagedType(parameter)}.{valueName}";
}
public override string GetManagedType(UhtProperty property)
{
UhtEnum enumObj = GetEnum(property)!;
return enumObj.GetFullManagedName();
}
public override string GetMarshaller(UhtProperty property)
{
return $"EnumMarshaller<{GetManagedType(property)}>";
}
public override void ExportCppDefaultParameterAsLocalVariable(GeneratorStringBuilder builder, string variableName, string defaultValue,
UhtFunction function, UhtProperty paramProperty)
{
if (defaultValue.Contains("::"))
{
defaultValue = defaultValue.Substring(defaultValue.LastIndexOf("::") + 2);
}
string fullEnumName = GetManagedType(paramProperty);
builder.AppendLine($"{fullEnumName} {variableName} = {fullEnumName}.{defaultValue};");
}
private static UhtEnum? GetEnum(UhtProperty property)
{
return property switch
{
UhtEnumProperty enumProperty => enumProperty.Enum,
UhtByteProperty byteProperty => byteProperty.Enum,
_ => throw new InvalidOperationException("Property is not an enum or byte property")
};
}
}