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