87 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using EpicGames.UHT.Types; | |||
|  | using UnrealSharpScriptGenerator.Utilities; | |||
|  | 
 | |||
|  | namespace UnrealSharpScriptGenerator.PropertyTranslators; | |||
|  | 
 | |||
|  | public class MulticastDelegatePropertyTranslator : DelegateBasePropertyTranslator | |||
|  | { | |||
|  |     public MulticastDelegatePropertyTranslator() : base(EPropertyUsageFlags.Property) | |||
|  |     { | |||
|  |     } | |||
|  | 
 | |||
|  |     private string GetBackingField(UhtProperty property) | |||
|  |     { | |||
|  |         return $"{property.SourceName}_BackingField"; | |||
|  |     } | |||
|  | 
 | |||
|  |     public override bool CanExport(UhtProperty property) | |||
|  |     { | |||
|  |         UhtMulticastDelegateProperty multicastDelegateProperty = (UhtMulticastDelegateProperty) property; | |||
|  |         return ScriptGeneratorUtilities.CanExportParameters(multicastDelegateProperty.Function); | |||
|  |     } | |||
|  | 
 | |||
|  |     public override string GetManagedType(UhtProperty property) | |||
|  |     { | |||
|  |         UhtMulticastDelegateProperty multicastDelegateProperty = (UhtMulticastDelegateProperty) property; | |||
|  |         return $"TMulticastDelegate<{GetFullDelegateName(multicastDelegateProperty.Function)}>"; | |||
|  |     } | |||
|  | 
 | |||
|  |     public override void ExportPropertyStaticConstructor(GeneratorStringBuilder builder, UhtProperty property, string nativePropertyName) | |||
|  |     { | |||
|  |         base.ExportPropertyStaticConstructor(builder, property, nativePropertyName); | |||
|  |          | |||
|  |         UhtMulticastDelegateProperty multicastDelegateProperty = (UhtMulticastDelegateProperty) property; | |||
|  |         if (multicastDelegateProperty.Function.HasParameters) | |||
|  |         { | |||
|  |             string fullDelegateName = GetFullDelegateName(((UhtMulticastDelegateProperty) property).Function, true); | |||
|  |             builder.AppendLine($"{fullDelegateName}.InitializeUnrealDelegate({nativePropertyName}_NativeProperty);"); | |||
|  |         } | |||
|  |     } | |||
|  |      | |||
|  |     public override void ExportPropertyVariables(GeneratorStringBuilder builder, UhtProperty property, string propertyEngineName) | |||
|  |     { | |||
|  |         base.ExportPropertyVariables(builder, property, propertyEngineName); | |||
|  |         string backingField = GetBackingField(property); | |||
|  |          | |||
|  |         UhtMulticastDelegateProperty multicastDelegateProperty = (UhtMulticastDelegateProperty) property; | |||
|  |         string fullDelegateName = GetFullDelegateName(multicastDelegateProperty.Function); | |||
|  |          | |||
|  |         builder.AppendLine($"private TMulticastDelegate<{fullDelegateName}> {backingField};"); | |||
|  |     } | |||
|  | 
 | |||
|  |     public override void ExportPropertySetter(GeneratorStringBuilder builder, UhtProperty property, | |||
|  |         string propertyManagedName) | |||
|  |     { | |||
|  |         string backingField = GetBackingField(property); | |||
|  |          | |||
|  |         UhtMulticastDelegateProperty multicastDelegateProperty = (UhtMulticastDelegateProperty) property; | |||
|  |         string fullDelegateName = GetFullDelegateName(multicastDelegateProperty.Function); | |||
|  |          | |||
|  |         builder.AppendLine($"if (value == {backingField})"); | |||
|  |         builder.OpenBrace(); | |||
|  |         builder.AppendLine("return;"); | |||
|  |         builder.CloseBrace(); | |||
|  |         builder.AppendLine($"{backingField} = value;"); | |||
|  |         builder.AppendLine($"MulticastDelegateMarshaller<{fullDelegateName}>.ToNative(IntPtr.Add(NativeObject, {propertyManagedName}_Offset), 0, value);"); | |||
|  |     } | |||
|  | 
 | |||
|  |     public override void ExportPropertyGetter(GeneratorStringBuilder builder, UhtProperty property, string propertyManagedName) | |||
|  |     { | |||
|  |         string backingField = GetBackingField(property); | |||
|  |         string propertyFieldName = GetNativePropertyField(propertyManagedName); | |||
|  |          | |||
|  |         UhtMulticastDelegateProperty multicastDelegateProperty = (UhtMulticastDelegateProperty) property; | |||
|  |         string fullDelegateName = GetFullDelegateName(multicastDelegateProperty.Function); | |||
|  |          | |||
|  |         builder.AppendLine($"if ({backingField} == null)"); | |||
|  |         builder.OpenBrace(); | |||
|  |         builder.AppendLine($"{backingField} = MulticastDelegateMarshaller<{fullDelegateName}>.FromNative(IntPtr.Add(NativeObject, {propertyManagedName}_Offset), {propertyFieldName}, 0);"); | |||
|  |         builder.CloseBrace(); | |||
|  |         builder.AppendLine($"return {backingField};"); | |||
|  |     } | |||
|  | 
 | |||
|  |     public override string GetNullValue(UhtProperty property) | |||
|  |     { | |||
|  |         return "null"; | |||
|  |     } | |||
|  | } |