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