// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #pragma once #include "EditorTutorial.h" #include "TutorialStateSettings.generated.h" /** Track the progress of an individual tutorial */ USTRUCT() struct FTutorialProgress { GENERATED_USTRUCT_BODY() FTutorialProgress() { bUserDismissedThisSession = false; } UPROPERTY() FStringClassReference Tutorial; UPROPERTY() int32 CurrentStage; UPROPERTY() bool bUserDismissed; /** Non-persistent flag indicating the user dismissed this tutorial */ bool bUserDismissedThisSession; }; /** Tutorial settings used to track completion state */ UCLASS(config=EditorSettings) class UTutorialStateSettings : public UObject { GENERATED_UCLASS_BODY() UPROPERTY(Config) TArray TutorialsProgress; /** UObject interface */ virtual void PostInitProperties() override; /** Reset the progress and completion sate of all tutorials */ void ClearProgress(); /** Get the recorded progress of the pass-in tutorial */ int32 GetProgress(UEditorTutorial* InTutorial, bool& bOutHaveSeenTutorial) const; /** Check if we have seen the passed-in tutorial before */ bool HaveSeenTutorial(UEditorTutorial* InTutorial) const; /** Check if completed the passed in tutorial (i.e. seen all of its stages) */ bool HaveCompletedTutorial(UEditorTutorial* InTutorial) const; /** Flag a tutorial as dismissed */ void DismissTutorial(UEditorTutorial* InTutorial, bool bDismissAcrossSessions); /** Check if a tutorial has been dismissed */ bool IsTutorialDismissed(UEditorTutorial* InTutorial) const; /** Record the progress of the passed-in tutorial */ void RecordProgress(UEditorTutorial* InTutorial, int32 CurrentStage); /** Save the progress of all our tutorials */ void SaveProgress(); /** Dismiss all tutorials, used by right-click option on scholar cap button (STutorialButton) */ void DismissAllTutorials(); /** Returns true if user has dismissed tutorials */ bool AreAllTutorialsDismissed(); private: /** Recorded progress */ TMap ProgressMap; /** Record if user has chosen to cancel all tutorials */ UPROPERTY(Config) bool bDismissedAllTutorials; };