Initial draft for save all prefabs workflow

Signed-off-by: srikappa-amzn <srikappa@amazon.com>
This commit is contained in:
srikappa-amzn
2021-08-20 11:14:56 -07:00
parent aa68122002
commit 7a83950f59
13 changed files with 373 additions and 13 deletions
@@ -18,6 +18,12 @@
namespace AzToolsFramework
{
enum class SavePrefabsPreference : AZ::s64
{
Unspecified = 0,
SaveAll = 1,
SaveNone = -1
};
class PrefabEditorEntityOwnershipInterface
{
@@ -54,5 +60,7 @@ namespace AzToolsFramework
virtual void StopPlayInEditor() = 0;
virtual void CreateNewLevelPrefab(AZStd::string_view filename, const AZStd::string& templateFilename) = 0;
virtual SavePrefabsPreference GetSavePrefabsPreference() = 0;
virtual void SetSavePrefabsPreference(SavePrefabsPreference savePrefabsPreference) = 0;
};
}
@@ -10,6 +10,7 @@
#include <AzCore/Component/TransformBus.h>
#include <AzCore/Script/ScriptSystemBus.h>
#include <AzCore/Serialization/Utils.h>
#include <AzCore/Settings/SettingsRegistry.h>
#include <AzCore/StringFunc/StringFunc.h>
#include <AzFramework/API/ApplicationAPI.h>
#include <AzFramework/Entity/GameEntityContextBus.h>
@@ -27,6 +28,8 @@
namespace AzToolsFramework
{
static constexpr const char s_savePrefabsKey[] = "/O3DE/Preferences/SavePrefabs";
PrefabEditorEntityOwnershipService::PrefabEditorEntityOwnershipService(const AzFramework::EntityContextId& entityContextId,
AZ::SerializeContext* serializeContext)
: m_entityContextId(entityContextId)
@@ -607,6 +610,24 @@ namespace AzToolsFramework
m_playInEditorData.m_isEnabled = false;
}
SavePrefabsPreference PrefabEditorEntityOwnershipService::GetSavePrefabsPreference()
{
AZ::s64 savePrefabsPreference = static_cast<AZ::s64>(SavePrefabsPreference::Unspecified);
if (auto* registry = AZ::SettingsRegistry::Get())
{
registry->Get(savePrefabsPreference, s_savePrefabsKey);
}
return static_cast<SavePrefabsPreference>(savePrefabsPreference);
}
void PrefabEditorEntityOwnershipService::SetSavePrefabsPreference(SavePrefabsPreference savePrefabsPreference)
{
if (auto* registry = AZ::SettingsRegistry::Get())
{
registry->Set(s_savePrefabsKey, static_cast<AZ::s64>(savePrefabsPreference));
}
}
//////////////////////////////////////////////////////////////////////////
// Slice Buses implementation with Assert(false), this will exist only during Slice->Prefab
// development to pinpoint and replace specific calls to Slice system
@@ -168,6 +168,9 @@ namespace AzToolsFramework
void CreateNewLevelPrefab(AZStd::string_view filename, const AZStd::string& templateFilename) override;
SavePrefabsPreference GetSavePrefabsPreference() override;
void SetSavePrefabsPreference(SavePrefabsPreference savePrefabsPreference) override;
protected:
AZ::SliceComponent::SliceInstanceAddress GetOwningSlice() override;
@@ -753,6 +753,17 @@ namespace AzToolsFramework
}
}
void PrefabSystemComponent::SaveAllDirtyTemplates()
{
for (auto& [id, templateObject] : m_templateIdMap)
{
if (IsTemplateDirty(id))
{
m_prefabLoader.SaveTemplate(id);
}
}
}
bool PrefabSystemComponent::ConnectTemplates(
Link& link,
TemplateId sourceTemplateId,
@@ -183,6 +183,8 @@ namespace AzToolsFramework
*/
void SetTemplateDirtyFlag(const TemplateId& templateId, bool dirty) override;
void SaveAllDirtyTemplates() override;
//////////////////////////////////////////////////////////////////////////
/**
@@ -49,6 +49,7 @@ namespace AzToolsFramework
virtual bool IsTemplateDirty(const TemplateId& templateId) = 0;
virtual void SetTemplateDirtyFlag(const TemplateId& templateId, bool dirty) = 0;
virtual void SaveAllDirtyTemplates() = 0;
virtual PrefabDom& FindTemplateDom(TemplateId templateId) = 0;
virtual void UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) = 0;