Files
UnrealEngineUWP/Engine/Source/Editor/IntroTutorials/Private/InteractivityData.cpp
bruce nesbit 0cbe2dd544 Interactivity code support for Template and FirstPerson Tutorials
[CL 2229604 by bruce nesbit in Main branch]
2014-07-24 03:53:33 -04:00

2028 lines
72 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "IntroTutorialsPrivatePCH.h"
#include "InteractiveTutorials.h"
#include "InteractivityData.h"
#include "Runtime/AssetRegistry/Public/IAssetRegistry.h"
void PopulateInteractivityData(TSharedPtr<FInteractiveTutorials> InteractiveTutorials)
{
//////////////////////////////////////////////////////////////////////////
// statics to hold data
static FVector ViewportNavigation_InitialCameraLocation(0.f);
static FRotator ViewportNavigation_InitialCameraRotation(0, 0, 0);
static bool bZoomedIn = false;
static bool bZoomedOut = false;
static FRotator InitialRampRotation(0, 0, 0);
static FVector InitialRampScale(0.f);
static bool bChangedToScaleWidget = false;
static bool bChangedToTranslateWidget = false;
static bool bChangedToRotateWidget = false;
static bool bFinalBridgeSkip = false;
static bool bFinalRampSkip = false;
struct FInEditorTutorial
{
static bool BeginPIE(bool bIsSimulating)
{
return bIsSimulating;
}
static bool EndPIE(bool bIsSimulating)
{
return true;
}
static bool SnappingSet(bool bEnabled, float SnapValue)
{
return bEnabled;
}
static bool FocusOnAnyActor(const TArray<AActor*>& Actors)
{
return (Actors.Num() > 0);
}
static bool FocusOnActors(const TArray<AActor*>& Actors)
{
for (int32 i = 0; i<Actors.Num(); i++)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(Actors[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("Floor Mesh"))
{
return true;
}
}
return false;
}
static bool FocusOnActorsBA(const TArray<AActor*>& Actors)
{
for (int32 i = 0; i<Actors.Num(); i++)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(Actors[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
return true;
}
}
return false;
}
static bool CBSourcesExpanded(bool bExpanded)
{
// proceed if expanded
return bExpanded;
}
static bool CBAssetPathChanged(const FString& NewPath)
{
return (NewPath == TEXT("/Engine"));
}
static bool DroppedCube(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("Shape_Cube"))
{
return true;
}
}
return false;
}
static bool DroppedShape_Wedge_E(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("Shape_Wedge_E"))
{
return true;
}
}
return false;
}
static bool DroppedCylinder(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("Shape_Cylinder"))
{
return true;
}
}
return false;
}
// Z > 200
static bool ActorMoved200(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorLocation().Z) > 200.0f)
{
return true;
}
}
return false;
}
// Z > 1000
static bool ActorMoved1000(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorLocation().Z) > 1000.0f)
{
return true;
}
}
return false;
}
// Any rotation
static bool ActorRotated(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorRotation().IsZero()) != true)
{
return true;
}
}
return false;
}
// Selected
static bool CheckBasicAssetSelected()
{
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator It(*SelectedActors); It; ++It)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(*It);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
return true;
}
}
return false;
}
static bool BasicAssetIsSelected(const TArray<UObject*>& SelectedObjects)
{
for (int32 i = 0; i < SelectedObjects.Num(); ++i)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(SelectedObjects[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
return true;
}
}
return false;
}
// Any scale
static bool ActorScaled(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorScale().Size()) != sqrt(3.0f))
{
return true;
}
}
return false;
}
static bool CubePlacementStarted(const TArray<UObject*>& Assets)
{
return (Assets.Num() == 1) &&
(Assets[0] != NULL) &&
(Assets[0]->GetFName() == FName(TEXT("Shape_Cube")));
}
static bool SelectionChange(UObject* Object)
{
USelection* Selection = Cast<USelection>(Object);
if (Selection)
{
UMaterial* TopMaterial = Selection->GetTop<UMaterial>();
if (TopMaterial != NULL && TopMaterial->GetFName() == FName(TEXT("BasicAsset01")))
{
return true;
}
}
return false;
}
static bool WidgetModeToRotation(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Rotate);
}
static bool WidgetModeToScale(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Scale);
}
static bool WidgetModeToTranslate(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Translate);
}
static bool WidgetModeToAny(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Translate) || (ActivatedMode == FWidget::WM_Scale) || (ActivatedMode == FWidget::WM_Rotate);
}
static bool CycledWidgetModes(FWidget::EWidgetMode ActivatedMode)
{
switch (ActivatedMode)
{
case FWidget::WM_Translate:
bChangedToTranslateWidget = true;
break;
case FWidget::WM_Scale:
bChangedToScaleWidget = true;
break;
case FWidget::WM_Rotate:
bChangedToRotateWidget = true;
break;
}
return (bChangedToScaleWidget && bChangedToTranslateWidget && bChangedToRotateWidget);
}
static void OnBeginSpaceBarWidgetCyclingExcerpt()
{
bChangedToScaleWidget = bChangedToTranslateWidget = bChangedToRotateWidget = false;
}
static bool ChangeCylinderMaterial(UObject* Object)
{
UStaticMeshComponent* Comp = Cast<UStaticMeshComponent>(Object);
if (Comp != NULL)
{
if (Comp->StaticMesh != NULL && Comp->StaticMesh->GetFName() == FName(TEXT("Shape_Cylinder")))
{
return(Comp->Materials.Num() > 0 &&
Comp->Materials[0] != NULL &&
Comp->Materials[0]->GetFName() == FName(TEXT("BasicAsset03")));
}
}
return false;
}
static bool EnablePhysics(UObject* Object)
{
UStaticMeshComponent* Comp = Cast<UStaticMeshComponent>(Object);
if (Comp != NULL)
{
return(Comp->StaticMesh != NULL &&
Comp->StaticMesh->GetFName() == FName(TEXT("Shape_Wedge_E")) &&
Comp->BodyInstance.bSimulatePhysics);
}
return false;
}
static bool DropMaterialOnCube(UObject* Object, AActor* Actor)
{
if (Actor->IsA(AStaticMeshActor::StaticClass()) && Actor->GetActorLabel() == TEXT("Shape_Cube"))
{
if (Object->IsA(UMaterialInterface::StaticClass()) && Object->GetFName() == FName(TEXT("Test_SolidMaterial_Red")))
{
return true;
}
}
return false;
}
static bool EmptyTemplateOpened(const FString& MapName, bool bAsTemplate)
{
return (MapName == TEXT("../../../Engine/Content/Maps/Templates/Template_Default.umap") && bAsTemplate);
}
static bool CBFilterStaticMesh(const FARFilter& NewFilter, bool bIsPrimaryBrowser)
{
return(NewFilter.ClassNames.Contains(FName(TEXT("StaticMesh"))));
}
static bool CBSearchBasicAsset(const FText& SearchText, bool bIsPrimaryBrowser)
{
const FString SearchString = SearchText.ToString();
return(SearchString == TEXT("wedge"));
}
static bool CBBasicAssetSelected(const TArray<class FAssetData>& SelectedAssets, bool bIsPrimaryBrowser)
{
for (int32 AssetIdx = 0; AssetIdx<SelectedAssets.Num(); AssetIdx++)
{
const FAssetData& Data = SelectedAssets[AssetIdx];
if (Data.AssetName == FName(TEXT("Shape_Wedge_E")))
{
return true;
}
}
return false;
}
static bool CamMoved(const FVector& CamLocation, const FRotator& CamRotation, ELevelViewportType ViewportType, int32 ViewIndex)
{
if (ViewportType == LVT_Perspective)
{
// for now, count it as complete if user has translated and rotated
if ((CamLocation != ViewportNavigation_InitialCameraLocation) && (CamRotation != ViewportNavigation_InitialCameraRotation))
{
return true;
}
}
return false;
}
static void OnBeginViewportNavigationExcerpt()
{
// store the beginning camera location for this step so we can later determine when
// user has moved the camera enough to proceed
for (int32 Idx = 0; Idx<GEditor->LevelViewportClients.Num(); ++Idx)
{
FLevelEditorViewportClient const* const VC = GEditor->LevelViewportClients[Idx];
if (VC->IsPerspective())
{
ViewportNavigation_InitialCameraLocation = VC->GetViewLocation();
ViewportNavigation_InitialCameraRotation = VC->GetViewRotation();
break;
}
}
}
static void OnBeginZoomExcerpt()
{
bZoomedIn = bZoomedOut = false;
}
static bool CamZoomed(const FVector& Drag, int32 ViewIndex)
{
FVector const CamFwd = GEditor->AllViewportClients[ViewIndex]->GetViewRotation().Vector();
if (FVector::DotProduct(Drag, CamFwd) > 0.f)
{
bZoomedIn = true;
}
else
{
bZoomedOut = true;
}
return bZoomedOut && bZoomedIn;
}
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
//InTutorial->AddDialogueAudio(TEXT("Stage1"), TEXT("/Engine/Tutorial/Audio/TutorialTest.TutorialTest"));
// Stage2: Create a new default level
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("FileMenu"));
//InTutorial->AddTriggerDelegate(TEXT("Stage2"), FBaseTriggerDelegate::OnMapOpened, FOnMapOpened::CreateStatic(&EmptyTemplateOpened));
// Stage4: Viewport Navigation
//InTutorial->AddBeginExcerptDelegate(TEXT("Stage4"), FOnBeginExcerptDelegate::CreateStatic(&OnBeginViewportNavigationExcerpt));
//InTutorial->AddTriggerDelegate(TEXT("Stage4"), FBaseTriggerDelegate::EditorCameraMoved, FOnEditorCameraMoved::CreateStatic(&CamMoved));
// Stage5: Press F to Quick Focus on floor
//InTutorial->AddTriggerDelegate(TEXT("Stage5"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnAnyActor));
// Stage6: Zoom
//InTutorial->AddBeginExcerptDelegate(TEXT("Stage6"), FOnBeginExcerptDelegate::CreateStatic(&OnBeginZoomExcerpt));
//InTutorial->AddTriggerDelegate(TEXT("Stage6"), FBaseTriggerDelegate::EditorCameraZoomed, FOnEditorCameraZoom::CreateStatic(&CamZoomed));
// Stage7: Get used to camera controls
// Stage8: Scene Outliner info
// Stage9 Press F + selection?
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("SceneOutliner"));
//InTutorial->AddTriggerDelegate(TEXT("Stage9"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnAnyActor));
// Stage11
InTutorial->AddHighlightWidget(TEXT("Stage11"), TEXT("ContentBrowser"));
// Stage12 Show or hide sources panel
InTutorial->AddHighlightWidget(TEXT("Stage12"), TEXT("ContentBrowserSources"));
//InTutorial->AddTriggerDelegate(TEXT("Stage12"), FBaseTriggerDelegate::OnCBSourcesViewChanged, FOnCBSourcesViewChanged::CreateStatic(&CBSourcesExpanded));
// Stage13: Click 'Engine' folder
InTutorial->AddHighlightWidget(TEXT("Stage13"), TEXT("ContentBrowser"));
//InTutorial->AddTriggerDelegate(TEXT("Stage13"), FBaseTriggerDelegate::OnCBAssetPathChanged, FOnCBAssetPathChanged::CreateStatic(&CBAssetPathChanged));
// Stage14
InTutorial->AddHighlightWidget(TEXT("Stage14"), TEXT("ContentBrowser"));
// Stage15 Filters
InTutorial->AddHighlightWidget(TEXT("Stage15"), TEXT("ContentBrowserFiltersCombo"));
//InTutorial->AddTriggerDelegate(TEXT("Stage15"), FBaseTriggerDelegate::OnCBFilterChanged, FOnCBFilterChanged::CreateStatic(&CBFilterStaticMesh));
// Stage16 Content Browser Search
InTutorial->AddHighlightWidget(TEXT("Stage16"), TEXT("ContentBrowserSearchAssets"));
//InTutorial->AddTriggerDelegate(TEXT("Stage16"), FBaseTriggerDelegate::OnCBSearchBoxChanged, FOnCBSearchBoxChanged::CreateStatic(&CBSearchBasicAsset));
// Stage17: Drop in the wedge mesh actor
//InTutorial->AddTriggerDelegate(TEXT("Stage17"), FBaseTriggerDelegate::OnCBAssetSelectionChanged, FOnCBAssetSelectionChanged::CreateStatic(&CBBasicAssetSelected));
// Stage17.1: Center viewport on wedge shape
//InTutorial->AddTriggerDelegate(TEXT("Stage17.1"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActorsBA));
// Stage18
//InTutorial->AddTriggerDelegate(TEXT("Stage18"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToTranslate));
InTutorial->AddHighlightWidget(TEXT("Stage18"), TEXT("TranslateMode"));
// Stage18.1 Press W
//InTutorial->AddTriggerDelegate(TEXT("Stage18.1"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToTranslate));
// Stage19
//InTutorial->AddSkipDelegate(TEXT("Stage19"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelected));
//InTutorial->AddTriggerDelegate(TEXT("Stage19"), FBaseTriggerDelegate::ActorSelectionChanged, FActorSelectionChangedTrigger::CreateStatic(&BasicAssetIsSelected));
// Stage20 Selection auto continue
// Stage22 actual movement Z > 200
//InTutorial->AddTriggerDelegate(TEXT("Stage21"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorMoved200));
// Stage23 Details highlight
InTutorial->AddHighlightWidget(TEXT("Stage23"), TEXT("ActorDetails"));
// Stage24
//InTutorial->AddSkipDelegate(TEXT("Stage24"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelected));
//InTutorial->AddTriggerDelegate(TEXT("Stage24"), FBaseTriggerDelegate::ActorSelectionChanged, FActorSelectionChangedTrigger::CreateStatic(&BasicAssetIsSelected));
// Stage25 Z > 1000
//InTutorial->AddTriggerDelegate(TEXT("Stage25"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorMoved1000));
// Stage26
//InTutorial->AddTriggerDelegate(TEXT("Stage26"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActorsBA));
// Stage27
//InTutorial->AddTriggerDelegate(TEXT("Stage27"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToRotation));
InTutorial->AddHighlightWidget(TEXT("Stage27"), TEXT("RotateMode"));
// Stage 27.1
//InTutorial->AddTriggerDelegate(TEXT("Stage27.1"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToRotation));
// Stage29
//InTutorial->AddTriggerDelegate(TEXT("Stage28"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorRotated));
// Stage30
//InTutorial->AddTriggerDelegate(TEXT("Stage30"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToScale));
InTutorial->AddHighlightWidget(TEXT("Stage30"), TEXT("ScaleMode"));
// Stage30.1
//InTutorial->AddTriggerDelegate(TEXT("Stage30.1"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToScale));
// Stage31
//InTutorial->AddTriggerDelegate(TEXT("Stage31"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorScaled));
// Stage32.1
//InTutorial->AddTriggerDelegate(TEXT("Stage32.1"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToAny));
// Stage32.2: Cycle widget modes with spacebar
//InTutorial->AddTriggerDelegate(TEXT("Stage32.2"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&CycledWidgetModes));
// Stage36 Simulate Physics
InTutorial->AddHighlightWidget(TEXT("Stage35"), TEXT("ActorDetails"));
//InTutorial->AddTriggerDelegate(TEXT("Stage35"), FBaseTriggerDelegate::ObjectPropertyChanged, FObjectPropertyChangedTrigger::CreateStatic(&EnablePhysics));
// Stage37 Start Sim
//InTutorial->AddTriggerDelegate(TEXT("Stage36"), FBaseTriggerDelegate::OnBeginPIE, FOnBeginPIETrigger::CreateStatic(&BeginPIE));
InTutorial->AddHighlightWidget(TEXT("Stage36"), TEXT("LevelToolbarSimulate"));
//Stage39 End Sim
InTutorial->AddHighlightWidget(TEXT("Stage37"), TEXT("LevelToolbarStop"));
//InTutorial->AddTriggerDelegate(TEXT("Stage37"), FBaseTriggerDelegate::OnEndPIE, FOnEndPIETrigger::CreateStatic(&EndPIE));
// InTutorial->AddTriggerDelegate(TEXT("Four"), FBaseTriggerDelegate::OnNewActorsDropped, FOnNewActorsDropped::CreateStatic(&DroppedShape_Wedge_E));
// InTutorial->AddHighlightWidget(TEXT("Four"), TEXT("ContentBrowser"));
//
// InTutorial->AddTriggerDelegate(TEXT("Six"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToRotationOrScale));
// InTutorial->AddHighlightWidget(TEXT("Six"), TEXT("TranslateMode"));
//
// //InTutorial->AddTriggerDelegate(TEXT("Seven"), FBaseTriggerDelegate::OnGridSnappingChanged, FOnGridSnappingChanged::CreateStatic(&SnappingSet));
// //InTutorial->AddHighlightWidget(TEXT("Seven"), TEXT("PositionSnap"));
//
// InTutorial->AddTriggerDelegate(TEXT("Eight"), FBaseTriggerDelegate::OnNewActorsDropped, FOnNewActorsDropped::CreateStatic(&DroppedCylinder));
//
// InTutorial->AddTriggerDelegate(TEXT("Nine"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorMoved));
// InTutorial->AddHighlightWidget(TEXT("Nine"), TEXT("SceneOutliner"));
//
// InTutorial->AddTriggerDelegate(TEXT("Ten"), FBaseTriggerDelegate::ObjectPropertyChanged, FObjectPropertyChangedTrigger::CreateStatic(&ChangeCylinderMaterial));
// InTutorial->AddHighlightWidget(TEXT("Ten"), TEXT("ActorDetails"));
//
// InTutorial->AddTriggerDelegate(TEXT("Eleven"), FBaseTriggerDelegate::OnDropAssetOnActor, FOnDropAssetOnActor::CreateStatic(&DropMaterialOnCube));
// InTutorial->AddHighlightWidget(TEXT("Eleven"), TEXT("ContentBrowser"));
}
};
InteractiveTutorials->BindInteractivityData(FIntroTutorials::InEditorTutorialPath, FBindInteractivityData::CreateStatic(&FInEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FProofOfConceptTutorial_2
{
static bool BeginPIE(bool bIsSimulating)
{
return bIsSimulating;
}
static bool EndPIE()
{
return true;
}
static bool SnappingSet(bool bEnabled, float SnapValue)
{
return bEnabled;
}
static bool FocusOnActors(const TArray<AActor*>& Actors)
{
for (int32 i = 0; i<Actors.Num(); i++)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(Actors[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("Floor Mesh"))
{
return true;
}
}
return false;
}
static bool DroppedCube(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("Shape_Cube"))
{
return true;
}
}
return false;
}
static bool DroppedShape_Wedge_E(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("Shape_Wedge_E"))
{
return true;
}
}
return false;
}
static bool DroppedCylinder(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("Shape_Cylinder"))
{
return true;
}
}
return false;
}
// Z > 200
static bool ActorMoved200(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorLocation().Z) > 200.0f)
{
return true;
}
}
return false;
}
// Z > 1000
static bool ActorMoved1000(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorLocation().Z) > 1000.0f)
{
return true;
}
}
return false;
}
// Any rotation
static bool ActorRotated(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorRotation().IsZero()) != true)
{
return true;
}
}
return false;
}
// Any scale
static bool ActorScaled(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("Shape_Wedge_E"))
{
if ((SMActor->GetActorScale().Size()) != sqrt(3.0f))
{
return true;
}
}
return false;
}
static bool CubePlacementStarted(const TArray<UObject*>& Assets)
{
return (Assets.Num() == 1) &&
(Assets[0] != NULL) &&
(Assets[0]->GetFName() == FName(TEXT("Shape_Cube")));
}
static bool SelectionChange(UObject* Object)
{
USelection* Selection = Cast<USelection>(Object);
if (Selection)
{
UMaterial* TopMaterial = Selection->GetTop<UMaterial>();
if (TopMaterial != NULL && TopMaterial->GetFName() == FName(TEXT("BasicAsset01")))
{
return true;
}
}
return false;
}
static bool WidgetModeToRotation(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Rotate);
}
static bool WidgetModeToScale(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Scale);
}
static bool WidgetModeToTranslate(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Translate);
}
static bool ChangeCylinderMaterial(UObject* Object)
{
UStaticMeshComponent* Comp = Cast<UStaticMeshComponent>(Object);
if (Comp != NULL)
{
if (Comp->StaticMesh != NULL && Comp->StaticMesh->GetFName() == FName(TEXT("Shape_Cylinder")))
{
return(Comp->Materials.Num() > 0 &&
Comp->Materials[0] != NULL &&
Comp->Materials[0]->GetFName() == FName(TEXT("BasicAsset03")));
}
}
return false;
}
static bool DropMaterialOnCube(UObject* Object, AActor* Actor)
{
if (Actor->IsA(AStaticMeshActor::StaticClass()) && Actor->GetActorLabel() == TEXT("Shape_Cube"))
{
if (Object->IsA(UMaterialInterface::StaticClass()) && Object->GetFName() == FName(TEXT("Test_SolidMaterial_Red")))
{
return true;
}
}
return false;
}
static bool ShouldSkipTest()
{
return true;
}
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
//InTutorial->AddSkipDelegate(TEXT("ATLSTAGE1"), FShouldSkipExcerptDelegate::CreateStatic(&ShouldSkipTest));
//ATLSTAGE2
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE2"), TEXT("FileMenu"));
// ATLSTAGE5
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE5"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActors));
//ATLSTAGE8
// ATLSTAGE9 Press F + selection?
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE9"), TEXT("SceneOutliner"));
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE5"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActors));
// ATLSTAGE11
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE11"), TEXT("ContentBrowser"));
// ATLSTAGE12 Show or hide sources panel
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE12"), TEXT("ContentBrowserSourcesToggle"));
// ATLSTAGE13
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE13"), TEXT("ContentBrowser"));
// ATLSTAGE14
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE14"), TEXT("ContentBrowser"));
// ATLSTAGE15 Filters
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE15"), TEXT("ContentBrowserFiltersCombo"));
// ATLSTAGE16
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE16"), TEXT("ContentBrowserSearchAssets"));
// ATLSTAGE17 Content Browser Search
// ATLSTAGE18
// ATLSTAGE19
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE18"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToTranslate));
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE18"), TEXT("TranslateMode"));
// ATLSTAGE20 Selection auto continue
// ATLSTAGE22 actual movement Z > 200
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE22"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorMoved200));
// ATLSTAGE24 Details highlight
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE23"), TEXT("ActorDetails"));
// ATLSTAGE25 Selection auto continue
// ATLSTAGE26 Z > 1000
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE25"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorMoved1000));
// ATLSTAGE27
// ATLSTAGE28
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE27"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToRotation));
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE27"), TEXT("RotateMode"));
// ATLSTAGE29
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE28"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorRotated));
// ATLSTAGE30
// ATLSTAGE31
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE30"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToScale));
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE30"), TEXT("ScaleMode"));
// ATLSTAGE32
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE31"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorScaled));
// ATLSTAGE36 Simulate Physics
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE35"), TEXT("ActorDetails"));
// ATLSTAGE37 Start Sim
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE36"), FBaseTriggerDelegate::OnBeginPIE, FOnBeginPIETrigger::CreateStatic(&BeginPIE));
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE36"), TEXT("LevelToolbarSimulate"));
//ATLSTAGE39 End Sim
InTutorial->AddHighlightWidget(TEXT("ATLSTAGE38"), TEXT("LevelToolbarStop"));
//InTutorial->AddTriggerDelegate(TEXT("ATLSTAGE38"), FBaseTriggerDelegate::OnEndPIE, FOnEndPIETrigger::CreateStatic(&EndPIE));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/inEditorTutorial_2"), FBindInteractivityData::CreateStatic(&FProofOfConceptTutorial_2::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FGamifiedTutorial
{
bool CompleteSelectingObjects(const TArray<UObject*>& SelectedObjects)
{
bool bSphereIsSelected = false;
int32 SelectedObjectCount = 0;
for (int32 i = 0; i < SelectedObjects.Num(); ++i)
{
AActor* Actor = Cast<AActor>(SelectedObjects[i]);
if (Actor)
{
bSphereIsSelected = Actor->GetFName() == FName("StaticMesh_Sphere");
++SelectedObjectCount;
}
}
return bSphereIsSelected && SelectedObjectCount == 1;
}
bool CompleteEditingDetails(UObject* Object)
{
auto Actor = Cast<AActor>(Object);
if (Actor && Actor->GetFName() == FName("StaticMesh_Sphere"))
{
bool bScaleZIs5 = FMath::IsNearlyEqual(Actor->GetTransform().GetScale3D().Z, 5.0f);
return bScaleZIs5;
}
return false;
}
bool CompleteTestBed(FEdMode* EditorMode, bool bIsEnteringMode)
{
return EditorMode->GetID() == "EM_Foliage" && bIsEnteringMode;
}
static bool BeginPIE(bool bIsSimulating)
{
return true;
}
static bool EndPIE(bool bIsSimulating)
{
return true;
}
bool SnappingSet(bool bEnabled, float SnapValue)
{
return bEnabled;
}
bool ActorsDropped(const TArray<UObject*>& DroppedObjects, const TArray<AActor*>& NewActors)
{
for (auto It(DroppedObjects.CreateConstIterator()); It; It++)
{
UObject* DroppedObject = *It;
if (DroppedObject->GetClass() == UStaticMesh::StaticClass() && DroppedObject->GetFName() == TEXT("SM_WalkwaySingle_2"))
{
return true;
}
}
return false;
}
bool ActorMoved(UObject& Object)
{
if (Object.GetClass() == AStaticMeshActor::StaticClass() && Object.GetFName().GetPlainNameString() == TEXT("SM_Bridge"))
{
AActor* Actor = Cast<AActor>(&Object);
if ((Actor->GetActorLocation() - FVector(208.0f, 48.0f, 592.0f)).Size() < 2.0f)
{
return true;
}
}
return false;
}
// Bridge in the correct position
static bool BridgeActorMoved(UObject& Object)
{
AStaticMeshActor const* const SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->StaticMeshComponent && SMActor->StaticMeshComponent->StaticMesh && (SMActor->StaticMeshComponent->StaticMesh->GetName() == TEXT("SM_WalkWaySingle")))
{
if ((SMActor->GetActorLocation().X <= 226.f) && (SMActor->GetActorLocation().X >= 194.f)
&& (SMActor->GetActorLocation().Y >= 404.0f) && (SMActor->GetActorLocation().Y <= 436.0f)
&& (SMActor->GetActorLocation().Z >= 538.0f) && (SMActor->GetActorLocation().Z <= 602.0f))
{
bFinalBridgeSkip = true;
return true;
}
}
return false;
}
static bool BridgeActorMovedManually(UObject& Object)
{
AStaticMeshActor const* const SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->StaticMeshComponent && SMActor->StaticMeshComponent->StaticMesh && (SMActor->StaticMeshComponent->StaticMesh->GetName() == TEXT("SM_WalkWaySingle")))
{
if ((SMActor->GetActorLocation().X == 210.f) && (SMActor->GetActorLocation().Y == 420.f) && (SMActor->GetActorLocation().Z == 570))
{
// values were types in, should be exact
return true;
}
}
return false;
}
// Ramp in the correct position
static bool RampActorMoved(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
if ((SMActor->GetActorLocation().X) <= 439.0f && (SMActor->GetActorLocation().X) >= -25.0f
&& (SMActor->GetActorLocation().Y) <= 3672.0f && (SMActor->GetActorLocation().Y) >= 3613.0f
&& (SMActor->GetActorLocation().Z) >= 98.0f && (SMActor->GetActorLocation().Z) <= 171.0f
&& (SMActor->GetActorRotation().Euler().X) >= -2.0f && (SMActor->GetActorRotation().Euler().X) <= 2
&& (SMActor->GetActorRotation().Euler().Y) >= -15 && (SMActor->GetActorRotation().Euler().Y) <= 15
&& (SMActor->GetActorRotation().Euler().Z) >= -15 && (SMActor->GetActorRotation().Euler().Z) <= 15
&& (SMActor->GetActorScale().Size()) == sqrt(3.0f))
{
bFinalRampSkip = true;
return true;
}
//This is the precise location for the ramp
//if( (SMActor->GetActorLocation() == FVector(210.f, 3650.f, 139.f))
// && (SMActor->GetActorRotation() == FRotator(0,0,0))
// && (SMActor->GetActorScale() == FVector(1.f,1.f,1.f)) )
//{
// return true;
//}
}
return false;
}
static bool CheckBasicAssetSelectedRamp()
{
if (bFinalRampSkip)
{
return false;
}
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator It(*SelectedActors); It; ++It)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(*It);
if (SMActor && SMActor->StaticMeshComponent && SMActor->StaticMeshComponent->StaticMesh && (SMActor->StaticMeshComponent->StaticMesh->GetName() == TEXT("SM_WalkWay_Ramp")))
{
if ((SMActor->GetActorLocation().X) <= 439.0f && (SMActor->GetActorLocation().X) >= -25.0f
&& (SMActor->GetActorLocation().Y) <= 3672.0f && (SMActor->GetActorLocation().Y) >= 3613.0f
&& (SMActor->GetActorLocation().Z) >= 98.0f && (SMActor->GetActorLocation().Z) <= 171.0f
&& (SMActor->GetActorRotation().Euler().X) >= -2.0f && (SMActor->GetActorRotation().Euler().X) <= 2
&& (SMActor->GetActorRotation().Euler().Y) >= -15 && (SMActor->GetActorRotation().Euler().Y) <= 15
&& (SMActor->GetActorRotation().Euler().Z) >= -15 && (SMActor->GetActorRotation().Euler().Z) <= 15
&& (SMActor->GetActorScale().Size()) == sqrt(3.0f))
{
return true;
}
}
}
return false;
}
static bool FinalCheckBasicAssetSelectedRamp()
{
if (bFinalRampSkip)
{
return false;
}
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator It(*SelectedActors); It; ++It)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(*It);
if (SMActor && SMActor->StaticMeshComponent && SMActor->StaticMeshComponent->StaticMesh && (SMActor->StaticMeshComponent->StaticMesh->GetName() == TEXT("SM_WalkWay_Ramp")))
{
if ((SMActor->GetActorLocation().X) <= 439.0f && (SMActor->GetActorLocation().X) >= -25.0f
&& (SMActor->GetActorLocation().Y) <= 3672.0f && (SMActor->GetActorLocation().Y) >= 3613.0f
&& (SMActor->GetActorLocation().Z) >= 98.0f && (SMActor->GetActorLocation().Z) <= 171.0f
&& (SMActor->GetActorRotation().Euler().X) >= -2.0f && (SMActor->GetActorRotation().Euler().X) <= 2
&& (SMActor->GetActorRotation().Euler().Y) >= -15 && (SMActor->GetActorRotation().Euler().Y) <= 15
&& (SMActor->GetActorRotation().Euler().Z) >= -15 && (SMActor->GetActorRotation().Euler().Z) <= 15
&& (SMActor->GetActorScale().Size()) == sqrt(3.0f))
{
bFinalRampSkip = true;
return true;
}
}
}
return false;
}
static bool CheckBasicAssetSelectedBridge()
{
if (bFinalBridgeSkip)
{
return false;
}
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator It(*SelectedActors); It; ++It)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(*It);
if (SMActor && SMActor->StaticMeshComponent && SMActor->StaticMeshComponent->StaticMesh && (SMActor->StaticMeshComponent->StaticMesh->GetName() == TEXT("SM_WalkWaySingle")))
{
if ((SMActor->GetActorLocation().X <= 226.f) && (SMActor->GetActorLocation().X >= 194.f)
&& (SMActor->GetActorLocation().Y >= 404.0f) && (SMActor->GetActorLocation().Y <= 436.0f)
&& (SMActor->GetActorLocation().Z >= 538.0f) && (SMActor->GetActorLocation().Z <= 602.0f))
{
return true;
}
}
}
return false;
}
static bool FinalCheckBasicAssetSelectedBridge()
{
if (bFinalBridgeSkip)
{
return false;
}
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator It(*SelectedActors); It; ++It)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(*It);
if (SMActor && SMActor->StaticMeshComponent && SMActor->StaticMeshComponent->StaticMesh && (SMActor->StaticMeshComponent->StaticMesh->GetName() == TEXT("SM_WalkWaySingle")))
{
if ((SMActor->GetActorLocation().X <= 226.f) && (SMActor->GetActorLocation().X >= 194.f)
&& (SMActor->GetActorLocation().Y >= 404.0f) && (SMActor->GetActorLocation().Y <= 436.0f)
&& (SMActor->GetActorLocation().Z >= 538.0f) && (SMActor->GetActorLocation().Z <= 602.0f))
{
bFinalBridgeSkip = true;
return true;
}
}
}
return false;
}
// Tool Change
static bool WidgetModeToRotation(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Rotate);
}
static bool WidgetModeToScale(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Scale);
}
static bool WidgetModeToTranslate(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Translate);
}
static bool WidgetModeToAny(FWidget::EWidgetMode ActivatedMode)
{
return (ActivatedMode == FWidget::WM_Translate) || (ActivatedMode == FWidget::WM_Scale) || (ActivatedMode == FWidget::WM_Rotate);
}
//////
static void OnBeginRotateRampExcerpt()
{
for (TActorIterator<AStaticMeshActor> It(GEditor->GetEditorWorldContext().World()); It; ++It)
{
if (It->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
InitialRampRotation = It->GetActorRotation();
}
}
}
// Any rotation on ramp
static bool ActorRotatedRamp(UObject& Object)
{
AStaticMeshActor* const SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
return (SMActor->GetActorRotation() != InitialRampRotation);
}
return false;
}
static void OnBeginScaleRampExcerpt()
{
for (TActorIterator<AStaticMeshActor> It(GEditor->GetEditorWorldContext().World()); It; ++It)
{
if (It->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
InitialRampScale = It->GetActorScale();
}
}
}
// Any scale on ramp
static bool ActorScaledRamp(UObject& Object)
{
AStaticMeshActor* const SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
return (SMActor->GetActorScale() != InitialRampScale);
}
return false;
}
// Any movement on ramp
static bool ActorMovedRamp(UObject& Object)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(&Object);
if (SMActor && SMActor->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
if ((SMActor->GetActorLocation().Size()) != 0.0f)
{
return true;
}
}
return false;
}
// Selected walkway
static bool CheckBasicAssetSelectedWalkway()
{
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator It(*SelectedActors); It; ++It)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(*It);
if (SMActor && SMActor->GetActorLabel() == TEXT("SM_WalkwaySingle_2"))
{
return true;
}
}
return false;
}
static bool BasicAssetIsSelectedWalkway(const TArray<UObject*>& SelectedObjects)
{
for (int32 i = 0; i < SelectedObjects.Num(); ++i)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(SelectedObjects[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("SM_WalkwaySingle_2"))
{
return true;
}
}
return false;
}
// Selection Ramp
static bool BasicAssetIsSelectedRamp(const TArray<UObject*>& SelectedObjects)
{
for (int32 i = 0; i < SelectedObjects.Num(); ++i)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(SelectedObjects[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
return true;
}
}
return false;
}
static bool FocusOnActors(const TArray<AActor*>& Actors)
{
for (int32 i = 0; i<Actors.Num(); i++)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(Actors[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("__Floor_Section_Focus_On_Me"))
{
return true;
}
}
return false;
}
static bool FocusOnActorsRoom2(const TArray<AActor*>& Actors)
{
for (int32 i = 0; i<Actors.Num(); i++)
{
AStaticMeshActor* SMActor = Cast<AStaticMeshActor>(Actors[i]);
if (SMActor != NULL && SMActor->GetActorLabel() == TEXT("**Floor_Section_Stage_Two"))
{
return true;
}
}
return false;
}
static bool RampSelected(UObject* SelectedObject)
{
AActor const* const SelectedActor = Cast<AActor>(SelectedObject);
if (SelectedActor && SelectedActor->GetActorLabel() == TEXT("SM_WalkWay_Ramp"))
{
return true;
}
return false;
}
// Find the walkway
static bool CBSearchBasicAsset(const FText& SearchText, bool bIsPrimaryBrowser)
{
const FString SearchString = SearchText.ToString();
return(SearchString == TEXT("SM_WalkwaySingle_2"));
}
static bool CBBasicAssetSelected(const TArray<class FAssetData>& SelectedAssets, bool bIsPrimaryBrowser)
{
for (int32 AssetIdx = 0; AssetIdx<SelectedAssets.Num(); AssetIdx++)
{
const FAssetData& Data = SelectedAssets[AssetIdx];
if (Data.AssetName == FName(TEXT("SM_WalkwaySingle")))
{
return true;
}
}
return false;
}
static bool CamMoved(const FVector& CamLocation, const FRotator& CamRotation, ELevelViewportType ViewportType, int32 ViewIndex)
{
if (ViewportType == LVT_Perspective)
{
// for now, count it as complete if user has translated and rotated
if ((CamLocation != ViewportNavigation_InitialCameraLocation) && (CamRotation != ViewportNavigation_InitialCameraRotation))
{
return true;
}
}
return false;
}
static void OnBeginViewportNavigationExcerpt()
{
// store the beginning camera location for this step so we can later determine when
// user has moved the camera enough to proceed
for (int32 Idx = 0; Idx<GEditor->LevelViewportClients.Num(); ++Idx)
{
FLevelEditorViewportClient const* const VC = GEditor->LevelViewportClients[Idx];
if (VC->IsPerspective())
{
ViewportNavigation_InitialCameraLocation = VC->GetViewLocation();
ViewportNavigation_InitialCameraRotation = VC->GetViewRotation();
break;
}
}
}
static void OnBeginZoomExcerpt()
{
bZoomedIn = bZoomedOut = false;
}
static bool CamZoomed(const FVector& Drag, int32 ViewIndex)
{
FVector const CamFwd = GEditor->AllViewportClients[ViewIndex]->GetViewRotation().Vector();
if (FVector::DotProduct(Drag, CamFwd) > 0.f)
{
bZoomedIn = true;
}
else
{
bZoomedOut = true;
}
return bZoomedOut && bZoomedIn;
}
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
// Stage 3: Viewport Navigation
//InTutorial->AddBeginExcerptDelegate(TEXT("Stage3"), FOnBeginExcerptDelegate::CreateStatic(&OnBeginViewportNavigationExcerpt));
//InTutorial->AddTriggerDelegate(TEXT("Stage3"), FBaseTriggerDelegate::EditorCameraMoved, FOnEditorCameraMoved::CreateStatic(&CamMoved));
// Stage4: Quick Focus
//InTutorial->AddTriggerDelegate(TEXT("Stage4"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActors));
// Stage5: Zoom
//InTutorial->AddBeginExcerptDelegate(TEXT("Stage5"), FOnBeginExcerptDelegate::CreateStatic(&OnBeginZoomExcerpt));
//InTutorial->AddTriggerDelegate(TEXT("Stage5"), FBaseTriggerDelegate::EditorCameraZoomed, FOnEditorCameraZoom::CreateStatic(&CamZoomed));
// Stage6.1
//InTutorial->AddTriggerDelegate(TEXT("Stage6.1"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActors));
InTutorial->AddHighlightWidget(TEXT("Stage6.1"), TEXT("SceneOutliner"));
// Stage7
//InTutorial->AddTriggerDelegate(TEXT("Stage7"), FBaseTriggerDelegate::OnBeginPIE, FOnBeginPIETrigger::CreateStatic(&BeginPIE));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("LevelToolbarPlay"));
// Stage8
//InTutorial->AddTriggerDelegate(TEXT("Stage8"), FBaseTriggerDelegate::OnEndPIE, FOnEndPIETrigger::CreateStatic(&EndPIE));
// Stage9
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("ContentBrowser"));
// Stage10
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("ContentBrowserSearchAssets"));
//InTutorial->AddTriggerDelegate(TEXT("Stage10"), FBaseTriggerDelegate::OnCBSearchBoxChanged, FOnCBSearchBoxChanged::CreateStatic(&CBSearchBasicAsset));
// Stage10.1
//InTutorial->AddTriggerDelegate(TEXT("Stage10.1"), FBaseTriggerDelegate::OnCBAssetSelectionChanged, FOnCBAssetSelectionChanged::CreateStatic(&CBBasicAssetSelected));
//InTutorial->DisableManualAdvanceUntilTriggered(TEXT("Stage10.1"));
// Stage11
InTutorial->AddHighlightWidget(TEXT("Stage11"), TEXT("TranslateMode"));
//InTutorial->AddTriggerDelegate(TEXT("Stage11"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToTranslate));
//InTutorial->AddSkipDelegate(TEXT("Stage11"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedBridge));
// Stage11.1
//InTutorial->AddSkipDelegate(TEXT("Stage11.1"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedBridge));
// Stage12
//InTutorial->AddSkipDelegate(TEXT("Stage12"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedBridge));
// Stage13
//InTutorial->AddTriggerDelegate(TEXT("Stage13"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&BridgeActorMoved));
InTutorial->AddHighlightWidget(TEXT("Stage13"), TEXT("ActorDetails"));
//InTutorial->AddSkipDelegate(TEXT("Stage13"), FShouldSkipExcerptDelegate::CreateStatic(&FinalCheckBasicAssetSelectedBridge));
//InTutorial->DisableManualAdvanceUntilTriggered(TEXT("Stage13"));
// Stage14
//InTutorial->AddTriggerDelegate(TEXT("Stage14"), FBaseTriggerDelegate::OnBeginPIE, FOnBeginPIETrigger::CreateStatic(&BeginPIE));
InTutorial->AddHighlightWidget(TEXT("Stage14"), TEXT("LevelToolbarPlay"));
//InTutorial->DisableManualAdvanceUntilTriggered(TEXT("Stage14"));
// Stage15
//InTutorial->AddTriggerDelegate(TEXT("Stage15"), FBaseTriggerDelegate::OnEndPIE, FOnEndPIETrigger::CreateStatic(&EndPIE));
// Stage16
//InTutorial->AddTriggerDelegate(TEXT("Stage16"), FBaseTriggerDelegate::OnFocusViewportOnActors, FOnFocusViewportOnActors::CreateStatic(&FocusOnActorsRoom2));
InTutorial->AddHighlightWidget(TEXT("Stage16"), TEXT("SceneOutliner"));
// Stage18.1 Select the Ramp
//InTutorial->AddTriggerDelegate(TEXT("Stage18.1"), FBaseTriggerDelegate::OnSelectObject, FOnSelectObject::CreateStatic(&RampSelected));
// Stage19
InTutorial->AddHighlightWidget(TEXT("Stage19"), TEXT("RotateMode"));
//InTutorial->AddTriggerDelegate(TEXT("Stage19"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToRotation));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage19"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage20: Rotating the ramp
//InTutorial->AddBeginExcerptDelegate(TEXT("Stage20"), FOnBeginExcerptDelegate::CreateStatic(&OnBeginRotateRampExcerpt));
//InTutorial->AddTriggerDelegate(TEXT("Stage20"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorRotatedRamp));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage20"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage21
//InTutorial->AddTriggerDelegate(TEXT("Stage21"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorMovedRamp));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage21"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage22
InTutorial->AddHighlightWidget(TEXT("Stage22"), TEXT("ScaleMode"));
//InTutorial->AddTriggerDelegate(TEXT("Stage22"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToScale));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage22"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage23
//InTutorial->AddTriggerDelegate(TEXT("Stage23"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&ActorScaledRamp));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage23"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage24
//InTutorial->AddTriggerDelegate(TEXT("Stage24"), FBaseTriggerDelegate::OnWidgetModeChanged, FOnWidgetModeChanged::CreateStatic(&WidgetModeToAny));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage24"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage25
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage25"), FShouldSkipExcerptDelegate::CreateStatic(&CheckBasicAssetSelectedRamp));
// Stage26
//InTutorial->AddTriggerDelegate(TEXT("Stage26"), FBaseTriggerDelegate::OnEndTransformObject, FOnEndTransformObject::CreateStatic(&RampActorMoved));
InTutorial->AddHighlightWidget(TEXT("Stage26"), TEXT("ActorDetails"));
// In Position, skip all this
//InTutorial->AddSkipDelegate(TEXT("Stage26"), FShouldSkipExcerptDelegate::CreateStatic(&FinalCheckBasicAssetSelectedRamp));
//InTutorial->DisableManualAdvanceUntilTriggered(TEXT("Stage26"));
// Stage27
//InTutorial->AddTriggerDelegate(TEXT("Stage27"), FBaseTriggerDelegate::OnBeginPIE, FOnBeginPIETrigger::CreateStatic(&BeginPIE));
InTutorial->AddHighlightWidget(TEXT("Stage27"), TEXT("LevelToolbarPlay"));
//InTutorial->DisableManualAdvanceUntilTriggered(TEXT("Stage27"));
// Stage27.1
// Stage28
//InTutorial->AddTriggerDelegate(TEXT("Stage28"), FBaseTriggerDelegate::OnEndPIE, FOnEndPIETrigger::CreateStatic(&EndPIE));
}
};
InteractiveTutorials->BindInteractivityData(FIntroTutorials::InEditorGamifiedTutorialPath, FBindInteractivityData::CreateStatic(&FGamifiedTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
// Force Save
struct FManipulationTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("ToolsPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("PMGeometry"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("PLACEMENT"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("ScaleMode"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("TranslateMode"));
InTutorial->AddHighlightWidget(TEXT("Stage11"), TEXT("RotateMode"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/inEditorTutorialManipulation"), FBindInteractivityData::CreateStatic(&FManipulationTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FBlueprintInterfaceTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("ComponentsMode"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("ComponentsPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("GraphMode"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("MyBlueprintPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage11"), TEXT("FullBlueprintPalette"));
InTutorial->AddHighlightWidget(TEXT("Stage12"), TEXT("BlueprintPaletteFavorites"));
InTutorial->AddHighlightWidget(TEXT("Stage13"), TEXT("BlueprintPaletteLibrary"));
InTutorial->AddHighlightWidget(TEXT("Stage14"), TEXT("CompileBlueprint"));
InTutorial->AddHighlightWidget(TEXT("Stage15"), TEXT("DefaultsMode"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/BlueprintInterfaceTutorial"), FBindInteractivityData::CreateStatic(&FBlueprintInterfaceTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FBlueprintMacroLibInterfaceTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("MyBlueprintPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("FullBlueprintPalette"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("BlueprintPaletteFavorites"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BlueprintPaletteLibrary"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("BPEAddNewMacro"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("CompileBlueprint"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/BlueprintMacroLibInterfaceTutorial"), FBindInteractivityData::CreateStatic(&FBlueprintMacroLibInterfaceTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FLevelBlueprintInterfaceTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("MyBlueprintPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("FullBlueprintPalette"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("BlueprintPaletteFavorites"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BlueprintPaletteLibrary"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("CompileBlueprint"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/LevelBlueprintInterfaceTutorial"), FBindInteractivityData::CreateStatic(&FLevelBlueprintInterfaceTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FBlueprintInterfacesInterfaceTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("MyBlueprintPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("BPEAddNewFunction"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("CompileBlueprint"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/BlueprintInterfacesInterfaceTutorial"), FBindInteractivityData::CreateStatic(&FBlueprintInterfacesInterfaceTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FTestHighlightTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("MaterialPalette"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("FullBlueprintPalette"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("BlueprintInspector"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("GraphMode"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("ComponentsMode"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("DefaultsMode"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("LevelViewportTest"));
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("BPECompile"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("BlueprintPaletteLibrary"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("BlueprintCompile"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("Graph"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("ActorDetails"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("BlueprintPaletteFavorites"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMRecentlyPlaced"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMGeometry"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMLights"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMVisual"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMBasic"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMVolumes"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("PMAllClasses"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("SceneOutliner"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("EventGraphTitleBar"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("LevelToolbar"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("MyBlueprintPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BPEAddNewVariable"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BPEAddNewFunction"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BPEAddNewMacro"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BPEAddNewEventGraph"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("BPEAddNewDelegate"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("EM_MeshPaint"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("EM_Landscape"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("EM_Foliage"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("EM_Geometry"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("CycleTransformGizmoCoordSystem"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("RepeatLastLaunch"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("ResumePlaySession"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("PausePlaySession"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("SingleFrameAdvance"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("StopPlaySession"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("PossessEjectPlayer"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("ShowCurrentStatement"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("StepInto"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("CompileBlueprint"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/TestHighlight"), FBindInteractivityData::CreateStatic(&FTestHighlightTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FEditingObjectsTutorial
{
static bool CompleteSelectingObjects(const TArray<UObject*>& SelectedObjects)
{
bool bSphereIsSelected = false;
int32 SelectedObjectCount = 0;
for (int32 i = 0; i < SelectedObjects.Num(); ++i)
{
AActor* Actor = Cast<AActor>(SelectedObjects[i]);
if (Actor)
{
bSphereIsSelected = Actor->GetFName() == FName("StaticMesh_Sphere");
++SelectedObjectCount;
}
}
return bSphereIsSelected && SelectedObjectCount == 1;
}
static bool CompleteEditingDetails(UObject* Object, FPropertyChangedEvent& PropertyChangedEvent)
{
auto Actor = Cast<AActor>(Object);
if (Actor && Actor->GetFName() == FName("StaticMesh_Sphere"))
{
bool bScaleZIs5 = FMath::IsNearlyEqual(Actor->GetTransform().GetScale3D().Z, 5.0f);
return bScaleZIs5;
}
return false;
}
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddTriggerDelegate(TEXT("SelectingObjects"), FBaseTriggerDelegate::ActorSelectionChanged, FActorSelectionChangedTrigger::CreateStatic(&CompleteSelectingObjects));
InTutorial->AddTriggerDelegate(TEXT("EditingDetails"), FBaseTriggerDelegate::ObjectPropertyChanged, FObjectPropertyChangedTrigger::CreateStatic(&CompleteEditingDetails));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/EditingObjects"), FBindInteractivityData::CreateStatic(&FEditingObjectsTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FTestCaseTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("TestCaseOne"), TEXT("ContentBrowserNewAssetCombo"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/TestCase"), FBindInteractivityData::CreateStatic(&FTestCaseTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FTutorialHome
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->SetTutorialStyle(ETutorialStyle::Home);
}
};
InteractiveTutorials->BindInteractivityData(FIntroTutorials::HomePath, FBindInteractivityData::CreateStatic(&FTutorialHome::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FWelcomeTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("EditorViewports"));
InTutorial->AddHighlightWidget(TEXT("Stage2.1"), TEXT("ToolsPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("ActorDetails"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("SceneOutliner"));
InTutorial->AddHighlightWidget(TEXT("Stage6.1"), TEXT("LevelToolbar"));
InTutorial->AddHighlightWidget(TEXT("Stage6.2"), TEXT("MainMenu"));
InTutorial->AddHighlightWidget(TEXT("Stage6.3"), TEXT("PerformanceTools"));
InTutorial->AddHighlightWidget(TEXT("Stage6.4"), TEXT("LevelToolbarPlay"));
}
};
InteractiveTutorials->BindInteractivityData(FIntroTutorials::UE4WelcomeTutorial.TutorialPath, FBindInteractivityData::CreateStatic(&FWelcomeTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FCameraTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("SceneOutliner"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/inEditorTutorialCamera"), FBindInteractivityData::CreateStatic(&FCameraTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInTextureEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InTextureEditorTutorial"), FBindInteractivityData::CreateStatic(&FInTextureEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInMaterialEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InMaterialEditorTutorial"), FBindInteractivityData::CreateStatic(&FInMaterialEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInParticleSystemEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InParticleSystemEditorTutorial"), FBindInteractivityData::CreateStatic(&FInParticleSystemEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInPersonaAnimEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InPersonaAnimEditorTutorial"), FBindInteractivityData::CreateStatic(&FInPersonaAnimEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInPersonaAnimBlueprintEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InPersonaAnimBlueprintEditorTutorial"), FBindInteractivityData::CreateStatic(&FInPersonaAnimBlueprintEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInDestructibleMeshEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InDestructibleMeshEditorTutorial"), FBindInteractivityData::CreateStatic(&FInDestructibleMeshEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInSkeletalMeshEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InSkeletalMeshEditorTutorial"), FBindInteractivityData::CreateStatic(&FInSkeletalMeshEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInStaticMeshEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InStaticMeshEditorTutorial"), FBindInteractivityData::CreateStatic(&FInStaticMeshEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FInSoundCueEditorTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InSoundCueEditorTutorial"), FBindInteractivityData::CreateStatic(&FInSoundCueEditorTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FPlacementTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("Stage13"), TEXT("ToolsPanel"));
InTutorial->AddHighlightWidget(TEXT("Stage13"), TEXT("PLACEMENT"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/inEditorTutorialPlacement"), FBindInteractivityData::CreateStatic(&FPlacementTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FBlueprintSplash
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/InBlueprintEditorTutorial"), FBindInteractivityData::CreateStatic(&FBlueprintSplash::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FAddCodeToProjectTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/AddCodeToProjectTutorial"), FBindInteractivityData::CreateStatic(&FAddCodeToProjectTutorial::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FContentBrowserWalkthrough
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->AddHighlightWidget(TEXT("Stage2"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("Stage3"), TEXT("ContentBrowserNewAsset"));
InTutorial->AddHighlightWidget(TEXT("Stage3.1"), TEXT("ContentBrowserImportAsset"));
InTutorial->AddHighlightWidget(TEXT("Stage4"), TEXT("ContentBrowserSaveDirtyPackages"));
InTutorial->AddHighlightWidget(TEXT("Stage5"), TEXT("ContentBrowserHistoryBack"));
InTutorial->AddHighlightWidget(TEXT("Stage6"), TEXT("ContentBrowserHistoryForward"));
InTutorial->AddHighlightWidget(TEXT("Stage7"), TEXT("ContentBrowserPathPicker"));
InTutorial->AddHighlightWidget(TEXT("Stage8"), TEXT("ContentBrowserPath"));
InTutorial->AddHighlightWidget(TEXT("Stage9"), TEXT("ContentBrowserLock"));
InTutorial->AddHighlightWidget(TEXT("Stage10"), TEXT("ContentBrowserSourcesToggle"));
InTutorial->AddHighlightWidget(TEXT("Stage11"), TEXT("ContentBrowserSources"));
InTutorial->AddHighlightWidget(TEXT("Stage12"), TEXT("ContentBrowserCollections"));
InTutorial->AddHighlightWidget(TEXT("Stage13"), TEXT("ContentBrowserFiltersCombo"));
InTutorial->AddHighlightWidget(TEXT("Stage14"), TEXT("ContentBrowserFilters"));
InTutorial->AddHighlightWidget(TEXT("Stage15"), TEXT("ContentBrowserSearchAssets"));
InTutorial->AddHighlightWidget(TEXT("Stage16"), TEXT("ContentBrowserAssets"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/ContentBrowserWalkthrough"), FBindInteractivityData::CreateStatic(&FContentBrowserWalkthrough::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FTemplateOverview
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->SetTutorialStyle(ETutorialStyle::Default);
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/TemplateTutorials/TemplateOverview"), FBindInteractivityData::CreateStatic(&FTemplateOverview::BindInteractivityData));
//////////////////////////////////////////////////////////////////////////
struct FFirstPersonTemplateTutorial
{
static void BindInteractivityData(const FString& InUDNPath, const TSharedRef<class FInteractiveTutorial>& InTutorial)
{
InTutorial->SetTutorialStyle(ETutorialStyle::Default);
InTutorial->AddHighlightWidget(TEXT("StageCharOpen1"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("StageCharLook"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("StageCharVars"), TEXT("MyBlueprintPanel"));
InTutorial->AddHighlightWidget(TEXT("StageCharComp1"), TEXT("ComponentsMode"));
InTutorial->AddHighlightWidget(TEXT("StageCharComp2"), TEXT("ComponentsPanel"));
InTutorial->AddHighlightWidget(TEXT("StageCharGraph1"), TEXT("ComponentsPanel"));
InTutorial->AddHighlightWidget(TEXT("StageCharInput"), TEXT("EditMenu"));
InTutorial->AddHighlightWidget(TEXT("StageCharPropOpen"), TEXT("DefaultsMode"));
InTutorial->AddHighlightWidget(TEXT("StageProjOpen1"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("StagePropVars"), TEXT("ComponentsMode"));
InTutorial->AddHighlightWidget(TEXT("StageProjComp1"), TEXT("ComponentsPanel"));
InTutorial->AddHighlightWidget(TEXT("StageHUDOpen1"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("StageHUDGraph1"), TEXT("GraphEditorPanel"));
InTutorial->AddHighlightWidget(TEXT("StageGameOpen1"), TEXT("ContentBrowser"));
InTutorial->AddHighlightWidget(TEXT("StageGameProps1"), TEXT("DefaultsMode"));
InTutorial->AddHighlightWidget(TEXT("StageProjProp1"), TEXT("GraphEditorPanel"));
}
};
InteractiveTutorials->BindInteractivityData(TEXT("Shared/Tutorials/TemplateTutorials/FirstPerson"), FBindInteractivityData::CreateStatic(&FFirstPersonTemplateTutorial::BindInteractivityData));
}