From d8c9c5178e65e9e39af984033c7165a0c473e6bf Mon Sep 17 00:00:00 2001 From: srikappa-amzn <82230713+srikappa-amzn@users.noreply.github.com> Date: Wed, 21 Jul 2021 13:42:46 -0700 Subject: [PATCH] Reset the prefab root instance before removing the corresponding template (#2287) * Remove dirty entities correctly when prefab entities get destroyed Signed-off-by: srikappa-amzn * Remove call to clear dirty entity for single entity delete Signed-off-by: srikappa-amzn * Removed couple of asserts because order of operations is not fixed Signed-off-by: srikappa-amzn --- .../PrefabEditorEntityOwnershipService.cpp | 4 +++- .../Prefab/Instance/Instance.cpp | 21 ++----------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp index dfcbfd8c45..2d97689610 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp @@ -88,13 +88,15 @@ namespace AzToolsFramework { if (m_rootInstance) { + AzToolsFramework::ToolsApplicationRequestBus::Broadcast( + &AzToolsFramework::ToolsApplicationRequestBus::Events::ClearDirtyEntities); Prefab::TemplateId templateId = m_rootInstance->GetTemplateId(); + m_rootInstance->Reset(); if (templateId != Prefab::InvalidTemplateId) { m_rootInstance->SetTemplateId(Prefab::InvalidTemplateId); m_prefabSystemComponent->RemoveTemplate(templateId); } - m_rootInstance->Reset(); m_rootInstance->SetContainerEntityName("Level"); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index 750efa1e36..043f864245 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -82,16 +82,7 @@ namespace AzToolsFramework return; } - // If this instance's templateId is valid, we should be able to unregister this instance from - // Template to Instance mapping successfully. - if (m_templateId != InvalidTemplateId && - !m_templateInstanceMapper->UnregisterInstance(*this)) - { - AZ_Assert(false, - "Prefab - Attempted to Unregister Instance from Template with Id '%u'. " - "Instance may never have been registered or was unregistered early.", - m_templateId); - } + m_templateInstanceMapper->UnregisterInstance(*this); m_templateId = templateId; @@ -221,15 +212,7 @@ namespace AzToolsFramework void Instance::Reset() { - // Clean up Instance associations. - if (m_templateId != InvalidTemplateId && !m_templateInstanceMapper->UnregisterInstance(*this)) - { - AZ_Assert( - false, - "Prefab - Attempted to unregister Instance from Template on file path '%s' with Id '%u'. " - "Instance may never have been registered or was unregistered early.", - m_templateSourcePath.c_str(), m_templateId); - } + m_templateInstanceMapper->UnregisterInstance(*this); ClearEntities();