Fix missing asset handler error on EditorSCComponent load from pre SourceHandle files
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
@@ -30,7 +30,6 @@
|
||||
#include <ScriptCanvas/Components/EditorGraph.h>
|
||||
#include <ScriptCanvas/Components/EditorGraphVariableManagerComponent.h>
|
||||
#include <ScriptCanvas/Components/EditorScriptCanvasComponent.h>
|
||||
#include <ScriptCanvas/Components/EditorScriptCanvasComponentSerializer.h>
|
||||
#include <ScriptCanvas/Components/EditorUtils.h>
|
||||
#include <ScriptCanvas/Core/Node.h>
|
||||
#include <ScriptCanvas/PerformanceStatisticsBus.h>
|
||||
@@ -317,6 +316,7 @@ namespace ScriptCanvasEditor
|
||||
void EditorScriptCanvasComponent::BuildGameEntityData()
|
||||
{
|
||||
using namespace ScriptCanvasBuilder;
|
||||
CompleteDescriptionInPlace(m_sourceHandle);
|
||||
|
||||
m_runtimeDataIsValid = false;
|
||||
|
||||
|
||||
+4
-2
@@ -9,15 +9,16 @@
|
||||
#pragma once
|
||||
|
||||
#include <AzFramework/Asset/AssetCatalogBus.h>
|
||||
#include <AzToolsFramework/API/EditorAssetSystemAPI.h>
|
||||
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorComponentBase.h>
|
||||
#include <Builder/ScriptCanvasBuilder.h>
|
||||
#include <Editor/Assets/ScriptCanvasAssetHolder.h>
|
||||
#include <ScriptCanvas/Assets/ScriptCanvasAssetHandler.h>
|
||||
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
|
||||
#include <ScriptCanvas/Components/EditorScriptCanvasComponentSerializer.h>
|
||||
#include <ScriptCanvas/Execution/RuntimeComponent.h>
|
||||
#include <ScriptCanvas/Variable/VariableBus.h>
|
||||
#include <AzToolsFramework/API/EditorAssetSystemAPI.h>
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
@@ -39,11 +40,12 @@ namespace ScriptCanvasEditor
|
||||
, private EditorScriptCanvasComponentLoggingBus::Handler
|
||||
, private EditorScriptCanvasComponentRequestBus::Handler
|
||||
, private AzToolsFramework::EditorEntityContextNotificationBus::Handler
|
||||
|
||||
{
|
||||
public:
|
||||
AZ_COMPONENT(EditorScriptCanvasComponent, "{C28E2D29-0746-451D-A639-7F113ECF5D72}", AzToolsFramework::Components::EditorComponentBase);
|
||||
|
||||
friend class AZ::EditorScriptCanvasComponentSerializer;
|
||||
|
||||
EditorScriptCanvasComponent();
|
||||
EditorScriptCanvasComponent(const SourceHandle& sourceHandle);
|
||||
~EditorScriptCanvasComponent() override;
|
||||
|
||||
+60
-11
@@ -27,23 +27,72 @@ namespace AZ
|
||||
, "EditorScriptCanvasComponentSerializer Load against output typeID that was not EditorScriptCanvasComponent");
|
||||
AZ_Assert(outputValue, "EditorScriptCanvasComponentSerializer Load against null output");
|
||||
|
||||
// load as parent class
|
||||
auto outputComponent = reinterpret_cast<ScriptCanvasEditor::EditorScriptCanvasComponent*>(outputValue);
|
||||
JsonSerializationResult::ResultCode result = BaseJsonSerializer::Load(outputValue, outputValueTypeId, inputValue, context);
|
||||
JsonSerializationResult::ResultCode result = BaseJsonSerializer::Load(outputValue
|
||||
, azrtti_typeid<AzToolsFramework::Components::EditorComponentBase>(), inputValue, context);
|
||||
|
||||
// load child data one by one...
|
||||
result.Combine(BaseJsonSerializer::Load(outputValue, outputValueTypeId, inputValue, context));
|
||||
|
||||
if (result.GetProcessing() != JSR::Processing::Halted)
|
||||
{
|
||||
auto assetHolderMember = inputValue.FindMember("m_assetHolder");
|
||||
if (assetHolderMember != inputValue.MemberEnd())
|
||||
{
|
||||
ScriptCanvasEditor::ScriptCanvasAssetHolder assetHolder;
|
||||
result.Combine
|
||||
( ContinueLoading(&assetHolder
|
||||
, azrtti_typeid<ScriptCanvasEditor::ScriptCanvasAssetHolder>(), assetHolderMember->value, context));
|
||||
result.Combine(ContinueLoadingFromJsonObjectField
|
||||
( &outputComponent->m_name
|
||||
, azrtti_typeid(outputComponent->m_name)
|
||||
, inputValue
|
||||
, "m_name"
|
||||
, context));
|
||||
|
||||
if (result.GetProcessing() != JSR::Processing::Halted)
|
||||
result.Combine(ContinueLoadingFromJsonObjectField
|
||||
( &outputComponent->m_runtimeDataIsValid
|
||||
, azrtti_typeid(outputComponent->m_runtimeDataIsValid)
|
||||
, inputValue
|
||||
, "runtimeDataIsValid"
|
||||
, context));
|
||||
|
||||
result.Combine(ContinueLoadingFromJsonObjectField
|
||||
( &outputComponent->m_variableOverrides
|
||||
, azrtti_typeid(outputComponent->m_variableOverrides)
|
||||
, inputValue
|
||||
, "runtimeDataOverrides"
|
||||
, context));
|
||||
|
||||
auto assetHolderMember = inputValue.FindMember("m_assetHolder");
|
||||
if (assetHolderMember == inputValue.MemberEnd())
|
||||
{
|
||||
// file was saved with SourceHandle data
|
||||
result.Combine(ContinueLoadingFromJsonObjectField
|
||||
( &outputComponent->m_sourceHandle
|
||||
, azrtti_typeid(outputComponent->m_sourceHandle)
|
||||
, inputValue
|
||||
, "sourceHandle"
|
||||
, context));
|
||||
}
|
||||
else
|
||||
{
|
||||
// manually load the old asset info data
|
||||
const rapidjson::Value& assetHolderValue = assetHolderMember->value;
|
||||
if (auto assetMember = assetHolderValue.FindMember("m_asset"); assetMember != assetHolderValue.MemberEnd())
|
||||
{
|
||||
outputComponent->InitializeSource
|
||||
( ScriptCanvasEditor::SourceHandle(nullptr, assetHolder.GetAssetId().m_guid, assetHolder.GetAssetHint()));
|
||||
const rapidjson::Value& assetValue = assetMember->value;
|
||||
|
||||
AZ::Data::AssetId assetId{};
|
||||
if (auto assetIdMember = assetValue.FindMember("assetId"); assetIdMember != assetValue.MemberEnd())
|
||||
{
|
||||
result.Combine(ContinueLoading(&assetId, azrtti_typeid(assetId), assetIdMember->value, context));
|
||||
}
|
||||
|
||||
AZStd::string path{};
|
||||
if (auto pathMember = assetValue.FindMember("assetHint"); pathMember != assetValue.MemberEnd())
|
||||
{
|
||||
result.Combine(ContinueLoading(&path, azrtti_typeid(path), pathMember->value, context));
|
||||
}
|
||||
|
||||
if (result.GetProcessing() != JSR::Processing::Halted)
|
||||
{
|
||||
outputComponent->InitializeSource(ScriptCanvasEditor::SourceHandle(nullptr, assetId.m_guid, path));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user