60 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using EpicGames.Core;
 | |
| using EpicGames.UHT.Types;
 | |
| using UnrealSharpScriptGenerator.PropertyTranslators;
 | |
| using UnrealSharpScriptGenerator.Utilities;
 | |
| 
 | |
| namespace UnrealSharpScriptGenerator.Exporters;
 | |
| 
 | |
| public static class DelegateExporter
 | |
| {
 | |
|     public static void ExportDelegate(UhtFunction function)
 | |
|     {
 | |
|         string delegateName = DelegateBasePropertyTranslator.GetDelegateName(function);
 | |
|         string delegateNamespace = function.GetNamespace();
 | |
|         
 | |
|         GeneratorStringBuilder builder = new();
 | |
|         
 | |
|         builder.GenerateTypeSkeleton(delegateNamespace);
 | |
|         builder.AppendLine();
 | |
|         
 | |
|         string superClass;
 | |
|         if (function.HasAllFlags(EFunctionFlags.MulticastDelegate))
 | |
|         {
 | |
|             superClass = $"MulticastDelegate<{delegateName}>";
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             superClass = $"Delegate<{delegateName}>";
 | |
|         }
 | |
|         
 | |
|         FunctionExporter functionExporter = FunctionExporter.ExportDelegateSignature(builder, function, delegateName);
 | |
|         
 | |
|         builder.DeclareType(function, "class", $"U{delegateName}", superClass);
 | |
|         
 | |
|         FunctionExporter.ExportDelegateGlue(builder, functionExporter);
 | |
|         
 | |
|         builder.AppendLine("static public void InitializeUnrealDelegate(IntPtr nativeDelegateProperty)");
 | |
|         builder.OpenBrace();
 | |
|         ExportDelegateFunctionStaticConstruction(builder, function);
 | |
|         builder.CloseBrace();
 | |
|         builder.CloseBrace();
 | |
|         
 | |
|         FileExporter.SaveGlueToDisk(function, builder);
 | |
|     }
 | |
| 
 | |
|     private static void ExportDelegateFunctionStaticConstruction(GeneratorStringBuilder builder, UhtFunction function)
 | |
|     {
 | |
|         string delegateName = function.SourceName;
 | |
|         builder.AppendLine($"{delegateName}_NativeFunction = FMulticastDelegatePropertyExporter.CallGetSignatureFunction(nativeDelegateProperty);");
 | |
|         if (function.HasParameters)
 | |
|         {
 | |
|             builder.AppendLine($"{delegateName}_ParamsSize = {ExporterCallbacks.UFunctionCallbacks}.CallGetNativeFunctionParamsSize({delegateName}_NativeFunction);");
 | |
|         }
 | |
|         
 | |
|         foreach (UhtProperty parameter in function.Properties)
 | |
|         {
 | |
|             PropertyTranslator propertyTranslator = PropertyTranslatorManager.GetTranslator(parameter)!;
 | |
|             propertyTranslator.ExportParameterStaticConstructor(builder, parameter, function, parameter.SourceName, delegateName);
 | |
|         }
 | |
|     }
 | |
| } |