diff --git a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHandler.cpp b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHandler.cpp index 55da572939..c355797f27 100644 --- a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHandler.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHandler.cpp @@ -6,29 +6,33 @@ * */ - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include +#include #include - #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// \todo move out and replace with JsonUtils.h when it can get moved +#include +#include +#include +#include + namespace ScriptCanvasEditor { @@ -75,14 +79,16 @@ namespace ScriptCanvasEditor } } - AZ::Data::AssetHandler::LoadResult ScriptCanvasAssetHandler::LoadAssetData( const AZ::Data::Asset& asset, AZStd::shared_ptr stream, const AZ::Data::AssetFilterCB& assetLoadFilterCB) { auto* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "This should be an scene slice asset, as this is the only type we process!"); + AZ_Assert(scriptCanvasAsset, "This should be a ScriptCanvasAsset, as this is the only type we process!"); + + // static_assert(false, "load the json here, and only if it failed, conditionally load the block below"); + if (scriptCanvasAsset && m_serializeContext) { stream->Seek(0U, AZ::IO::GenericStream::ST_SEEK_BEGIN); @@ -91,10 +97,8 @@ namespace ScriptCanvasEditor return loadSuccess ? AZ::Data::AssetHandler::LoadResult::LoadComplete : AZ::Data::AssetHandler::LoadResult::Error; } return AZ::Data::AssetHandler::LoadResult::Error; - } - bool ScriptCanvasAssetHandler::SaveAssetData(const AZ::Data::Asset& asset, AZ::IO::GenericStream* stream) { return SaveAssetData(asset.GetAs(), stream); @@ -105,17 +109,24 @@ namespace ScriptCanvasEditor return SaveAssetData(assetData, stream, AZ::DataStream::ST_XML); } - bool ScriptCanvasAssetHandler::SaveAssetData(const ScriptCanvasAsset* assetData, AZ::IO::GenericStream* stream, AZ::DataStream::StreamType streamType) + bool ScriptCanvasAssetHandler::SaveAssetData(const ScriptCanvasAsset* assetData, AZ::IO::GenericStream* stream, [[maybe_unused]] AZ::DataStream::StreamType streamType) { + namespace JSR = AZ::JsonSerializationResult; + if (assetData && m_serializeContext) - { - AZStd::vector byteBuffer; - AZ::IO::ByteContainerStream byteStream(&byteBuffer); - AZ::ObjectStream* objStream = AZ::ObjectStream::Create(&byteStream, *m_serializeContext, streamType); - bool scriptCanvasAssetSaved = objStream->WriteClass(&assetData->GetScriptCanvasData()); - objStream->Finalize(); - scriptCanvasAssetSaved = stream->Write(byteBuffer.size(), byteBuffer.data()) == byteBuffer.size() && scriptCanvasAssetSaved; - return scriptCanvasAssetSaved; + { + AZ::JsonSerializerSettings settings; + settings.m_keepDefaults = false; + settings.m_serializeContext = m_serializeContext; + rapidjson::Document document; + + if (AZ::JsonSerialization::Store(document, document.GetAllocator(), assetData->GetScriptCanvasData(), settings).GetProcessing() != JSR::Processing::Halted) + { + // \todo replace with with exact function from JsonUtils.cpp once it is moved to AzToolsFramework + AZ::IO::RapidJSONStreamWriter jsonStreamWriter(stream); + rapidjson::PrettyWriter writer(jsonStreamWriter); + return document.Accept(writer); + } } return false; @@ -126,17 +137,11 @@ namespace ScriptCanvasEditor delete ptr; } - //========================================================================= - // GetSerializeContext - //=========================================================================. AZ::SerializeContext* ScriptCanvasAssetHandler::GetSerializeContext() const { return m_serializeContext; } - //========================================================================= - // SetSerializeContext - //=========================================================================. void ScriptCanvasAssetHandler::SetSerializeContext(AZ::SerializeContext* context) { m_serializeContext = context; @@ -152,17 +157,11 @@ namespace ScriptCanvasEditor } } - //========================================================================= - // GetHandledAssetTypes - //=========================================================================. void ScriptCanvasAssetHandler::GetHandledAssetTypes(AZStd::vector& assetTypes) { assetTypes.push_back(GetAssetType()); } - //========================================================================= - // GetAssetType - //=========================================================================. AZ::Data::AssetType ScriptCanvasAssetHandler::GetAssetType() const { return ScriptCanvasAssetHandler::GetAssetTypeStatic(); @@ -178,38 +177,24 @@ namespace ScriptCanvasEditor return azrtti_typeid(); } - //========================================================================= - // GetAssetTypeExtensions - //=========================================================================. void ScriptCanvasAssetHandler::GetAssetTypeExtensions(AZStd::vector& extensions) { ScriptCanvasAsset::Description description; extensions.push_back(description.GetExtensionImpl()); } - //========================================================================= - // GetComponentTypeId - //=========================================================================. AZ::Uuid ScriptCanvasAssetHandler::GetComponentTypeId() const { return azrtti_typeid(); } - //========================================================================= - // GetGroup - //=========================================================================. const char* ScriptCanvasAssetHandler::GetGroup() const { return ScriptCanvas::AssetDescription::GetGroup(); } - //========================================================================= - // GetBrowserIcon - //=========================================================================. const char* ScriptCanvasAssetHandler::GetBrowserIcon() const { return ScriptCanvas::AssetDescription::GetIconPath(); } - - } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Serialization/DatumSerializer.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Serialization/DatumSerializer.cpp index 44ca1730a8..003ef05774 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Serialization/DatumSerializer.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Serialization/DatumSerializer.cpp @@ -84,7 +84,8 @@ namespace AZ AZStd::string label; AZ_Assert(azrtti_typeidm_datumLabel)>() == azrtti_typeid() , "m_datumLabel type changed and won't load properly"); - result.Combine(ContinueLoadingFromJsonObjectField + + result.Combine( ContinueLoadingFromJsonObjectField ( &label , azrtti_typeidm_datumLabel)>() , inputValue