Add content deprecation upgrades support to prefabs and scenes when loading levels

This commit is contained in:
Wojtek Figat
2025-01-20 23:53:13 +01:00
parent 67f12596e2
commit 7d0804af91
7 changed files with 113 additions and 7 deletions

View File

@@ -19,6 +19,7 @@
#include "Engine/Threading/Threading.h"
#include "Engine/Level/Scripts/MissingScript.h"
#endif
#include "Engine/Content/Deprecated.h"
#include "Engine/Level/Scripts/ModelPrefab.h"
#if USE_EDITOR
@@ -199,6 +200,7 @@ SceneObject* SceneObjectsFactory::Spawn(Context& context, const ISerializable::D
else
{
// [Deprecated: 18.07.2019 expires 18.07.2020]
MARK_CONTENT_DEPRECATED();
const auto typeIdMember = stream.FindMember("TypeID");
if (typeIdMember == stream.MemberEnd())
{
@@ -286,7 +288,19 @@ void SceneObjectsFactory::Deserialize(Context& context, SceneObject* obj, ISeria
// Deserialize prefab data (recursive prefab loading to support nested prefabs)
const auto prevVersion = modifier->EngineBuild;
modifier->EngineBuild = prefab->DataEngineBuild;
#if USE_EDITOR
bool prevDeprecated = ContentDeprecated::Clear();
#endif
Deserialize(context, obj, *(ISerializable::DeserializeStream*)prefabData);
#if USE_EDITOR
if (ContentDeprecated::Clear(prevDeprecated))
{
// Prefab contains deprecated data format
context.Locker.Lock();
context.DeprecatedPrefabs.Add(prefab);
context.Locker.Unlock();
}
#endif
modifier->EngineBuild = prevVersion;
}