Files
UnrealEngineUWP/Engine/Source/Editor/IntroTutorials/Private/TutorialStateSettings.h
Andrew Rodham 8ff0d8b98b Added config migration path for newer versions of the engine.
Newly installed versions of the engine will now attempt to copy the project-agnostic config settings from a previous engine installation. This happens by way of a versioned manifest that copies old versions when the manifest does not exist, or is a different version. This code path is benign for non-installed versions of the engine (or FPaths::ShouldSaveToUserDir() is false).

EditorGameAgnosticSettings and EditorUserSettings ini paths have been renamed to EditorSettings and EditorPerProjectUserSettings respectively to better convey their purpose. In general, most settings should be saved in EditorSettings (project-agnostic) so that they apply regardless of which project is open. We have some way to go migrating existing settings for this to be the case, however.

Some previously per-project configuration files are now project-agnostic (such as Editor.ini, EditorKeyBindings.ini, and EditorLayout.ini)

GEditor->Access...Settings and GEditor->Get...Settings have been removed in favor of direct access of the CDO through GetMutableDefault<> and GetDefault<> respectively. Global config ini filenames that are not set up are now neither loaded nor saved on build machines, to handle the problem of indeterminate state more generically.

This addresses UETOOL-270 (Most editor preferences should be project-agnostic)

[CL 2517558 by Andrew Rodham in Main branch]
2015-04-20 10:12:55 -04:00

81 lines
2.1 KiB
C++

// 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<FTutorialProgress> 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<UEditorTutorial*, FTutorialProgress> ProgressMap;
/** Record if user has chosen to cancel all tutorials */
UPROPERTY(Config)
bool bDismissedAllTutorials;
};