From acd23698ea38a0c76bcd88f6a5ac0929af922f36 Mon Sep 17 00:00:00 2001 From: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Fri, 18 Jun 2021 12:37:37 -0700 Subject: [PATCH] Prefab Serialization | Remove "Source" parameter from prefab source file (#1387) * When loading a template to memory, store the current Source (potentially overriding what was stored to disk) * Before storing the prefab disk, remove the Source parameter from the Dom (as it's no longer necessary to save it). --- .../AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp | 4 ++++ .../AzToolsFramework/Prefab/Template/Template.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp index 44dff93cb5..54baeb3f66 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp @@ -151,6 +151,10 @@ namespace AzToolsFramework return InvalidTemplateId; } + // Add or replace the Source parameter in the dom + PrefabDomPath sourcePath = PrefabDomPath((AZStd::string("/") + PrefabDomUtils::SourceName).c_str()); + sourcePath.Set(readPrefabFileResult.GetValue(), relativePath.Native().c_str()); + // Create new Template with the Prefab DOM. TemplateId newTemplateId = m_prefabSystemComponentInterface->AddTemplate(relativePath, readPrefabFileResult.TakeValue()); if (newTemplateId == InvalidTemplateId) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Template/Template.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Template/Template.cpp index 0511ee1f13..592fc309d5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Template/Template.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Template/Template.cpp @@ -207,6 +207,10 @@ namespace AzToolsFramework instanceValue->CopyFrom(linkDom, m_prefabDom.GetAllocator()); } + // Remove Source parameter from the dom. It will be added on file load, and should not be stored to disk. + PrefabDomPath sourcePath = PrefabDomPath((AZStd::string("/") + PrefabDomUtils::SourceName).c_str()); + sourcePath.Erase(output); + return true; }