A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DlgDialogueEditorAccess.cpp
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
3
4#include "DlgDialogue.h"
11#include "Nodes/DlgNode.h"
12
14// FDlgDialogueEditorAccess
16{
17 if (UDialogueGraphNode* DialogueGraphNode = Cast<UDialogueGraphNode>(GraphNode))
18 {
19 DialogueGraphNode->UpdateEdgesFromDialogueNode();
20 }
21}
22
24{
25 UDialogueGraph* DialogueGraph = CastChecked<UDialogueGraph>(FDialogueEditorUtilities::CreateNewGraph(Dialogue, NAME_None,
26 UDialogueGraph::StaticClass(), UDialogueGraphSchema::StaticClass()));
27 DialogueGraph->bAllowDeletion = false;
28
29 return CastChecked<UEdGraph>(DialogueGraph);
30}
31
34{
35 FCompilerResultsLog MessageLog;
36 const UDlgSystemSettings* Settings = GetDefault<UDlgSystemSettings>();
37 FDialogueCompilerContext CompilerContext(Dialogue, Settings, MessageLog);
38 CompilerContext.Compile();
39 //FDialogueEditorUtilities::RefreshDetailsView(Dialogue->GetGraph(), true);
40}
41
44{
45 CastChecked<UDialogueGraph>(Dialogue->GetGraph())->RemoveAllNodes();
46
47 // Clear the references from the Dialogue Nodes
48 Dialogue->GetMutableStartNode()->ClearGraphNode();
49 const TArray<UDlgNode*>& Nodes = Dialogue->GetNodes();
50 const int32 NodesNum = Nodes.Num();
51 for (int32 NodeIndex = 0; NodeIndex < NodesNum; NodeIndex++)
52 {
53 Nodes[NodeIndex]->ClearGraphNode();
54 }
55}
56
59{
60 Dialogue->DisableCompileDialogue();
61 UDialogueGraph* DialogueGraph = CastChecked<UDialogueGraph>(Dialogue->GetGraph());
62 const TArray<UDialogueGraphNode*> DialogueGraphNodes = DialogueGraph->GetAllDialogueGraphNodes();
63
64 // Array that maps from Index (in DialogueGraphNodes) => Array of old pins
65 TArray<TArray<UEdGraphPin*>> OldPinsMap;
66
67 // Step 1. Copy all of the pins from the graph nodes, and create new input/output pin
68 for (int32 GraphNodeIndex = 0, GraphNodesNum = DialogueGraphNodes.Num(); GraphNodeIndex < GraphNodesNum; GraphNodeIndex++)
69 {
70 UDialogueGraphNode* GraphNode = DialogueGraphNodes[GraphNodeIndex];
71 // Assume we do not have any invalid edges
72 check(GraphNode->GetDialogueNode().GetNodeOpenChildren_DEPRECATED().Num() == 0)
73 OldPinsMap.Add(GraphNode->Pins);
74 GraphNode->Pins.Empty();
75 // Creates the new input and output pin
76 GraphNode->AllocateDefaultPins();
77
78 // Clean comment if it is only a digit, from this version there is a nice widget overlay that shows the index ;)
79 if (GraphNode->NodeComment.TrimStartAndEnd().IsNumeric() || GraphNode->IsRootNode())
80 {
81 GraphNode->NodeComment.Empty();
82 GraphNode->bCommentBubbleVisible = false;
83 }
84 }
85
86 // Step 2. Create new links
87 for (int32 GraphNodeIndex = 0, GraphNodesNum = DialogueGraphNodes.Num(); GraphNodeIndex < GraphNodesNum; GraphNodeIndex++)
88 {
89 UDialogueGraphNode* GraphNode = DialogueGraphNodes[GraphNodeIndex];
90
91 // Convert
92 for (UEdGraphPin* OldPin : OldPinsMap[GraphNodeIndex])
93 {
94 if (OldPin->LinkedTo.Num() == 0 || OldPin->Direction == EGPD_Input)
95 {
96 continue;
97 }
98
99 check(OldPin->LinkedTo.Num() == 1);
100 check(OldPin->Direction == EGPD_Output);
101
102 UDialogueGraphNode* ConnectedNode = CastChecked<UDialogueGraphNode>(OldPin->LinkedTo[0]->GetOwningNode());
103 // Make a proxy (selectable) edge graph node
104 UDialogueGraphNode_Edge* GraphNode_Edge =
105 FDialogueEditorUtilities::SpawnGraphNodeFromTemplate<UDialogueGraphNode_Edge>(
106 DialogueGraph, GraphNode->GetDefaultEdgePosition(), false
107 );
108 GraphNode_Edge->CreateConnections(GraphNode, ConnectedNode);
109 }
110 GraphNode->CheckAll();
111 }
112 DialogueGraph->AutoPositionGraphNodes();
113
114 // Cleanup
115 for (TArray<UEdGraphPin*> OldPins : OldPinsMap)
116 {
117 for (UEdGraphPin* OldPin : OldPins)
118 {
119 UDialogueGraphNode::DestroyPin(OldPin);
120 }
121 }
122
123 OldPinsMap.Empty();
124 Dialogue->EnableCompileDialogue();
125 Dialogue->MarkPackageDirty();
126}
127
128
130{
131 if (!Object || !GraphNode)
132 {
133 return;
134 }
135
137 if (!ClosestNode)
138 {
139 return;
140 }
141
142 Object->Rename(nullptr, ClosestNode, REN_DontCreateRedirectors);
143}
static UEdGraph * CreateNewGraph(UObject *ParentScope, FName GraphName, TSubclassOf< UEdGraph > GraphClass, TSubclassOf< UEdGraphSchema > SchemaClass)
static UDlgNode * GetClosestNodeFromGraphNode(UEdGraphNode *GraphNode)
void RemoveAllGraphNodes(UDlgDialogue *Dialogue) const override
void CompileDialogueNodesFromGraphNodes(UDlgDialogue *Dialogue) const override
void SetNewOuterForObjectFromGraphNode(UObject *Object, UEdGraphNode *GraphNode) const override
UEdGraph * CreateNewDialogueGraph(UDlgDialogue *Dialogue) const override
void UpdateDialogueToVersion_UseOnlyOneOutputAndInputPin(UDlgDialogue *Dialogue) const override
void UpdateGraphNodeEdges(UEdGraphNode *GraphNode) override
void AutoPositionGraphNodes() const
TArray< UDialogueGraphNode * > GetAllDialogueGraphNodes() const
void CreateConnections(UDialogueGraphNode *ParentNode, UDialogueGraphNode *ChildNode)
FIntPoint GetDefaultEdgePosition() const
const DlgNodeType & GetDialogueNode() const
void CheckAll() const override
virtual bool IsRootNode() const
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
Definition DlgDialogue.h:85
UCLASS(BlueprintType, Abstract, EditInlineNew, ClassGroup = "Dialogue")
Definition DlgNode.h:40
UCLASS(Config = Engine, DefaultConfig, meta = (DisplayName = "Dialogue System Settings"))