// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "UObject/ObjectMacros.h" #include "Interfaces/IHttpRequest.h" #include "Kismet/BlueprintAsyncActionBase.h" #include "Blueprint/UserWidget.h" #include "Engine/StreamableManager.h" #include "GameFramework/PlayerController.h" #include "Engine/CancellableAsyncAction.h" #include "AsyncAction_CreateWidgetAsync.generated.h" class UGameInstance; 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(BlueprintType) class COMMONGAME_API UAsyncAction_CreateWidgetAsync : public UCancellableAsyncAction { GENERATED_UCLASS_BODY() public: virtual void Cancel() override; UFUNCTION(BlueprintCallable, BlueprintCosmetic, meta=(WorldContext = "WorldContextObject", BlueprintInternalUseOnly="true")) static UAsyncAction_CreateWidgetAsync* CreateWidgetAsync(UObject* WorldContextObject, TSoftClassPtr UserWidgetSoftClass, APlayerController* OwningPlayer, bool bSuspendInputUntilComplete = true); 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; };