summaryrefslogtreecommitdiff
path: root/Runtime/BaseClasses/EditorExtension.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/BaseClasses/EditorExtension.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/BaseClasses/EditorExtension.cpp')
-rw-r--r--Runtime/BaseClasses/EditorExtension.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/Runtime/BaseClasses/EditorExtension.cpp b/Runtime/BaseClasses/EditorExtension.cpp
new file mode 100644
index 0000000..a55c92b
--- /dev/null
+++ b/Runtime/BaseClasses/EditorExtension.cpp
@@ -0,0 +1,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
+