blob: a55c92b90e6112fa8caf37bd6f010b4838b1ea95 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include "UnityPrefix.h"
#include "EditorExtension.h"
#if !GAMERELEASE
#include "Editor/Src/EditorExtensionImpl.h"
#include "Runtime/Serialize/TransferFunctions/SerializeTransfer.h"
#include "Runtime/Serialize/TransferUtility.h"
#include "Runtime/Serialize/SerializationMetaFlags.h"
#include "Runtime/Utilities/dynamic_bitset.h"
#include "Editor/Src/Prefabs/Prefab.h"
#include "Editor/Src/Prefabs/PrefabBackwardsCompatibility.h"
EditorExtension::EditorExtension (MemLabelId label, ObjectCreationMode mode)
: Super(label, mode)
{
}
EditorExtension::~EditorExtension ()
{
Assert(m_DeprecatedExtensionPtr.GetInstanceID() == 0);
}
bool EditorExtension::IsPrefabParent () const
{
Prefab* prefab = m_Prefab;
return prefab != NULL && prefab->IsPrefabParent();
}
template<class TransferFunction>
void EditorExtension::Transfer (TransferFunction& transfer)
{
Super::Transfer (transfer);
if (!transfer.IsSerializingForGameRelease ())
{
if (SerializePrefabIgnoreProperties(transfer))
{
transfer.Transfer (m_PrefabParentObject, "m_PrefabParentObject", kHideInEditorMask | kIgnoreWithInspectorUndoMask);
transfer.Transfer (m_Prefab, "m_PrefabInternal", kHideInEditorMask | kIgnoreWithInspectorUndoMask);
}
if (transfer.IsReadingBackwardsCompatible())
transfer.Transfer (m_DeprecatedExtensionPtr, "m_ExtensionPtr", kHideInEditorMask | kIgnoreWithInspectorUndoMask);
}
}
PPtr<EditorExtensionImpl> GetDeprecatedExtensionPtrIfExists (const Object& o)
{
EditorExtension* extension = dynamic_pptr_cast<EditorExtension*> (&o);
if (extension)
return extension->m_DeprecatedExtensionPtr;
else
return NULL;
}
void EditorExtension::PatchPrefabBackwardsCompatibility ()
{
if (m_DeprecatedExtensionPtr.IsValid ())
{
m_Prefab = m_DeprecatedExtensionPtr->m_DataTemplate;
if (m_DeprecatedExtensionPtr->m_TemplateFather.IsValid())
m_PrefabParentObject = m_DeprecatedExtensionPtr->m_TemplateFather;
if (m_Prefab.IsValid() && m_PrefabParentObject.IsValid() && m_DeprecatedExtensionPtr->m_Object == PPtr<EditorExtension> (this))
ReadOldPrefabFormat (*m_Prefab, *this, *m_PrefabParentObject, *m_DeprecatedExtensionPtr);
///@TODO: DESTROY!!!
/// DestroyObject(m_DeprecatedExtensionPtr)
}
m_DeprecatedExtensionPtr = NULL;
}
void EditorExtension::AwakeFromLoad (AwakeFromLoadMode mode)
{
Super::AwakeFromLoad(mode);
PatchPrefabBackwardsCompatibility ();
}
IMPLEMENT_OBJECT_SERIALIZE (EditorExtension)
IMPLEMENT_CLASS (EditorExtension)
INSTANTIATE_TEMPLATE_TRANSFER (EditorExtension)
#else
IMPLEMENT_CLASS (EditorExtension)
EditorExtension::~EditorExtension ()
{
}
#endif
|