Files
BusyRabbit/Plugins/UnrealSharp/Source/UnrealSharpManagedGlue/Exporters/EnumExporter.cs

64 lines
2.4 KiB
C#
Raw Normal View History

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)
};
}
}