// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Components/GameStateComponent.h" #include "GameFeaturePluginOperationResult.h" #include "LoadingProcessInterface.h" #include "ControlFlowNode.h" #include "LyraFrontendStateComponent.generated.h" enum class ECommonUserOnlineContext : uint8; enum class ECommonUserPrivilege : uint8; class UCommonActivatableWidget; class ULyraExperienceDefinition; class UCommonUserInfo; UCLASS(Abstract) class ULyraFrontendStateComponent : public UGameStateComponent, public ILoadingProcessInterface { GENERATED_BODY() public: ULyraFrontendStateComponent(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); //~UActorComponent interface virtual void BeginPlay() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; //~End of UActorComponent interface //~ILoadingProcessInterface interface virtual bool ShouldShowLoadingScreen(FString& OutReason) const override; //~End of ILoadingProcessInterface private: void OnExperienceLoaded(const ULyraExperienceDefinition* Experience); UFUNCTION() void OnUserInitialized(const UCommonUserInfo* UserInfo, bool bSuccess, FText Error, ECommonUserPrivilege RequestedPrivilege, ECommonUserOnlineContext OnlineContext); void FlowStep_WaitForUserInitialization(FControlFlowNodeRef SubFlow); void FlowStep_TryShowPressStartScreen(FControlFlowNodeRef SubFlow); void FlowStep_TryShowMainScreen(FControlFlowNodeRef SubFlow); bool bShouldShowLoadingScreen = true; UPROPERTY(EditAnywhere, Category = UI) TSoftClassPtr PressStartScreenClass; UPROPERTY(EditAnywhere, Category = UI) TSoftClassPtr MainScreenClass; TSharedPtr FrontEndFlow; // If set, this is the in-progress press start screen task FControlFlowNodePtr InProgressPressStartScreen; };