Files
UnrealEngineUWP/Engine/Source/Editor/IntroTutorials/Private/TutorialStateSettings.cpp
Jaroslaw Palczynski 2c16d2b417 FStringAssetReference fixes.
All changes regarding e-mail discussion titled "Asset registry shenanigans".

Changes:
1. Engine now actively is getting rid of short asset paths in FStringAssetReference during saving (for all packages) and loading (only for older packages).
2. Deprecated direct access to FStringAssetReference.AssetLongPathname and exposed it via ToString and SetPath -- SetPath is making sure the path is in correct format. If the path can't be found on disk, the path is cleared.
3. Also access to FStringAssetReference.AssetLongPathnam via Blueprints is guarded using custom Make node function that uses SetPath instead of simple assign.
4. StringAssetReferenceMap will now contain only paths to packages (not objects) and ini references
5. GetDependencies now has additional parameter that lets you chose if it should resolve ini references or not. It was left not as default to keep old behaviour.

[CL 2630589 by Jaroslaw Palczynski in Main branch]
2015-07-23 10:49:29 -04:00

144 lines
3.6 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "IntroTutorialsPrivatePCH.h"
#include "TutorialStateSettings.h"
UTutorialStateSettings::UTutorialStateSettings(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
bDismissedAllTutorials = false;
}
void UTutorialStateSettings::PostInitProperties()
{
Super::PostInitProperties();
for(const auto& Progress : TutorialsProgress)
{
TSubclassOf<UEditorTutorial> TutorialClass = LoadClass<UEditorTutorial>(NULL, *Progress.Tutorial.ToString(), NULL, LOAD_None, NULL);
if(TutorialClass != nullptr)
{
UEditorTutorial* Tutorial = TutorialClass->GetDefaultObject<UEditorTutorial>();
ProgressMap.Add(Tutorial, Progress);
}
}
}
int32 UTutorialStateSettings::GetProgress(UEditorTutorial* InTutorial, bool& bOutHaveSeenTutorial) const
{
const FTutorialProgress* FoundProgress = ProgressMap.Find(InTutorial);
if(FoundProgress != nullptr)
{
bOutHaveSeenTutorial = true;
return FoundProgress->CurrentStage;
}
bOutHaveSeenTutorial = false;
return 0;
}
bool UTutorialStateSettings::HaveSeenTutorial(UEditorTutorial* InTutorial) const
{
return ProgressMap.Find(InTutorial) != nullptr;
}
bool UTutorialStateSettings::HaveCompletedTutorial(UEditorTutorial* InTutorial) const
{
const FTutorialProgress* FoundProgress = ProgressMap.Find(InTutorial);
if (FoundProgress != nullptr)
{
return FoundProgress->CurrentStage >= InTutorial->Stages.Num() - 1;
}
return false;
}
void UTutorialStateSettings::RecordProgress(UEditorTutorial* InTutorial, int32 CurrentStage)
{
if(InTutorial != nullptr)
{
FTutorialProgress* FoundProgress = ProgressMap.Find(InTutorial);
if(FoundProgress != nullptr)
{
FoundProgress->CurrentStage = FMath::Max(FoundProgress->CurrentStage, CurrentStage);
}
else
{
FTutorialProgress Progress;
Progress.Tutorial = FStringClassReference(InTutorial->GetClass());
Progress.CurrentStage = CurrentStage;
Progress.bUserDismissed = false;
Progress.bUserDismissedThisSession = false;
ProgressMap.Add(InTutorial, Progress);
}
}
}
void UTutorialStateSettings::DismissTutorial(UEditorTutorial* InTutorial, bool bDismissAcrossSessions)
{
if (InTutorial != nullptr)
{
FTutorialProgress* FoundProgress = ProgressMap.Find(InTutorial);
if (FoundProgress != nullptr)
{
FoundProgress->bUserDismissed = bDismissAcrossSessions;
FoundProgress->bUserDismissedThisSession = true;
}
else
{
FTutorialProgress Progress;
Progress.Tutorial = FStringClassReference(InTutorial->GetClass());
Progress.CurrentStage = 0;
Progress.bUserDismissed = bDismissAcrossSessions;
Progress.bUserDismissedThisSession = true;
ProgressMap.Add(InTutorial, Progress);
}
}
}
bool UTutorialStateSettings::IsTutorialDismissed(UEditorTutorial* InTutorial) const
{
if (GetMutableDefault<UTutorialStateSettings>()->AreAllTutorialsDismissed())
{
return true;
}
const FTutorialProgress* FoundProgress = ProgressMap.Find(InTutorial);
if (FoundProgress != nullptr)
{
return FoundProgress->bUserDismissed || FoundProgress->bUserDismissedThisSession;
}
return false;
}
void UTutorialStateSettings::DismissAllTutorials()
{
bDismissedAllTutorials = true;
}
bool UTutorialStateSettings::AreAllTutorialsDismissed()
{
return bDismissedAllTutorials;
}
void UTutorialStateSettings::SaveProgress()
{
TutorialsProgress.Empty();
for(const auto& ProgressMapEntry : ProgressMap)
{
TutorialsProgress.Add(ProgressMapEntry.Value);
}
SaveConfig();
}
void UTutorialStateSettings::ClearProgress()
{
ProgressMap.Empty();
TutorialsProgress.Empty();
bDismissedAllTutorials = false;
SaveConfig();
}