64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
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)
|
|
};
|
|
|
|
}
|
|
} |