50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | #include "CSAsyncActionBase.h" | |||
|  | #include "UnrealSharpAsync.h"
 | |||
|  | 
 | |||
|  | void UCSAsyncActionBase::Destroy() | |||
|  | { | |||
|  | 	if (UGameInstance* GameInstance = GetWorld()->GetGameInstance()) | |||
|  | 	{ | |||
|  | 		GameInstance->UnregisterReferencedObject(this); | |||
|  | 	} | |||
|  | 
 | |||
|  | 	ManagedCallback.Dispose(); | |||
|  | 	MarkAsGarbage(); | |||
|  | } | |||
|  | 
 | |||
|  | void UCSAsyncActionBase::InvokeManagedCallback(bool bDispose) | |||
|  | { | |||
|  | 	InvokeManagedCallback(this, bDispose); | |||
|  | } | |||
|  | 
 | |||
|  | void UCSAsyncActionBase::InvokeManagedCallback(UObject* WorldContextObject, bool bDispose) | |||
|  | { | |||
|  |     ManagedCallback.Invoke(WorldContextObject, bDispose); | |||
|  | 
 | |||
|  |     if (bDispose) | |||
|  |     { | |||
|  |         Destroy(); | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | void UCSAsyncActionBase::InitializeManagedCallback(FGCHandleIntPtr Callback) | |||
|  | { | |||
|  | 	ManagedCallback = FGCHandle(Callback, GCHandleType::WeakHandle); | |||
|  | 
 | |||
|  | 	if (UGameInstance* GameInstance = GetWorld()->GetGameInstance()) | |||
|  | 	{ | |||
|  | 		GameInstance->RegisterReferencedObject(this); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void UUCSAsyncBaseExporter::InitializeAsyncObject(UCSAsyncActionBase* AsyncAction, FGCHandleIntPtr Callback) | |||
|  | { | |||
|  | 	if (!IsValid(AsyncAction)) | |||
|  | 	{ | |||
|  | 		UE_LOG(LogUnrealSharpAsync, Warning, TEXT("UUCSAsyncBaseExporter::InitializeAsyncObject: AsyncAction is null")); | |||
|  | 		return; | |||
|  | 	} | |||
|  | 	 | |||
|  | 	AsyncAction->InitializeManagedCallback(Callback); | |||
|  | } |