4#include "Widgets/Docking/SDockTab.h"
5#include "AssetRegistryModule.h"
7#include "WorkspaceMenuStructureModule.h"
8#include "WorkspaceMenuStructure.h"
9#include "EdGraphNode_Comment.h"
22#define LOCTEXT_NAMESPACE "SDialogueBrowser"
24#if ENGINE_MINOR_VERSION >= 24
25 #define NY_ARRAY_COUNT UE_ARRAY_COUNT
27 #define NY_ARRAY_COUNT ARRAY_COUNT
49 const FName TabID =
FName(*FString::Printf(TEXT(
"GlobalNotYetDialogueFindResults_%02d"), TabIdx + 1));
62 const TSharedPtr<FDialogueSearchResult>& OutParentNode,
66 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
70 bool bContainsSearchString =
false;
75 bContainsSearchString =
true;
76 const FText Category = FText::Format(
77 LOCTEXT(
"DlgTextArgumentDisplayString",
"TextArgument.DisplayString at index = {0}"),
78 FText::AsNumber(ArgumentIndex)
92 bContainsSearchString =
true;
93 const FText Category = FText::Format(
94 LOCTEXT(
"DlgTextArgumentParticipantName",
"TextArgument.ParticipantName at index = {0}"),
95 FText::AsNumber(ArgumentIndex)
109 bContainsSearchString =
true;
110 const FText Category = FText::Format(
111 LOCTEXT(
"DlgTextArgumentVariableName",
"TextArgument.VariableName at index = {0}"),
112 FText::AsNumber(ArgumentIndex)
128 bContainsSearchString =
true;
129 const FText Category = FText::Format(
130 LOCTEXT(
"DlgTextArgumentCustomTextArgument",
"TextArgument.CustomTextArgument at index = {0}"),
131 FText::AsNumber(ArgumentIndex)
135 FText::FromString(FoundName),
142 return bContainsSearchString;
148 const TSharedPtr<FDialogueSearchResult>& OutParentNode,
149 int32 ConditionIndex,
150 FName ConditionMemberName
153 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
157 bool bContainsSearchString =
false;
163 bContainsSearchString =
true;
164 const FText Category = FText::Format(
165 LOCTEXT(
"DlgConditionParticipantName",
"{0}.ParticipantName at index = {1}"),
166 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
180 bContainsSearchString =
true;
181 const FText Category = FText::Format(
182 LOCTEXT(
"DlgConditionCallbackName",
"{0}.CallbackName at index = {01}"),
183 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
194 if (!InDlgCondition.
NameValue.IsNone() &&
197 bContainsSearchString =
true;
198 const FText Category = FText::Format(
199 LOCTEXT(
"DlgConditionNameValue",
"{0}.NameValue at index = {1}"),
200 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
204 FText::FromName(InDlgCondition.
NameValue),
214 bContainsSearchString =
true;
215 const FText Category = FText::Format(
216 LOCTEXT(
"DlgConditionOtherParticipantName",
"{0}.OtherParticipantName at index = {1}"),
217 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
231 bContainsSearchString =
true;
232 const FText Category = FText::Format(
233 LOCTEXT(
"DlgConditionOtherVariableName",
"{0}.OtherVariableName at index = {1}"),
234 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
250 bContainsSearchString =
true;
251 const FText Category = FText::Format(
252 LOCTEXT(
"DlgConditionCustomCondition",
"{0}.CustomCondition at index = {1}"),
253 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
257 FText::FromString(FoundName),
270 bContainsSearchString =
true;
271 const FText Category = FText::Format(
272 LOCTEXT(
"DlgConditioGUID",
"{0}.GUID at index = {1}"),
273 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
277 FText::FromString(FoundGUID),
290 bContainsSearchString =
true;
291 const FText Category = FText::Format(
292 LOCTEXT(
"DlgConditionIntValue",
"{0}.IntValue at index = {1}"),
293 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
307 bContainsSearchString =
true;
308 const FText Category = FText::Format(
309 LOCTEXT(
"DlgConditionFloatValue",
"{0}.FloatValue at index = {1}"),
310 FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
321 return bContainsSearchString;
327 const TSharedPtr<FDialogueSearchResult>& OutParentNode,
329 FName EventMemberName
332 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
336 bool bContainsSearchString =
false;
342 bContainsSearchString =
true;
343 const FText Category = FText::Format(
344 LOCTEXT(
"DlgEventParticipantName",
"{0}.ParticipantName at index = {1}"),
345 FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
359 bContainsSearchString =
true;
360 const FText Category = FText::Format(
361 LOCTEXT(
"DlgEventCallbackName",
"{0}.EventName at index = {1}"),
362 FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
376 bContainsSearchString =
true;
377 const FText Category = FText::Format(
378 LOCTEXT(
"DlgEventNameValue",
"{0}.NameValue at index = {1}"),
379 FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
394 bContainsSearchString =
true;
395 const FText Category = FText::Format(
396 LOCTEXT(
"DlgEventCustomEvent",
"{0}.CustomEvent at index = {1}"),
397 FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
401 FText::FromString(FoundName),
414 bContainsSearchString =
true;
415 const FText Category = FText::Format(
416 LOCTEXT(
"DlgEventIntValue",
"{0}.IntValue at index = {1}"),
417 FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
431 bContainsSearchString =
true;
432 const FText Category = FText::Format(
433 LOCTEXT(
"DlgEventFloatValue",
"{0}.FloatValue at index = {1}"),
434 FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
445 return bContainsSearchString;
451 const TSharedPtr<FDialogueSearchResult>& OutParentNode
454 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
458 bool bContainsSearchString =
false;
463 bContainsSearchString =
true;
464 const FText Category = LOCTEXT(
"DlgEdgText",
"Edge.Text");
479 LOCTEXT(
"EdgeTextNamespaceName_Found",
"Edge Text Namespace"), TEXT(
"Edge Text Localization Namespace"),
480 LOCTEXT(
"EdgeTextKey_Found",
"Edge Text Key"), TEXT(
"Edge Text Localization Key")
481 ) || bContainsSearchString;
485 for (int32 Index = 0, Num = InDlgEdge.
Conditions.Num(); Index < Num; Index++)
493 ) || bContainsSearchString;
500 bContainsSearchString =
true;
501 const FText Category = LOCTEXT(
"DlgEdgeSpeakerState",
"Edge.SpeakerState");
511 const TArray<FDlgTextArgument>& TextArguments = InDlgEdge.
GetTextArguments();
512 for (int32 Index = 0, Num = TextArguments.Num(); Index < Num; Index++)
514 bContainsSearchString =
QueryDlgTextArgument(SearchFilter, TextArguments[Index], OutParentNode, Index) || bContainsSearchString;
517 return bContainsSearchString;
523 const TSharedPtr<FDialogueSearchResult>& OutParentNode
526 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid() || !IsValid(InGraphNode))
531 bool bContainsSearchString =
false;
534 const FString NodeType = Node.GetNodeTypeString();
537 const FText DisplayText = FText::Format(
538 LOCTEXT(
"TreeGraphNodeCategory",
"{0} Node at index {1}"),
539 FText::FromString(NodeType), FText::AsNumber(NodeIndex)
541 TSharedPtr<FDialogueSearchResult_GraphNode> TreeGraphNode = MakeShared<FDialogueSearchResult_GraphNode>(DisplayText, OutParentNode);
542 TreeGraphNode->SetCategory(FText::FromString(NodeType));
543 TreeGraphNode->SetGraphNode(InGraphNode);
549 if (FString::FromInt(NodeIndex).Contains(SearchFilter.
SearchString))
551 bContainsSearchString =
true;
558 if (InGraphNode->NodeComment.Contains(SearchFilter.
SearchString))
560 bContainsSearchString =
true;
563 FText::FromString(InGraphNode->NodeComment),
564 LOCTEXT(
"NodeCommentKey",
"Comment on Node"),
565 TEXT(
"Comment on Node")
573 bContainsSearchString =
true;
577 LOCTEXT(
"ParticipantNameKey",
"Participant Name"),
578 TEXT(
"Participant Name")
585 bContainsSearchString =
true;
589 LOCTEXT(
"DescriptionKey",
"Text"),
599 LOCTEXT(
"TextNamespaceName_Found",
"Text Namespace"), TEXT(
"Text Localization Namespace"),
600 LOCTEXT(
"TextKey_Found",
"Text Key"), TEXT(
"Text Localization Key")
601 ) || bContainsSearchString;
606 for (int32 Index = 0, Num = EnterConditions.Num(); Index < Num; Index++)
610 EnterConditions[Index],
613 TEXT(
"EnterCondition")
614 ) || bContainsSearchString;
619 for (int32 Index = 0, Num = EnterEvents.Num(); Index < Num; Index++)
627 ) || bContainsSearchString;
634 bContainsSearchString =
true;
638 LOCTEXT(
"SpeakerStateKey",
"Speaker State"),
639 TEXT(
"Speaker State")
645 for (int32 Index = 0, Num = TextArguments.Num(); Index < Num; Index++)
647 bContainsSearchString =
QueryDlgTextArgument(SearchFilter, TextArguments[Index], TreeGraphNode, Index) || bContainsSearchString;
656 bContainsSearchString =
true;
659 FText::FromString(FoundName),
660 LOCTEXT(
"NodeDataKey",
"Node Data"),
672 bContainsSearchString =
true;
675 FText::FromString(FoundGUID),
676 LOCTEXT(
"NodeGUID",
"Node GUID"),
685 const TArray<FDlgSpeechSequenceEntry>& SpeechSequenceArray = SpeechSequence->GetNodeSpeechSequence();
686 for (int32 Index = 0, Num = SpeechSequenceArray.Num(); Index < Num; Index++)
693 bContainsSearchString =
true;
694 const FText Category = FText::Format(LOCTEXT(
"SequenceEntrySpeaker",
"SequenceEntry.Speaker at index = {0}"), FText::AsNumber(Index));
699 const FText TextCategory = FText::Format(LOCTEXT(
"SequenceEntryText",
"SequenceEntry.Text at index = {0}"), FText::AsNumber(Index));
702 bContainsSearchString =
true;
707 const FText NamespaceCategory = FText::FromString(TEXT(
"Namespace ") + TextCategory.ToString());
708 const FText KeyCategory = FText::FromString(TEXT(
"Key ") + TextCategory.ToString());
712 NamespaceCategory, NamespaceCategory.ToString(),
713 KeyCategory, KeyCategory.ToString()
714 ) || bContainsSearchString;
718 const FText EdgeTextCategory = FText::Format(LOCTEXT(
"SequenceEntryEdgeText",
"SequenceEntry.EdgeText at index = {0}"), FText::AsNumber(Index));
721 bContainsSearchString =
true;
726 const FText NamespaceCategory = FText::FromString(TEXT(
"Namespace ") + EdgeTextCategory.ToString());
727 const FText KeyCategory = FText::FromString(TEXT(
"Key ") + EdgeTextCategory.ToString());
731 NamespaceCategory, NamespaceCategory.ToString(),
732 KeyCategory, KeyCategory.ToString()
733 ) || bContainsSearchString;
740 bContainsSearchString =
true;
741 const FText Category = FText::Format(LOCTEXT(
"SequenceEntrySpeakerState",
"SequenceEntry.SpeakerState at index = {0}"), FText::AsNumber(Index));
747 if (bContainsSearchString)
749 OutParentNode->AddChild(TreeGraphNode);
752 return bContainsSearchString;
758 const TSharedPtr<FDialogueSearchResult>& OutParentNode
761 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid() || !IsValid(InEdgeNode))
765 bool bContainsSearchString =
false;
768 int32 FromParent = -1;
778 const FText DisplayText = FText::Format(LOCTEXT(
"EdgeNodeDisplaytext",
"Edge between {0} -> {1}"),
779 FText::AsNumber(FromParent), FText::AsNumber(ToChild));
780 TSharedPtr<FDialogueSearchResult_EdgeNode> TreeEdgeNode = MakeShared<FDialogueSearchResult_EdgeNode>(DisplayText, OutParentNode);
781 TreeEdgeNode->SetCategory(DisplayText);
782 TreeEdgeNode->SetEdgeNode(InEdgeNode);
786 bContainsSearchString =
QueryDlgEdge(SearchFilter, DialogueEdge, TreeEdgeNode) || bContainsSearchString;
788 if (bContainsSearchString)
790 OutParentNode->AddChild(TreeEdgeNode);
793 return bContainsSearchString;
798 const UEdGraphNode_Comment* InCommentNode,
799 const TSharedPtr<FDialogueSearchResult>& OutParentNode
807 if (InCommentNode->NodeComment.Contains(SearchFilter.
SearchString))
809 const FText Category = LOCTEXT(
"TreeNodeCommentCategory",
"Comment Node");
810 TSharedPtr<FDialogueSearchResult_CommentNode> TreeCommentNode = MakeShared<FDialogueSearchResult_CommentNode>(Category, OutParentNode);
811 TreeCommentNode->SetCategory(Category);
812 TreeCommentNode->SetCommentNode(InCommentNode);
816 FText::FromString(InCommentNode->NodeComment),
821 OutParentNode->AddChild(TreeCommentNode);
830 TSharedPtr<FDialogueSearchResult>& OutParentNode
833 if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid() || !IsValid(InDialogue))
838 const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(InDialogue->GetGraph());
839 TSharedPtr<FDialogueSearchResult_DialogueNode> TreeDialogueNode = MakeShared<FDialogueSearchResult_DialogueNode>(
840 FText::FromString(InDialogue->GetPathName()), OutParentNode
842 TreeDialogueNode->SetDialogue(InDialogue);
845 bool bFoundInDialogue =
false;
849 bool bFoundInNode =
false;
852 bFoundInNode =
QueryGraphNode(SearchFilter, GraphNode, TreeDialogueNode);
856 bFoundInNode =
QueryEdgeNode(SearchFilter, EdgeNode, TreeDialogueNode);
858 else if (UEdGraphNode_Comment* CommentNode = Cast<UEdGraphNode_Comment>(Node))
860 bFoundInNode =
QueryCommentNode(SearchFilter, CommentNode, TreeDialogueNode);
868 bFoundInDialogue = bFoundInNode || bFoundInDialogue;
877 bFoundInDialogue =
true;
880 FText::FromString(FoundGUID),
881 LOCTEXT(
"DialogueGUID",
"Dialogue GUID"),
882 TEXT(
"Dialogue.GUID")
887 if (bFoundInDialogue)
889 OutParentNode->AddChild(TreeDialogueNode);
892 return bFoundInDialogue;
897 TSharedPtr<FDialogueSearchResult>& OutParentNode
914 int32 NumOpenGlobalFindResultsTabs = 0;
919 NumOpenGlobalFindResultsTabs++;
928 if (NumOpenGlobalFindResultsTabs > 1 || TabIdx > 0)
931 return FText::Format(
932 LOCTEXT(
"GlobalFindResultsTabNameWithIndex",
"Find in Dialogues {0}"),
933 FText::AsNumber(TabIdx + 1)
938 return LOCTEXT(
"GlobalFindResultsTabName",
"Find in Dialogues");
946 if (FindResultsPtr.Pin() == FindResults)
957 TAttribute<FText> Label = TAttribute<FText>::Create(
961 TSharedRef<SDockTab> NewTab = SNew(SDockTab)
962 .TabRole(ETabRole::NomadTab)
964 .ToolTipText(LOCTEXT(
"GlobalFindResultsTabTooltip",
"Search for a string in all Dialogue assets."));
967 .bIsSearchWindow(
false)
968 .ContainingTab(NewTab);
970 NewTab->SetContent(FindResults);
978 TSet<FName> OpenGlobalTabIDs;
983 TSharedPtr<SFindInDialogues> FindResults = FindResultsPtr.Pin();
984 if (FindResults.IsValid())
986 OpenGlobalTabIDs.Add(FindResults->GetHostTabId());
994 if (!OpenGlobalTabIDs.Contains(GlobalTabId))
998 if (NewTab.IsValid())
1000 return StaticCastSharedRef<SFindInDialogues>(NewTab->GetContent());
1005 return TSharedPtr<SFindInDialogues>();
1011 TSharedPtr<SFindInDialogues> FindResultsToUse;
1014 TSharedPtr<SFindInDialogues> FindResults = FindResultsPtr.Pin();
1015 if (FindResults.IsValid())
1017 FindResultsToUse = FindResults;
1022 if (FindResultsToUse.IsValid())
1033 return FindResultsToUse;
1038 const TSharedRef<FGlobalTabmanager>& GlobalTabManager = FGlobalTabmanager::Get();
1044 if (!ParentTabCategory.IsValid())
1046 ParentTabCategory = WorkspaceMenu::GetMenuStructure().GetToolsCategory();
1050 LOCTEXT(
"WorkspaceMenu_GlobalFindResultsCategory",
"Find in Dialogues"),
1051 LOCTEXT(
"GlobalFindResultsMenuTooltipText",
"Find references to conditions, events, text and variables in all Dialogues."),
1052 GlobalFindResultsIcon,
1062#if ENGINE_MINOR_VERSION >= 23
1063 if (!GlobalTabManager->HasTabSpawner(TabID))
1065 if (!GlobalTabManager->CanSpawnTab(TabID))
1069 LOCTEXT(
"GlobalFindResultsDisplayName",
"Find in Dialogues {0}"),
1070 FText::AsNumber(TabIdx + 1)
1072 GlobalTabManager->RegisterNomadTabSpawner(
1076 .SetIcon(GlobalFindResultsIcon)
1085 const TSharedRef<FGlobalTabmanager>& GlobalTabManager = FGlobalTabmanager::Get();
1090 TSharedPtr<SFindInDialogues> FindResults = FindResultsPtr.Pin();
1091 if (FindResults.IsValid())
1093 FindResults->CloseHostTab();
1103#if ENGINE_MINOR_VERSION >= 23
1104 if (!GlobalTabManager->HasTabSpawner(TabID))
1106 if (!GlobalTabManager->CanSpawnTab(TabID))
1109 GlobalTabManager->UnregisterNomadTabSpawner(TabID);
1209 if (SearchDataPtr !=
nullptr)
1216 if (InAssetData.GetClass() && !InAssetData.GetClass()->IsChildOf<
UDlgDialogue>())
1231 SearchMap.Add(InAssetData.ObjectPath, MoveTemp(SearchData));
1260#undef LOCTEXT_NAMESPACE
1261#undef NY_ARRAY_COUNT
static const FName NAME_MODULE_AssetRegistry(TEXT("AssetRegistry"))
static void LoadAllDialoguesAndCheckGUIDs()
bool QueryEdgeNode(const FDialogueSearchFilter &SearchFilter, const UDialogueGraphNode_Edge *InEdgeNode, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
FDelegateHandle OnAssetAddedHandle
void HandleOnAssetAdded(const FAssetData &InAssetData)
bool SearchForTextLocalizationData(const TSharedPtr< FDialogueSearchResult > &ParentNode, const FString &SearchString, const FText &Text, const FText &NamespaceCategory, const FString &NamespaceCommentString, const FText &KeyCategory, const FString &KeyCommentString)
TMap< FName, FDialogueSearchData > SearchMap
~FDialogueSearchManager()
TSharedPtr< FWorkspaceItem > GlobalFindResultsMenuItem
TSharedRef< SDockTab > SpawnGlobalFindResultsTab(const FSpawnTabArgs &SpawnTabArgs, int32 TabIdx)
TArray< TWeakPtr< SFindInDialogues > > GlobalFindResultsWidgets
TSharedPtr< SFindInDialogues > OpenGlobalFindResultsTab()
bool QueryDlgCondition(const FDialogueSearchFilter &SearchFilter, const FDlgCondition &InDlgCondition, const TSharedPtr< FDialogueSearchResult > &OutParentNode, int32 ConditionIndex=INDEX_NONE, FName ConditionMemberName=TEXT("Condition"))
bool QueryCommentNode(const FDialogueSearchFilter &SearchFilter, const UEdGraphNode_Comment *InCommentNode, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
FText GetGlobalFindResultsTabLabel(int32 TabIdx)
FDelegateHandle OnAssetRenamedHandle
void HandleOnAssetRemoved(const FAssetData &InAssetData)
IAssetRegistry * AssetRegistry
bool QuerySingleDialogue(const FDialogueSearchFilter &SearchFilter, const UDlgDialogue *InDialogue, TSharedPtr< FDialogueSearchResult > &OutParentNode)
bool QueryGraphNode(const FDialogueSearchFilter &SearchFilter, const UDialogueGraphNode *InGraphNode, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
FName GlobalFindResultsTabIDs[MAX_GLOBAL_DIALOGUE_SEARCH_RESULTS]
bool QueryDlgTextArgument(const FDialogueSearchFilter &SearchFilter, const FDlgTextArgument &InDlgTextArgument, const TSharedPtr< FDialogueSearchResult > &OutParentNode, int32 ArgumentIndex=INDEX_NONE)
FDelegateHandle OnAssetRemovedHandle
void HandleOnAssetRenamed(const FAssetData &InAssetData, const FString &InOldName)
void QueryAllDialogues(const FDialogueSearchFilter &SearchFilter, TSharedPtr< FDialogueSearchResult > &OutParentNode)
bool QueryDlgEdge(const FDialogueSearchFilter &SearchFilter, const FDlgEdge &InDlgEdge, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
void Initialize(TSharedPtr< FWorkspaceItem > ParentTabCategory=nullptr)
void HandleOnAssetLoaded(UObject *InAsset)
void EnableGlobalFindResults(TSharedPtr< FWorkspaceItem > ParentTabCategory=nullptr)
FDelegateHandle OnAssetLoadedHandle
void HandleOnAssetRegistryFilesLoaded()
FDelegateHandle OnFilesLoadedHandle
TSharedPtr< FDialogueSearchResult > MakeChildTextNode(const TSharedPtr< FDialogueSearchResult > &ParentNode, const FText &DisplayName, const FText &Category, const FString &CommentString)
void DisableGlobalFindResults()
bool QueryDlgEvent(const FDialogueSearchFilter &SearchFilter, const FDlgEvent &InDlgEvent, const TSharedPtr< FDialogueSearchResult > &OutParentNode, int32 EventIndex=INDEX_NONE, FName EventMemberName=TEXT("Event"))
FDialogueSearchManager Self
TSharedPtr< SFindInDialogues > GetGlobalFindResults()
void CloseGlobalFindResults(const TSharedRef< SFindInDialogues > &FindResults)
static bool DoesGUIDContainString(const FGuid &GUID, const FString &SearchString, FString &OutGUIDString)
static bool DoesObjectClassNameContainString(const UObject *Object, const FString &SearchString, FString &OutNameString)
static const FName PROPERTY_DialogueSearch_TabIcon
static FName GetStyleSetName()
static TSharedPtr< SDockTab > InvokeTab(TSharedPtr< FTabManager > TabManager, const FTabId &TabID)
const TArray< UEdGraphNode * > & GetAllGraphNodes() const
UDialogueGraphNode * GetChildNode() const
bool HasChildNode() const
const FDlgEdge & GetDialogueEdge() const
UDialogueGraphNode * GetParentNode() const
bool HasParentNode() const
virtual int32 GetDialogueNodeIndex() const
const DlgNodeType & GetDialogueNode() const
virtual bool IsRootNode() const
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
FGuid GetGUID() const
UFUNCTION(BlueprintPure, Category = "Dialogue|GUID")
static TArray< UDlgDialogue * > GetAllDialoguesFromMemory()
UCLASS(BlueprintType, ClassGroup = "Dialogue")
UCLASS(BlueprintType, Abstract, EditInlineNew, ClassGroup = "Dialogue")
virtual const TArray< FDlgTextArgument > & GetTextArguments() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
FGuid GetGUID() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
virtual FName GetNodeParticipantName() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
virtual const TArray< FDlgEvent > & GetNodeEnterEvents() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
virtual UDlgNodeData * GetNodeData() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
virtual FName GetSpeakerState() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
virtual const FText & GetNodeUnformattedText() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
virtual const TArray< FDlgCondition > & GetNodeEnterConditions() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
TWeakObjectPtr< UDlgDialogue > Dialogue
bool bIncludeCustomObjectNames
bool bIncludeTextLocalizationData
bool bIncludeDialogueGUID
bool bIncludeNumericalTypes
float FloatValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
UDlgConditionCustom * CustomCondition
UPROPERTY(Instanced, EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
FName OtherParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
FGuid GUID
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
int32 IntValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
FName OtherVariableName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
FName NameValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
FName CallbackName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
TArray< FDlgCondition > Conditions
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Edge")
const FText & GetUnformattedText() const
FName SpeakerState
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Edge")
const TArray< FDlgTextArgument > & GetTextArguments() const
int32 IntValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
FName NameValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
FName EventName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
UDlgEventCustom * CustomEvent
UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = "Dialogue|Event")
float FloatValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
FText Text
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node", Meta = (MultiLine = true))
FName Speaker
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node", Meta = (DisplayName = "Partic...
FName SpeakerState
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node")
FText EdgeText
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node", Meta = (MultiLine = true))
UDlgTextArgumentCustom * CustomTextArgument
UPROPERTY(Instanced, EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FString DisplayString
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FName VariableName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")