// Copyright Epic Games, Inc. All Rights Reserved. #include "ToolPresetAsset.h" #include "JsonObjectConverter.h" void FInteractiveToolPresetDefinition::SetStoredPropertyData(TArray& Properties) { FJsonObjectWrapper JsonWrapper; for (UObject* PropertySet : Properties) { TSharedPtr PropertyJsonObject = MakeShared(); if (PropertyJsonObject) { for (FProperty* Prop : TFieldRange(PropertySet->GetClass())) { #if WITH_EDITOR if (! (Prop->HasMetaData(TEXT("TransientToolProperty")) || Prop->GetPropertyFlags() & EPropertyFlags::CPF_SkipSerialization || Prop->GetPropertyFlags() & EPropertyFlags::CPF_Transient) ) #endif { TSharedPtr JsonProp = FJsonObjectConverter::UPropertyToJsonValue(Prop, Prop->ContainerPtrToValuePtr(PropertySet)); FString FieldName; Prop->GetName(FieldName); PropertyJsonObject->SetField(FieldName, JsonProp); } } } FString ClassName; PropertySet->GetClass()->GetName(ClassName); JsonWrapper.JsonObject->SetObjectField(ClassName, PropertyJsonObject); } JsonWrapper.JsonObjectToString(StoredProperties); } void FInteractiveToolPresetDefinition::LoadStoredPropertyData(TArray& Properties) { FJsonObjectWrapper JsonWrapper; JsonWrapper.JsonObjectFromString(StoredProperties); for (UObject* PropertySet : Properties) { FString ClassName; PropertySet->GetClass()->GetName(ClassName); TSharedPtr PropertyJsonObject = JsonWrapper.JsonObject->GetObjectField(ClassName); if (PropertyJsonObject) { for (FProperty* Prop : TFieldRange(PropertySet->GetClass())) { #if WITH_EDITOR if (!(Prop->HasMetaData(TEXT("TransientToolProperty")) || Prop->GetPropertyFlags() & EPropertyFlags::CPF_SkipSerialization || Prop->GetPropertyFlags() & EPropertyFlags::CPF_Transient)) #endif { FString FieldName; Prop->GetName(FieldName); TSharedPtr* JsonField = PropertyJsonObject->Values.Find(FieldName); if (JsonField) { if (FJsonObjectConverter::JsonValueToUProperty(*JsonField, Prop, Prop->ContainerPtrToValuePtr(PropertySet))) { FPropertyChangedEvent ChangeEvent(Prop, EPropertyChangeType::ValueSet); PropertySet->PostEditChangeProperty(ChangeEvent); } } } } } } } bool FInteractiveToolPresetDefinition::IsValid() const { FJsonObjectWrapper JsonWrapper; return JsonWrapper.JsonObjectFromString(StoredProperties); }