7#include "ArticyObject.h"
17#define PREDEFINE_TYPE(Type) new ArticyPredefinedTypeInfo<Type>(#Type, #Type, TEXT(""), [](PROP_SETTER_PARAMS) { return Type{ Json }; })
19#define PREDEFINE_TYPE_EXT(Type, DefaultValue, Deserializer) new ArticyPredefinedTypeInfo<Type>(#Type, #Type, DefaultValue, Deserializer)
21#define PREDEFINE_ARTICYOBJECT_TYPE(Type) new ArticyObjectTypeInfo<Type, Type*>(#Type, #Type"*")
23#define PROP_SETTER_PARAMS UArticyBaseObject* Model, const FString& Path, const TSharedPtr<FJsonValue> Json, const FString& PackageName
24#define ARRAY_SETTER_PARAMS UArticyBaseObject* Model, const FString& Path, const TArray<TSharedPtr<FJsonValue>> JsonArray, const FString& PackageName
25#define PROP_SETTER_ARGS Model, Path, Json, PackageName
32FString ConvertUnityMarkupToUnreal(
const FString& Input);
33FString DecodeHtmlEntities(
const FString& Input);
38struct FArticyPredefinedTypeBase
40 FArticyPredefinedTypeBase(
const FString& TypeName,
const FString& PropTypeName,
const FString& DefaultValue) : CppType(TypeName), CppPropertyType(PropTypeName), CppDefaultValue(DefaultValue) { }
41 virtual ~FArticyPredefinedTypeBase() =
default;
44 FString CppPropertyType =
"";
45 FString CppDefaultValue =
"";
47 virtual void SetProp(FName Property, PROP_SETTER_PARAMS) { ensureMsgf(
false, TEXT(
"SetProp not implemented in derived class!")); }
48 virtual void SetArray(FName ArrayProperty, ARRAY_SETTER_PARAMS) { ensureMsgf(
false, TEXT(
"SetProp not implemented in derived class!")); }
58template<
typename Type,
typename PropType = Type>
59struct ArticyPredefinedTypeInfo : FArticyPredefinedTypeBase
61 ArticyPredefinedTypeInfo(
const FString& TypeName,
const FString& PropTypeName,
const FString& DefaultValue, PropType(*
Deserializer)(PROP_SETTER_PARAMS))
65 virtual ~ArticyPredefinedTypeInfo()
override =
default;
67 typedef PropType(*TDeserializer)(PROP_SETTER_PARAMS);
72 virtual void SetProp(
const FName Property, PROP_SETTER_PARAMS)
override
75 Model->SetProp<PropType>(Property,
Deserializer(PROP_SETTER_ARGS));
79 virtual void SetArray(FName ArrayProperty, ARRAY_SETTER_PARAMS)
override
84 static TArray<PropType> PropArray;
86 PropArray.Reset(JsonArray.Num());
87 for (
auto j : JsonArray)
88 PropArray.Add(
Deserializer(Model, Path, j, PackageName));
90 Model->SetProp(ArrayProperty, PropArray);
98template<
typename Type,
typename PropType = Type>
99struct ArticyObjectTypeInfo final : ArticyPredefinedTypeInfo<Type, PropType>
101 ArticyObjectTypeInfo(FString TypeName, FString PropTypeName) : ArticyPredefinedTypeInfo<Type, PropType>(TypeName, PropTypeName, TEXT(
"nullptr"), [](PROP_SETTER_PARAMS)
103 auto Val = NewObject<Type>(Model);
104 Val->InitFromJson(Json);
107 if (
const auto& Prim = Cast<UArticyPrimitive>(Raw))
108 Model->AddSubobject(Prim);
112 static_assert(std::is_base_of_v<UArticyBaseObject, Type>,
"ArticyObjectTypeInfo might only be used for UArticyBaseObject!");
115 virtual ~ArticyObjectTypeInfo()
override =
default;
121struct FArticyPredefTypes
123 FArticyPredefTypes();
125 static TMap<FName, FArticyPredefinedTypeBase*>& Get() {
return StaticInstance.Types; }
132 TMap<FName, FArticyPredefinedTypeBase*> Types;
134 TSharedPtr<ArticyPredefinedTypeInfo<uint8>> Enum;
136 static FArticyPredefTypes StaticInstance;
Definition ArticyImportData.h:411
Definition PredefinedTypes.h:60
virtual void SetArray(FName ArrayProperty, ARRAY_SETTER_PARAMS) override
Definition PredefinedTypes.h:79
virtual void SetProp(const FName Property, PROP_SETTER_PARAMS) override
Definition PredefinedTypes.h:72
TDeserializer Deserializer
Definition PredefinedTypes.h:69
static bool IsPredefinedType(const FName &OriginalType)
Definition PredefinedTypes.cpp:160