70 lines
1.7 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "TutorialManagerSubsystem.generated.h"
struct FTutorialStep;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnStepComplete, int32, CompleteIndex);
/**
*
*/
UCLASS(BlueprintType)
class PROJECTFISH_API UTutorialManagerSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
/** GameInstanceSubsystem */
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
UFUNCTION(BlueprintCallable, Category= TutorialSubsystem)
void InitSteps(TArray<FTutorialStep> Steps);
UFUNCTION(BlueprintCallable, Category= TutorialSubsystem)
void ApplyCurrentTutorialStep();
UFUNCTION(BlueprintCallable, Category= TutorialSubsystem)
void CompleteTutorialStep();
UFUNCTION(BlueprintPure, Category= TutorialSubsystem)
FTutorialStep GetCurrentTutorialStep() const;
UFUNCTION(BlueprintCallable, Category= TutorialSubsystem)
void SetTutorialCompleteOnLevelLoaded();
void OnLevelLoaded(UWorld* World);
protected:
//显示对话框UI
void ShowDialogue();
UFUNCTION()
void OnDialogueCompleted();
//接受任务
void AccepAndFollowQuest();
//显示教程UI
void ShowTutorialUI();
//控制指定UI
void ControlUI();
//创建task
void CreateTask();
protected:
FDelegateHandle LevelLoadedDelegateHandle;
UPROPERTY(BlueprintAssignable)
FOnStepComplete OnStepComplete;
UPROPERTY(BlueprintReadOnly)
bool bTutorialing;
TArray<FTutorialStep> TutorialSteps;
int32 CurrentTutorialStep = 0;
FString DialogueUIPath;
UPROPERTY()
class UDialogueWidget_Base* DialogueWidget;
UPROPERTY()
UUserWidget* TutorialWidget;
UPROPERTY()
class UTutorialTask_Base* TutorialTaskObject;
};