// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Engine/CancellableAsyncAction.h" #include "UObject/SoftObjectPtr.h" #include "AsyncAction_CreateWidgetAsync.generated.h" #define UE_API COMMONGAME_API class APlayerController; class UGameInstance; class UUserWidget; class UWorld; struct FFrame; struct FStreamableHandle; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCreateWidgetAsyncDelegate, UUserWidget*, UserWidget); /** * Load the widget class asynchronously, the instance the widget after the loading completes, and return it on OnComplete. */ UCLASS(MinimalAPI, BlueprintType) class UAsyncAction_CreateWidgetAsync : public UCancellableAsyncAction { GENERATED_UCLASS_BODY() public: UE_API virtual void Cancel() override; UFUNCTION(BlueprintCallable, BlueprintCosmetic, meta=(WorldContext = "WorldContextObject", BlueprintInternalUseOnly="true")) static UE_API UAsyncAction_CreateWidgetAsync* CreateWidgetAsync(UObject* WorldContextObject, TSoftClassPtr UserWidgetSoftClass, APlayerController* OwningPlayer, bool bSuspendInputUntilComplete = true); UE_API virtual void Activate() override; public: UPROPERTY(BlueprintAssignable) FCreateWidgetAsyncDelegate OnComplete; private: void OnWidgetLoaded(); FName SuspendInputToken; TWeakObjectPtr OwningPlayer; TWeakObjectPtr World; TWeakObjectPtr GameInstance; bool bSuspendInputUntilComplete; TSoftClassPtr UserWidgetSoftClass; TSharedPtr StreamingHandle; }; #undef UE_API