A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DlgHumanReadableTextCommandlet.h
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
2#pragma once
3
4
5#include "Commandlets/Commandlet.h"
6#include "DlgEdge.h"
7
8#include "DlgHumanReadableTextCommandlet.generated.h"
9
10
11DECLARE_LOG_CATEGORY_EXTERN(LogDlgHumanReadableTextCommandlet, All, All);
12
13class UDlgDialogue;
14class UDlgNode;
17
18USTRUCT()
20{
21 GENERATED_USTRUCT_BODY()
22public:
23 UPROPERTY()
24 TArray<int32> ParentNodeIndices;
25
26 UPROPERTY()
27 TArray<int32> ChildNodeIndices;
28};
29
30
31// Variant of the FDlgEdge that also tells us from what node to what node
32USTRUCT()
34{
35 GENERATED_USTRUCT_BODY()
36
37public:
38 // Metadata
39 UPROPERTY()
40 int32 SourceNodeIndex = INDEX_NONE - 1;
42 UPROPERTY()
43 int32 TargetNodeIndex = INDEX_NONE - 1;
44
45 UPROPERTY()
46 FText Text;
47};
48
49
50// Variant of the FDlgEdge that is human readable
51USTRUCT()
53{
54 GENERATED_USTRUCT_BODY()
56public:
57 // Metadata
58 UPROPERTY()
59 int32 TargetNodeIndex = INDEX_NONE - 1;
61 UPROPERTY()
62 FText Text;
63};
64
65
66// Variant of the FDlgSpeechSequenceEntry that is human readable
67USTRUCT()
69{
71public:
72 // ParticipantName
73 UPROPERTY()
74 FName Speaker;
75
76 UPROPERTY()
77 FText Text;
78
79 UPROPERTY()
80 FText EdgeText;
81};
83
84// Variant of the UDlgNode_SpeechSequence that is human readable
85USTRUCT()
87{
88 GENERATED_USTRUCT_BODY()
89public:
90 // INDEX_NONE is root node
91 bool IsValid() const { return NodeIndex >= INDEX_NONE; }
93public:
94 // Metadata
95 UPROPERTY()
96 int32 NodeIndex = INDEX_NONE - 1;
97
98 UPROPERTY()
99 FName Speaker;
100
101 UPROPERTY()
104 UPROPERTY()
105 TArray<FDlgEdge_FormatHumanReadable> Edges;
106};
107
109// Variant of the UDlgNode_Speech that is human readable
110USTRUCT()
112{
113 GENERATED_USTRUCT_BODY()
114
115public:
116 // INDEX_NONE is root node
117 bool IsValid() const { return NodeIndex >= INDEX_NONE; }
119public:
120 // Metadata, NodeIndex
121 UPROPERTY()
122 int32 NodeIndex = INDEX_NONE - 1;
123
124 UPROPERTY()
125 FName Speaker;
126
127 UPROPERTY()
128 FText Text;
129
130 UPROPERTY()
131 TArray<FDlgEdge_FormatHumanReadable> Edges;
132};
134
135// Variant of the UDlgDialogue that is human readable
136USTRUCT()
139 GENERATED_USTRUCT_BODY()
140
141public:
142 UPROPERTY()
143 FName DialogueName;
144
145 UPROPERTY()
146 FGuid DialogueGUID;
147
148 UPROPERTY()
149 TArray<FDlgNodeSpeech_FormatHumanReadable> SpeechNodes;
150
151 UPROPERTY()
152 TArray<FDlgNodeSpeechSequence_FormatHumanReadable> SpeechSequenceNodes;
154
155
156UCLASS()
158{
160
161public:
163
164public:
165
166 //~ UCommandlet interface
167 int32 Main(const FString& Params) override;
168
169 bool ExportDialogueToHumanReadableFormat(const UDlgDialogue& Dialogue, FDlgDialogue_FormatHumanReadable& OutFormat);
170
171 bool ImportHumanReadableFormatIntoDialogue(const FDlgDialogue_FormatHumanReadable& Format, UDlgDialogue* Dialogue);
172
173 // Tells us if the edge text is default
174 bool IsEdgeTextDefault(const FText& EdgeText);
175
176protected:
177 // Own methods
178 int32 Export();
179 int32 Import();
180
181 static bool ExportNodeToContext(const UDlgNode* Node, FDlgNodeContext_FormatHumanReadable& OutContext);
182 static void ExportNodeEdgesToHumanReadableFormat(const TArray<FDlgEdge>& Edges, TArray<FDlgEdge_FormatHumanReadable>& OutEdges);
183 static bool SetGraphNodesNewEdgesText(UDialogueGraphNode* GraphNode, const TArray<FDlgEdge_FormatHumanReadable>& Edges, int32 NodeIndex, const UDlgDialogue* Dialogue);
184
185protected:
186 FString OutputInputDirectory;
188 TArray<UPackage*> PackagesToSave;
189 const UDlgSystemSettings* Settings = nullptr;
190
191 bool bSaveAllDialogues = false;
192 bool bExport = false;
193 bool bImport = false;
194
195 static constexpr int32 RootNodeIndex = INDEX_NONE;
196 static const TCHAR* FileExtension;
197};
DECLARE_LOG_CATEGORY_EXTERN(LogDlgHumanReadableTextCommandlet, All, All)
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
Definition DlgDialogue.h:85
int32 Main(const FString &Params) override
static bool ExportNodeToContext(const UDlgNode *Node, FDlgNodeContext_FormatHumanReadable &OutContext)
static void ExportNodeEdgesToHumanReadableFormat(const TArray< FDlgEdge > &Edges, TArray< FDlgEdge_FormatHumanReadable > &OutEdges)
bool ImportHumanReadableFormatIntoDialogue(const FDlgDialogue_FormatHumanReadable &Format, UDlgDialogue *Dialogue)
static bool SetGraphNodesNewEdgesText(UDialogueGraphNode *GraphNode, const TArray< FDlgEdge_FormatHumanReadable > &Edges, int32 NodeIndex, const UDlgDialogue *Dialogue)
bool ExportDialogueToHumanReadableFormat(const UDlgDialogue &Dialogue, FDlgDialogue_FormatHumanReadable &OutFormat)
UCLASS(BlueprintType, Abstract, EditInlineNew, ClassGroup = "Dialogue")
Definition DlgNode.h:40
UCLASS(Config = Engine, DefaultConfig, meta = (DisplayName = "Dialogue System Settings"))
TArray< FDlgNodeSpeechSequence_FormatHumanReadable > SpeechSequenceNodes
UPROPERTY()
TArray< FDlgNodeSpeech_FormatHumanReadable > SpeechNodes
UPROPERTY()
TArray< FDlgEdge_FormatHumanReadable > Edges
UPROPERTY()
TArray< FDlgEdge_FormatHumanReadable > Edges
UPROPERTY()
TArray< FDlgSpeechSequenceEntry_FormatHumanReadable > Sequence
UPROPERTY()
USTRUCT()
GENERATED_USTRUCT_BODY()
FText Text
UPROPERTY()
FName Speaker
UPROPERTY()
FText EdgeText
UPROPERTY()