@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using EpicGames.UHT.Types;
|
||||
using UnrealSharpScriptGenerator.Tooltip;
|
||||
using UnrealSharpScriptGenerator.Utilities;
|
||||
|
||||
namespace UnrealSharpScriptGenerator.Exporters;
|
||||
|
||||
public static class EnumExporter
|
||||
{
|
||||
public static void ExportEnum(UhtEnum enumObj)
|
||||
{
|
||||
GeneratorStringBuilder stringBuilder = new GeneratorStringBuilder();
|
||||
|
||||
string moduleName = enumObj.GetNamespace();
|
||||
|
||||
stringBuilder.GenerateTypeSkeleton(moduleName);
|
||||
stringBuilder.AppendTooltip(enumObj);
|
||||
|
||||
AttributeBuilder attributeBuilder = new AttributeBuilder(enumObj);
|
||||
attributeBuilder.AddGeneratedTypeAttribute(enumObj);
|
||||
attributeBuilder.Finish();
|
||||
|
||||
stringBuilder.AppendLine(attributeBuilder.ToString());
|
||||
|
||||
string underlyingType = UnderlyingTypeToString(enumObj.UnderlyingType);
|
||||
stringBuilder.DeclareType(enumObj, "enum", enumObj.GetStructName(), underlyingType, isPartial: false);
|
||||
|
||||
int enumValuesCount = enumObj.EnumValues.Count;
|
||||
for (int i = 0; i < enumValuesCount; i++)
|
||||
{
|
||||
UhtEnumValue enumValue = enumObj.EnumValues[i];
|
||||
|
||||
string toolTip = enumObj.GetMetadata("Tooltip", i);
|
||||
stringBuilder.AppendTooltip(toolTip);
|
||||
|
||||
string cleanValueName = ScriptGeneratorUtilities.GetCleanEnumValueName(enumObj, enumValue);
|
||||
string value = enumValue.Value == -1 ? "," : $" = {enumValue.Value},";
|
||||
|
||||
stringBuilder.AppendLine($"{cleanValueName}{value}");
|
||||
}
|
||||
|
||||
stringBuilder.CloseBrace();
|
||||
FileExporter.SaveGlueToDisk(enumObj, stringBuilder);
|
||||
}
|
||||
|
||||
public static string UnderlyingTypeToString(UhtEnumUnderlyingType underlyingType)
|
||||
{
|
||||
return underlyingType switch
|
||||
{
|
||||
UhtEnumUnderlyingType.Unspecified => "",
|
||||
UhtEnumUnderlyingType.Uint8 => "byte",
|
||||
UhtEnumUnderlyingType.Int8 => "sbyte",
|
||||
UhtEnumUnderlyingType.Int16 => "short",
|
||||
UhtEnumUnderlyingType.Int => "int",
|
||||
UhtEnumUnderlyingType.Int32 => "int",
|
||||
UhtEnumUnderlyingType.Int64 => "long",
|
||||
UhtEnumUnderlyingType.Uint16 => "ushort",
|
||||
UhtEnumUnderlyingType.Uint32 => "uint",
|
||||
UhtEnumUnderlyingType.Uint64 => "ulong",
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(underlyingType), underlyingType, null)
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user