A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DialogueSearchUtilities.cpp
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
3
4
5#include "DlgHelper.h"
9
11// FDialogueSearchUtilities
12TSharedPtr<FDialogueSearchFoundResult> FDialogueSearchUtilities::GetGraphNodesForEventEventName(
13 FName EventName,
15)
16{
17 TSharedPtr<FDialogueSearchFoundResult> FoundResult = FDialogueSearchFoundResult::Make();
18
19 const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(Dialogue->GetGraph());
20 for (const UDialogueGraphNode* GraphNode : Graph->GetAllDialogueGraphNodes())
21 {
22 // Enter events
23 if (IsEventInArray(EventName, EDlgEventType::Event, GraphNode->GetDialogueNode().GetNodeEnterEvents()))
24 {
25 FoundResult->GraphNodes.Add(GraphNode);
26 }
27 }
28
29 return FoundResult;
30}
31
32TSharedPtr<FDialogueSearchFoundResult> FDialogueSearchUtilities::GetGraphNodesForCustomEvent(
33 const UClass* EventClass,
35)
36{
37 TSharedPtr<FDialogueSearchFoundResult> FoundResult = FDialogueSearchFoundResult::Make();
38
39 const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(Dialogue->GetGraph());
40 for (const UDialogueGraphNode* GraphNode : Graph->GetAllDialogueGraphNodes())
41 {
42 // Enter events
43 if (IsCustomEventInArray(EventClass, GraphNode->GetDialogueNode().GetNodeEnterEvents()))
44 {
45 FoundResult->GraphNodes.Add(GraphNode);
46 }
47 }
48
49 return FoundResult;
50}
51
53 FName ConditionName,
55)
56{
57 TSharedPtr<FDialogueSearchFoundResult> FoundResult = FDialogueSearchFoundResult::Make();
58
59 const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(Dialogue->GetGraph());
60 for (const UDialogueGraphNode_Base* GraphNodeBase : Graph->GetAllBaseDialogueGraphNodes())
61 {
62 if (const UDialogueGraphNode* GraphNode = Cast<UDialogueGraphNode>(GraphNodeBase))
63 {
64 // Node
65 // Node Enter conditions
67 GraphNode->GetDialogueNode().GetNodeEnterConditions()))
68 {
69 FoundResult->GraphNodes.Add(GraphNode);
70 }
71
72 // The children are handled by the edges, below
73 }
74 else if (const UDialogueGraphNode_Edge* EdgeNode = Cast<UDialogueGraphNode_Edge>(GraphNodeBase))
75 {
76 // Edge
78 EdgeNode->GetDialogueEdge().Conditions))
79 {
80 FoundResult->EdgeNodes.Add(EdgeNode);
81 }
82 }
83 }
84
85 return FoundResult;
86}
87
89 FName VariableName,
91 EDlgEventType EventType,
92 EDlgConditionType ConditionType
93)
94{
95 TSharedPtr<FDialogueSearchFoundResult> FoundResult = FDialogueSearchFoundResult::Make();
96
97 const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(Dialogue->GetGraph());
98 for (const UDialogueGraphNode_Base* GraphNodeBase : Graph->GetAllBaseDialogueGraphNodes())
99 {
100 if (const UDialogueGraphNode* GraphNode = Cast<UDialogueGraphNode>(GraphNodeBase))
101 {
102 // The root node does not have searchable info
103 if (GraphNode->IsRootNode())
104 {
105 continue;
106 }
107
108 // Node
109 const UDlgNode& Node = GraphNode->GetDialogueNode();
110
111 // Enter events
112 if (IsEventInArray(VariableName, EventType, Node.GetNodeEnterEvents()))
113 {
114 FoundResult->GraphNodes.Add(GraphNode);
115 }
116
117 // Enter conditions
118 if (IsConditionInArray(VariableName, ConditionType, Node.GetNodeEnterConditions()))
119 {
120 FoundResult->GraphNodes.Add(GraphNode);
121 }
122
123 // The children are handled by the edges, below
124 }
125 else if (const UDialogueGraphNode_Edge* EdgeNode = Cast<UDialogueGraphNode_Edge>(GraphNodeBase))
126 {
127 // Edge
128 if (IsConditionInArray(VariableName, ConditionType,
129 EdgeNode->GetDialogueEdge().Conditions))
130 {
131 FoundResult->EdgeNodes.Add(EdgeNode);
132 }
133 }
134 }
135
136 return FoundResult;
137}
138
139
141 FName VariableName,
142 const UDlgDialogue* Dialogue,
143 EDlgTextArgumentType ArgumentType,
144 TSharedPtr<FDialogueSearchFoundResult>& FoundResult
145)
146{
147 const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(Dialogue->GetGraph());
148 for (const UDialogueGraphNode_Base* GraphNodeBase : Graph->GetAllBaseDialogueGraphNodes())
149 {
150 if (const UDialogueGraphNode* GraphNode = Cast<UDialogueGraphNode>(GraphNodeBase))
151 {
152 // The root node does not have searchable info
153 if (GraphNode->IsRootNode())
154 {
155 continue;
156 }
157
158 // Node
159 const UDlgNode& Node = GraphNode->GetDialogueNode();
160 if (IsTextArgumentInArray(VariableName, ArgumentType, Node.GetTextArguments()))
161 {
162 FoundResult->GraphNodes.Add(GraphNode);
163 }
164 }
165 else if (const UDialogueGraphNode_Edge* EdgeNode = Cast<UDialogueGraphNode_Edge>(GraphNodeBase))
166 {
167 // Edge
168 if (IsTextArgumentInArray(VariableName, ArgumentType, EdgeNode->GetDialogueEdge().GetTextArguments()))
169 {
170 FoundResult->EdgeNodes.Add(EdgeNode);
171 }
172 }
173 }
174}
175
176bool FDialogueSearchUtilities::DoesGUIDContainString(const FGuid& GUID, const FString& SearchString, FString& OutGUIDString)
177{
178 const FString GUIDToSearchFor = SearchString.TrimStartAndEnd();
179
180 // Test every possible format
181 const TArray<FString> GUIDStrings = {
182 GUID.ToString(EGuidFormats::Digits),
183 GUID.ToString(EGuidFormats::DigitsWithHyphens),
184 GUID.ToString(EGuidFormats::DigitsWithHyphensInBraces),
185 GUID.ToString(EGuidFormats::DigitsWithHyphensInParentheses),
186 GUID.ToString(EGuidFormats::HexValuesInBraces),
187 GUID.ToString(EGuidFormats::UniqueObjectGuid)
188 };
189 for (const FString& GUIDString : GUIDStrings)
190 {
191 if (GUIDString.Contains(GUIDToSearchFor))
192 {
193 OutGUIDString = GUIDString;
194 return true;
195 }
196 }
197
198 return false;
199}
200
201bool FDialogueSearchUtilities::DoesObjectClassNameContainString(const UObject* Object, const FString& SearchString, FString& OutNameString)
202{
203 if (!Object)
204 {
205 return false;
206 }
207
208 const FString Name = FDlgHelper::CleanObjectName(Object->GetClass()->GetName());
209 if (Name.Contains(SearchString))
210 {
211 OutNameString = Name;
212 return true;
213 }
214
215 return false;
216}
EDlgConditionType
UENUM(BlueprintType)
EDlgEventType
UENUM(BlueprintType)
Definition DlgEvent.h:16
EDlgTextArgumentType
UENUM(BlueprintType)
static bool IsCustomEventInArray(const UClass *EventClass, const TArray< FDlgEvent > &Events)
static bool DoesGUIDContainString(const FGuid &GUID, const FString &SearchString, FString &OutGUIDString)
static TSharedPtr< FDialogueSearchFoundResult > GetGraphNodesForCustomEvent(const UClass *EventClass, const UDlgDialogue *Dialogue)
static TSharedPtr< FDialogueSearchFoundResult > GetGraphNodesForEventEventName(FName EventName, const UDlgDialogue *Dialogue)
static bool DoesObjectClassNameContainString(const UObject *Object, const FString &SearchString, FString &OutNameString)
static TSharedPtr< FDialogueSearchFoundResult > GetGraphNodesForConditionEventCallName(FName ConditionName, const UDlgDialogue *Dialogue)
static bool IsConditionInArray(FName ConditionName, EDlgConditionType ConditionType, const TArray< FDlgCondition > &Conditions)
static bool IsEventInArray(FName EventName, EDlgEventType EventType, const TArray< FDlgEvent > &Events)
static void GetGraphNodesForTextArgumentVariable(FName VariableName, const UDlgDialogue *Dialogue, EDlgTextArgumentType ArgumentType, TSharedPtr< FDialogueSearchFoundResult > &FoundResult)
static bool IsTextArgumentInArray(FName TextArgumentName, EDlgTextArgumentType TextArgumentType, const TArray< FDlgTextArgument > &TextArguments)
static TSharedPtr< FDialogueSearchFoundResult > GetGraphNodesForVariablesOfNameAndType(FName VariableName, const UDlgDialogue *Dialogue, EDlgEventType EventType, EDlgConditionType ConditionType)
static FString CleanObjectName(FString Name)
TArray< UDialogueGraphNode_Base * > GetAllBaseDialogueGraphNodes() const
TArray< UDialogueGraphNode * > GetAllDialogueGraphNodes() const
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
Definition DlgDialogue.h:85
UCLASS(BlueprintType, Abstract, EditInlineNew, ClassGroup = "Dialogue")
Definition DlgNode.h:40
virtual const TArray< FDlgTextArgument > & GetTextArguments() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
Definition DlgNode.h:254
virtual const TArray< FDlgEvent > & GetNodeEnterEvents() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
Definition DlgNode.h:170
virtual const TArray< FDlgCondition > & GetNodeEnterConditions() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
Definition DlgNode.h:145
static TSharedPtr< FDialogueSearchFoundResult > Make()