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