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