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