@ -0,0 +1,58 @@
|
||||
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")
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user