ArticyXImporter
ArticyXImporter for Unreal Engine
Loading...
Searching...
No Matches
ArticyImportData.h
1//
2// Copyright (c) 2023 articy Software GmbH & Co. KG. All rights reserved.
3//
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "ObjectDefinitionsImport.h"
9#include "PackagesImport.h"
10#include "ArticyPackage.h"
11#include "ArticyArchiveReader.h"
12#include "StringTableGenerator.h"
13#include "ArticyImportData.generated.h"
14
16
20USTRUCT()
22{
23 GENERATED_BODY()
24
25public:
26 UPROPERTY(VisibleAnywhere, Category = "Settings")
27 FString set_TextFormatter = "";
28
30 UPROPERTY(VisibleAnywhere, Category = "Settings")
32
33 UPROPERTY(VisibleAnywhere, Category = "Settings")
34 FString set_IncludedNodes = "";
35
36 UPROPERTY(VisibleAnywhere, Category = "Settings")
37 FArticyId RuleSetId;
38
39 UPROPERTY(VisibleAnywhere, Category = "Settings")
40 FString ExportVersion = "";
41
42 UPROPERTY(VisibleAnywhere, Category = "Settings")
43 FString GlobalVariablesHash = "";
44
45 UPROPERTY(VisibleAnywhere, Category = "Settings")
46 FString ObjectDefinitionsHash = "";
47
48 UPROPERTY(VisibleAnywhere, Category = "Settings")
49 FString ObjectDefinitionsTextHash = "";
50
51 UPROPERTY(VisibleAnywhere, Category = "Settings")
52 FString ScriptFragmentsHash = "";
53
54 UPROPERTY(VisibleAnywhere, Category = "Settings")
55 FString HierarchyHash = "";
56
57 UPROPERTY(VisibleAnywhere, Category = "Settings")
58 FString ScriptMethodsHash = "";
59
60 void ImportFromJson(const TSharedPtr<FJsonObject> JsonRoot);
61
62 bool DidObjectDefsOrGVsChange() const { return bObjectDefsOrGVsChanged; }
63 bool DidScriptFragmentsChange() const { return bScriptFragmentsChanged; }
64
65 void SetObjectDefinitionsRebuilt() { bObjectDefsOrGVsChanged = false; }
66 void SetScriptFragmentsRebuilt() { bScriptFragmentsChanged = false; }
67
68 void SetObjectDefinitionsNeedRebuild() { bObjectDefsOrGVsChanged = true; }
69 void SetScriptFragmentsNeedRebuild() { bScriptFragmentsChanged = true; }
70
71
72protected:
73 //unused in the UE plugin
74 UPROPERTY(VisibleAnywhere, Category = "Settings", meta = (DisplayName = "set_Localization - unused in UE"))
75 bool set_Localization = false;
76
77private:
78 bool bObjectDefsOrGVsChanged = false;
79
80 bool bScriptFragmentsChanged = false;
81};
82
86USTRUCT()
88{
89 GENERATED_BODY()
90
91public:
92 UPROPERTY(VisibleAnywhere, Category = "Project")
93 FString Name;
94 UPROPERTY(VisibleAnywhere, Category = "Project")
95 FString DetailName;
96 UPROPERTY(VisibleAnywhere, Category = "Project")
97 FString Guid;
98 UPROPERTY(VisibleAnywhere, Category = "Project")
99 FString TechnicalName;
100
101 void ImportFromJson(const TSharedPtr<FJsonObject> JsonRoot, FAdiSettings& Settings);
102};
103
107UENUM()
108enum class EArticyType : uint8
109{
110 ADT_Boolean,
111 ADT_Integer,
112 ADT_String,
113 ADT_MultiLanguageString
114};
115
119USTRUCT()
121{
122 GENERATED_BODY()
123
124public:
125 UPROPERTY(VisibleAnywhere, Category = "Variable")
126 FString Variable;
127 UPROPERTY(VisibleAnywhere, Category = "Variable")
128 EArticyType Type = EArticyType::ADT_String;
129 UPROPERTY(VisibleAnywhere, Category = "Variable")
130 FString Description;
131
132 UPROPERTY(VisibleAnywhere, Category = "Variable")
133 bool BoolValue = false;
134 UPROPERTY(VisibleAnywhere, Category = "Variable")
135 int IntValue = 0;
136 UPROPERTY(VisibleAnywhere, Category = "Variable")
137 FString StringValue;
138
140 FString GetCPPTypeString() const;
141 FString GetCPPValueString() const;
142
143 void ImportFromJson(const TSharedPtr<FJsonObject> JsonVar);
144};
145
149USTRUCT()
151{
152 GENERATED_BODY()
153
154public:
156 UPROPERTY(VisibleAnywhere, Category = "Namespace")
157 FString Namespace;
158 UPROPERTY(VisibleAnywhere, Category = "Namespace")
159 FString Description;
160 UPROPERTY(VisibleAnywhere, Category = "Namespace")
161 TArray<FArticyGVar> Variables;
162
163 UPROPERTY(VisibleAnywhere, Category = "Namespace")
164 FString CppTypename;
165
166 void ImportFromJson(const TSharedPtr<FJsonObject> JsonNamespace, const UArticyImportData* Data);
167};
168
172USTRUCT()
174{
175 GENERATED_BODY()
176
177public:
178 UPROPERTY(VisibleAnywhere, Category = "GlobalVariables")
179 TArray<FArticyGVNamespace> Namespaces;
180
181 void ImportFromJson(const TArray<TSharedPtr<FJsonValue>>* Json, const UArticyImportData* Data);
182};
183
184//---------------------------------------------------------------------------//
185
189USTRUCT()
190struct FAIDScriptMethodParameter
191{
192 GENERATED_BODY()
193
194 FAIDScriptMethodParameter() {}
195 FAIDScriptMethodParameter(FString InType, FString InName) : Type(InType), Name(InName) {}
196
197 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
198 FString Type;
199
200 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
201 FString Name;
202};
203
207USTRUCT()
209{
210 GENERATED_BODY()
211
212public:
213 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
214 FString Name;
215 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
216 FString BlueprintName;
217 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
218 bool bIsOverloadedFunction = false;
219
221 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
224 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
225 TArray<FString> ArgumentList;
227 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
228 TArray<FString> OriginalParameterTypes;
229
230 const FString& GetCPPReturnType() const;
231 const FString& GetCPPDefaultReturn() const;
232 const FString GetCPPParameters() const;
233 const FString GetArguments() const;
234 const FString GetOriginalParametersForDisplayName() const;
235
236 void ImportFromJson(TSharedPtr<FJsonObject> Json, TSet<FString>& OverloadedMethods);
237
238private:
239 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
240 FString ReturnType;
241};
242
246USTRUCT()
248{
249 GENERATED_BODY()
250
251public:
252 UPROPERTY(VisibleAnywhere, Category = "ScriptMethods")
253 TArray<FAIDScriptMethod> ScriptMethods;
254
255 void ImportFromJson(const TArray<TSharedPtr<FJsonValue>>* Json);
256};
257
261USTRUCT()
263{
264 GENERATED_BODY()
265
266public:
267 UPROPERTY(VisibleAnywhere, Category = "Language")
268 FString CultureName;
269 UPROPERTY(VisibleAnywhere, Category = "Language")
270 FString ArticyLanguageId;
271 UPROPERTY(VisibleAnywhere, Category = "Language")
272 FString LanguageName;
273 UPROPERTY(VisibleAnywhere, Category = "Language")
274 bool IsVoiceOver = false;
275
276 void ImportFromJson(const TSharedPtr<FJsonObject>& JsonRoot);
277};
278
282USTRUCT()
284{
285 GENERATED_BODY()
286
287public:
288 UPROPERTY(VisibleAnywhere, Category = "Languages")
289 TMap<FString, FArticyLanguageDef> Languages;
290
291 void ImportFromJson(const TSharedPtr<FJsonObject>& JsonRoot);
292};
293
294/*Used as a workaround to store an array in a map*/
295USTRUCT()
297{
298 GENERATED_BODY()
299
300public:
301 UPROPERTY()
302 TArray<FArticyId> Values;
303};
304
305//---------------------------------------------------------------------------//
306
310UCLASS(BlueprintType)
311class UADIHierarchyObject : public UObject
312{
313 GENERATED_BODY()
314
315public:
316 UPROPERTY(VisibleAnywhere, Category = "HierarchyObject")
317 FString Id;
318 UPROPERTY(VisibleAnywhere, Category = "HierarchyObject")
319 FString TechnicalName;
320 UPROPERTY(VisibleAnywhere, Category = "HierarchyObject")
321 FString Type;
322
323 UPROPERTY(VisibleAnywhere, Category = "HierarchyObject")
324 TArray<UADIHierarchyObject*> Children;
325
326 static UADIHierarchyObject* CreateFromJson(UObject* Outer, const TSharedPtr<FJsonObject> JsonObject);
327};
328
332USTRUCT()
334{
335 GENERATED_BODY()
336
337public:
338 UPROPERTY(VisibleAnywhere, Category = "Hierarchy")
339 UADIHierarchyObject* RootObject = nullptr;
340
341 void ImportFromJson(UArticyImportData* ImportData, const TSharedPtr<FJsonObject> JsonRoot);
342};
343
347USTRUCT()
349{
350 GENERATED_BODY()
351
352public:
353 UPROPERTY(VisibleAnywhere, Category = "Script")
354 FString OriginalFragment = "";
355 UPROPERTY(VisibleAnywhere, Category = "Script")
356 FString ParsedFragment = "";
357 UPROPERTY(VisibleAnywhere, Category = "Script")
358 bool bIsInstruction = false;
359
360 bool operator==(const FArticyExpressoFragment& Other) const
361 {
362 return bIsInstruction == Other.bIsInstruction && OriginalFragment == Other.OriginalFragment;
363 }
364};
365
366inline uint32 GetTypeHash(const FArticyExpressoFragment& A)
367{
368 return GetTypeHash(A.OriginalFragment) ^ GetTypeHash(A.bIsInstruction);
369}
370
374USTRUCT()
375struct ARTICYEDITOR_API FArticyImportDataStruct
376{
377 GENERATED_BODY()
378
379 UPROPERTY(VisibleAnywhere, Category = "ImportData")
380 FAdiSettings Settings;
381 UPROPERTY(VisibleAnywhere, Category = "ImportData")
382 FArticyProjectDef Project;
383 UPROPERTY(VisibleAnywhere, Category = "ImportData")
384 FArticyGVInfo GlobalVariables;
385 UPROPERTY(VisibleAnywhere, Category = "ImportData")
386 FArticyObjectDefinitions ObjectDefinitions;
387 UPROPERTY(VisibleAnywhere, Category = "ImportData")
388 FArticyPackageDefs PackageDefs;
389 UPROPERTY(VisibleAnywhere, Category = "ImportData")
390 FAIDUserMethods UserMethods;
391 UPROPERTY(VisibleAnywhere, Category = "ImportData")
392 FADIHierarchy Hierarchy;
393 UPROPERTY(VisibleAnywhere, Category = "ImportData")
394 FArticyLanguages Languages;
395
396 UPROPERTY(VisibleAnywhere, Category = "ImportData")
397 TSet<FArticyExpressoFragment> ScriptFragments;
398
399 UPROPERTY(VisibleAnywhere, Category = "Imported")
400 TArray<TSoftObjectPtr<UArticyPackage>> ImportedPackages;
401
402 UPROPERTY(VisibleAnywhere, Category = "Imported")
403 TMap<FArticyId, FArticyIdArray> ParentChildrenCache;
404};
405
409UCLASS()
410class ARTICYEDITOR_API UArticyImportData : public UDataAsset
411{
412 GENERATED_BODY()
413
414public:
415 void PostInitProperties() override;
416
417 UPROPERTY(VisibleAnywhere, Instanced, Category = ImportSettings)
418 class UAssetImportData* ImportData;
419
420 void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override;
421
422 void PostImport();
423
424 bool ImportFromJson(const UArticyArchiveReader& Archive, const TSharedPtr<FJsonObject> RootObject);
425
426 const static TWeakObjectPtr<UArticyImportData> GetImportData();
427 const FAdiSettings& GetSettings() const { return Settings; }
428 FAdiSettings& GetSettings() { return Settings; }
429 const FArticyProjectDef& GetProject() const { return Project; }
430 const FArticyGVInfo& GetGlobalVars() const { return GlobalVariables; }
431 const FADIHierarchy& GetHierarchy() const { return Hierarchy; }
432 const FArticyObjectDefinitions& GetObjectDefs() const { return ObjectDefinitions; }
433 const FArticyPackageDefs& GetPackageDefs() const { return PackageDefs; }
434
435 TArray<TSoftObjectPtr<UArticyPackage>>& GetPackages() { return ImportedPackages; }
436 TArray<UArticyPackage*> GetPackagesDirect();
437 const TArray<TSoftObjectPtr<UArticyPackage>>& GetPackages() const { return ImportedPackages; }
438
439 const TArray<FAIDScriptMethod>& GetUserMethods() const { return UserMethods.ScriptMethods; }
440
441 void GatherScripts();
442 void AddScriptFragment(const FString& Fragment, const bool bIsInstruction);
443 const TSet<FArticyExpressoFragment>& GetScriptFragments() const { return ScriptFragments; }
444
445 void AddChildToParentCache(FArticyId Parent, FArticyId Child);
446 const TMap<FArticyId, FArticyIdArray>& GetParentChildrenCache() const { return ParentChildrenCache; }
447
448 void BuildCachedVersion();
450 bool HasCachedVersion() const { return bHasCachedVersion; }
451
452 void SetInitialImportComplete() { bHasCachedVersion = true; }
453
454 UPROPERTY(VisibleAnywhere, Category = "ImportData")
455 FArticyLanguages Languages;
456
457protected:
458
459 UPROPERTY(VisibleAnywhere, Category = "Articy")
460 FArticyImportDataStruct CachedData;
461
462 // indicates whether we've had at least one working import. Used to determine if we want to re
463 UPROPERTY()
464 bool bHasCachedVersion = false;
465
466private:
467
468 friend class FArticyEditorFunctionLibrary;
469
470 UPROPERTY(VisibleAnywhere, Category = "ImportData")
471 FAdiSettings Settings;
472 UPROPERTY(VisibleAnywhere, Category = "ImportData")
473 FArticyProjectDef Project;
474 UPROPERTY(VisibleAnywhere, Category = "ImportData")
475 FArticyGVInfo GlobalVariables;
476 UPROPERTY(VisibleAnywhere, Category = "ImportData")
477 FArticyObjectDefinitions ObjectDefinitions;
478 UPROPERTY(VisibleAnywhere, Category = "ImportData")
479 FArticyPackageDefs PackageDefs;
480 UPROPERTY(VisibleAnywhere, Category = "ImportData")
481 FAIDUserMethods UserMethods;
482 UPROPERTY(VisibleAnywhere, Category = "ImportData")
483 FADIHierarchy Hierarchy;
484
485 UPROPERTY(VisibleAnywhere, Category = "ImportData")
486 TSet<FArticyExpressoFragment> ScriptFragments;
487
488 UPROPERTY(VisibleAnywhere, Category = "Imported")
489 TArray<TSoftObjectPtr<UArticyPackage>> ImportedPackages;
490
491 UPROPERTY(VisibleAnywhere, Category = "Imported")
492 TMap<FArticyId, FArticyIdArray> ParentChildrenCache;
493
494 void ImportAudioAssets(const FString& BaseContentDir);
495 int ProcessStrings(StringTableGenerator* CsvOutput, const TMap<FString, FArticyTexts>& Data, const TPair<FString, FArticyLanguageDef>& Language);
496};
A class to generate and manage string tables in CSV format.
Definition StringTableGenerator.h:19
Definition ArticyImportData.h:312
static UADIHierarchyObject * CreateFromJson(UObject *Outer, const TSharedPtr< FJsonObject > JsonObject)
Definition ArticyImportData.cpp:473
Definition ArticyArchiveReader.h:59
Definition ArticyImportData.h:411
TArray< UArticyPackage * > GetPackagesDirect()
Definition ArticyImportData.cpp:1185
void PostImport()
Definition ArticyImportData.cpp:598
void AddChildToParentCache(FArticyId Parent, FArticyId Child)
Definition ArticyImportData.cpp:1400
void PostInitProperties() override
Definition ArticyImportData.cpp:563
bool ImportFromJson(const UArticyArchiveReader &Archive, const TSharedPtr< FJsonObject > RootObject)
Definition ArticyImportData.cpp:612
void BuildCachedVersion()
Definition ArticyImportData.cpp:1411
void GatherScripts()
Definition ArticyImportData.cpp:1199
void AddScriptFragment(const FString &Fragment, const bool bIsInstruction)
Definition ArticyImportData.cpp:1211
static const TWeakObjectPtr< UArticyImportData > GetImportData()
Definition ArticyImportData.cpp:1138
void ResolveCachedVersion()
Definition ArticyImportData.cpp:1429
Definition ArticyImportData.h:334
Definition ArticyImportData.h:191
Definition ArticyImportData.h:209
TArray< FString > ArgumentList
Definition ArticyImportData.h:225
TArray< FString > OriginalParameterTypes
Definition ArticyImportData.h:228
const FString GetCPPParameters() const
Definition ArticyImportData.cpp:319
TArray< FAIDScriptMethodParameter > ParameterList
Definition ArticyImportData.h:222
const FString GetOriginalParametersForDisplayName() const
Definition ArticyImportData.cpp:364
const FString & GetCPPReturnType() const
Definition ArticyImportData.cpp:253
const FString & GetCPPDefaultReturn() const
Definition ArticyImportData.cpp:276
const FString GetArguments() const
Definition ArticyImportData.cpp:347
void ImportFromJson(TSharedPtr< FJsonObject > Json, TSet< FString > &OverloadedMethods)
Definition ArticyImportData.cpp:382
Definition ArticyImportData.h:248
Definition ArticyImportData.h:22
void ImportFromJson(const TSharedPtr< FJsonObject > JsonRoot)
Definition ArticyImportData.cpp:36
bool set_UseScriptSupport
Definition ArticyImportData.h:31
Definition ArticyImportData.h:349
Definition ArticyImportData.h:174
Definition ArticyImportData.h:151
FString Namespace
Definition ArticyImportData.h:157
void ImportFromJson(const TSharedPtr< FJsonObject > JsonNamespace, const UArticyImportData *Data)
Definition ArticyImportData.cpp:197
Definition ArticyImportData.h:121
FString GetCPPValueString() const
Definition ArticyImportData.cpp:119
FString GetCPPTypeString() const
Definition ArticyImportData.cpp:96
Definition ArticyImportData.h:297
Definition ArticyBaseTypes.h:18
Definition ArticyImportData.h:376
Definition ArticyImportData.h:263
Definition ArticyImportData.h:284
Definition ObjectDefinitionsImport.h:485
Definition PackagesImport.h:312
Definition ArticyImportData.h:88