-
Notifications
You must be signed in to change notification settings - Fork 351
Expand file tree
/
Copy pathSLevelEditorFlow.cpp
More file actions
92 lines (78 loc) · 2.28 KB
/
SLevelEditorFlow.cpp
File metadata and controls
92 lines (78 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright https://github.com/MothCocoon/FlowGraph/graphs/contributors
#include "Utils/SLevelEditorFlow.h"
#include "FlowAsset.h"
#include "FlowComponent.h"
#include "Graph/FlowGraphSettings.h"
#include "Editor.h"
#include "GameFramework/WorldSettings.h"
#include "PropertyCustomizationHelpers.h"
#define LOCTEXT_NAMESPACE "SLevelEditorFlow"
void SLevelEditorFlow::Construct(const FArguments& InArgs)
{
CreateFlowWidget();
FEditorDelegates::OnMapOpened.AddRaw(this, &SLevelEditorFlow::OnMapOpened);
}
void SLevelEditorFlow::OnMapOpened(const FString& Filename, bool bAsTemplate)
{
CreateFlowWidget();
}
void SLevelEditorFlow::CreateFlowWidget()
{
if (const UFlowComponent* FlowComponent = FindFlowComponent(); FlowComponent && FlowComponent->RootFlow)
{
FlowAssetPath = FlowComponent->RootFlow->GetPathName();
}
else
{
FlowAssetPath = FString();
}
ChildSlot
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SObjectPropertyEntryBox)
.AllowedClass(GetDefault<UFlowGraphSettings>()->WorldAssetClass.LoadSynchronous())
.DisplayThumbnail(false)
.OnObjectChanged(this, &SLevelEditorFlow::OnFlowChanged)
.ObjectPath(this, &SLevelEditorFlow::GetFlowAssetPath) // needs function to automatically refresh view upon data change
]
];
}
FString SLevelEditorFlow::GetFlowAssetPath() const
{
return FlowAssetPath;
}
void SLevelEditorFlow::OnFlowChanged(const FAssetData& NewAsset)
{
FlowAssetPath = NewAsset.GetObjectPathString();
if (UFlowComponent* FlowComponent = FindFlowComponent())
{
if (UObject* NewObject = NewAsset.GetAsset())
{
FlowComponent->RootFlow = Cast<UFlowAsset>(NewObject);
}
else
{
FlowComponent->RootFlow = nullptr;
}
const bool bSuccess = FlowComponent->MarkPackageDirty();
ensureMsgf(bSuccess, TEXT("World Settings couldn't be marked dirty while changing the assigned Flow Asset."));
}
}
UFlowComponent* SLevelEditorFlow::FindFlowComponent()
{
if (const UWorld* World = GEditor->GetEditorWorldContext().World())
{
if (const AWorldSettings* WorldSettings = World->GetWorldSettings())
{
if (UActorComponent* FoundComponent = WorldSettings->GetComponentByClass(UFlowComponent::StaticClass()))
{
return Cast<UFlowComponent>(FoundComponent);
}
}
}
return nullptr;
}
#undef LOCTEXT_NAMESPACE