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