34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using Mono.Cecil; | ||
|  | 
 | ||
|  | namespace UnrealSharpWeaver.Utilities; | ||
|  | 
 | ||
|  | public static class DelegateUtilities | ||
|  | { | ||
|  |     public static MethodDefinition GetDelegateInvokeMethod(TypeDefinition typeDefinition) | ||
|  |     { | ||
|  |         foreach (MethodDefinition method in typeDefinition.Methods) | ||
|  |         { | ||
|  |             if (method.Name != "Invoke") | ||
|  |             { | ||
|  |                 continue; | ||
|  |             } | ||
|  |              | ||
|  |             if (!method.ReturnsVoid()) | ||
|  |             { | ||
|  |                 throw new Exception($"{typeDefinition.FullName} is exposed to Unreal Engine, and must have a void return type."); | ||
|  |             } | ||
|  |              | ||
|  |             return method; | ||
|  |         } | ||
|  |          | ||
|  |         throw new Exception($"Delegate type {typeDefinition.FullName} does not have an Invoke method."); | ||
|  |     } | ||
|  |      | ||
|  |     public static string GetUnrealDelegateName(TypeReference typeDefinition) | ||
|  |     { | ||
|  |         string functionName = typeDefinition.FullName; | ||
|  |         functionName = functionName.Replace(".", "_"); | ||
|  |         functionName += "__DelegateSignature"; | ||
|  |         return functionName; | ||
|  |     } | ||
|  | } |