You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Added tutorials button in top bar of editor & sub-editors
Icon is only visible if content is available for the editor in question. Split editor settings into two groups - one is persistent settings and one is progress/state. Tutorials record their dismissed state, so users can permenantly disable the 'nag' for a particular tutorial. Tutorial content now solidifies when the mouse is hovered over it, so it can be made easier to read. Fixed crash on startup if an intro tutorial was displaying rich text. Also fixed crash for TTP# 345094, where a zero-length tutorial was being accessed. [CL 2275934 by Thomas Sarkanen in Main branch]
This commit is contained in:
committed by
UnrealBot
parent
59ebc5b08d
commit
8dc16308f3
@@ -4,6 +4,7 @@
|
||||
#include "STutorialRoot.h"
|
||||
#include "SEditorTutorials.h"
|
||||
#include "EditorTutorialSettings.h"
|
||||
#include "TutorialStateSettings.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "STutorialRoot"
|
||||
|
||||
@@ -76,14 +77,14 @@ void STutorialRoot::SummonTutorialBrowser(TSharedRef<SWindow> InWindow, const FS
|
||||
}
|
||||
}
|
||||
|
||||
void STutorialRoot::LaunchTutorial(UEditorTutorial* InTutorial, bool bInRestart, TWeakPtr<SWindow> InNavigationWindow)
|
||||
void STutorialRoot::LaunchTutorial(UEditorTutorial* InTutorial, bool bInRestart, TWeakPtr<SWindow> InNavigationWindow, FSimpleDelegate InOnTutorialClosed, FSimpleDelegate InOnTutorialExited)
|
||||
{
|
||||
if(InTutorial != nullptr)
|
||||
{
|
||||
CurrentTutorial = InTutorial;
|
||||
|
||||
bool bHaveSeenTutorial = false;
|
||||
CurrentTutorialStage = bInRestart ? 0 : GetDefault<UEditorTutorialSettings>()->GetProgress(CurrentTutorial, bHaveSeenTutorial);
|
||||
CurrentTutorialStage = bInRestart ? 0 : GetDefault<UTutorialStateSettings>()->GetProgress(CurrentTutorial, bHaveSeenTutorial);
|
||||
|
||||
// launch tutorial for all windows we wrap - any tutorial can display over any window
|
||||
for(auto& TutorialWidget : TutorialWidgets)
|
||||
@@ -99,12 +100,23 @@ void STutorialRoot::LaunchTutorial(UEditorTutorial* InTutorial, bool bInRestart,
|
||||
{
|
||||
bIsNavigationWindow = (TutorialWidget.Value.Pin()->GetParentWindow() == InNavigationWindow.Pin());
|
||||
}
|
||||
TutorialWidget.Value.Pin()->LaunchTutorial(bIsNavigationWindow);
|
||||
TutorialWidget.Value.Pin()->LaunchTutorial(bIsNavigationWindow, InOnTutorialClosed, InOnTutorialExited);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void STutorialRoot::CloseAllTutorialContent()
|
||||
{
|
||||
for (auto& TutorialWidget : TutorialWidgets)
|
||||
{
|
||||
if (TutorialWidget.Value.IsValid())
|
||||
{
|
||||
TutorialWidget.Value.Pin()->HideContent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void STutorialRoot::HandleNextClicked(TWeakPtr<SWindow> InNavigationWindow)
|
||||
{
|
||||
GoToNextStage(InNavigationWindow);
|
||||
@@ -137,8 +149,8 @@ void STutorialRoot::HandleHomeClicked()
|
||||
{
|
||||
if(CurrentTutorial != nullptr)
|
||||
{
|
||||
GetMutableDefault<UEditorTutorialSettings>()->RecordProgress(CurrentTutorial, CurrentTutorialStage);
|
||||
GetMutableDefault<UEditorTutorialSettings>()->SaveProgress();
|
||||
GetMutableDefault<UTutorialStateSettings>()->RecordProgress(CurrentTutorial, CurrentTutorialStage);
|
||||
GetMutableDefault<UTutorialStateSettings>()->SaveProgress();
|
||||
}
|
||||
|
||||
CurrentTutorial = nullptr;
|
||||
@@ -204,7 +216,7 @@ void STutorialRoot::GoToNextStage(TWeakPtr<SWindow> InNavigationWindow)
|
||||
TSubclassOf<UEditorTutorial> NextTutorialClass = LoadClass<UEditorTutorial>(NULL, *CurrentTutorial->NextTutorial.AssetLongPathname, NULL, LOAD_None, NULL);
|
||||
if(NextTutorialClass != nullptr)
|
||||
{
|
||||
LaunchTutorial(NextTutorialClass->GetDefaultObject<UEditorTutorial>(), true, InNavigationWindow);
|
||||
LaunchTutorial(NextTutorialClass->GetDefaultObject<UEditorTutorial>(), true, InNavigationWindow, FSimpleDelegate(), FSimpleDelegate());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -214,10 +226,10 @@ void STutorialRoot::GoToNextStage(TWeakPtr<SWindow> InNavigationWindow)
|
||||
else
|
||||
{
|
||||
CurrentTutorialStage = FMath::Min(CurrentTutorialStage + 1, CurrentTutorial->Stages.Num() - 1);
|
||||
GetMutableDefault<UEditorTutorialSettings>()->RecordProgress(CurrentTutorial, CurrentTutorialStage);
|
||||
GetMutableDefault<UTutorialStateSettings>()->RecordProgress(CurrentTutorial, CurrentTutorialStage);
|
||||
}
|
||||
|
||||
if (CurrentTutorial != nullptr && (CurrentTutorial != PreviousTutorial || CurrentTutorialStage != PreviousTutorialStage))
|
||||
if (CurrentTutorial != nullptr && CurrentTutorialStage < CurrentTutorial->Stages.Num() && (CurrentTutorial != PreviousTutorial || CurrentTutorialStage != PreviousTutorialStage))
|
||||
{
|
||||
CurrentTutorial->HandleTutorialStageStarted(CurrentTutorial->Stages[CurrentTutorialStage].Name);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user