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