Просмотр исходного кода

PrefabDiff game object handle search no longer uses RTTI to determine field types since they might be incorrect because prefab diffs are not necessarily constructed according to RTTI

BearishSun 10 лет назад
Родитель
Сommit
9c5289c21e
1 измененных файлов с 11 добавлено и 24 удалено
  1. 11 24
      BansheeCore/Include/BsPrefabDiffRTTI.h

+ 11 - 24
BansheeCore/Include/BsPrefabDiffRTTI.h

@@ -204,39 +204,26 @@ namespace BansheeEngine
 						continue;
 
 					SPtr<SerializedInstance> entryData = child.second.serialized;
-					if (curGenericField->isArray())
+					if (entryData == nullptr)
+						continue;
+
+					if (rtti_is_of_type<SerializedArray>(entryData))
 					{
 						SPtr<SerializedArray> arrayData = std::static_pointer_cast<SerializedArray>(entryData);
-
-						switch (curGenericField->mType)
+						
+						for (auto& arrayElem : arrayData->entries)
 						{
-						case SerializableFT_ReflectablePtr:
-						case SerializableFT_Reflectable:
-						{
-							for (auto& arrayElem : arrayData->entries)
+							if (arrayElem.second.serialized != nullptr && rtti_is_of_type<SerializedObject>(arrayElem.second.serialized))
 							{
 								SPtr<SerializedObject> arrayElemData = std::static_pointer_cast<SerializedObject>(arrayElem.second.serialized);
-
-								if (arrayElemData != nullptr)
-									findGameObjectHandles(arrayElemData, handleObjects);
+								findGameObjectHandles(arrayElemData, handleObjects);
 							}
 						}
-							break;
-						}
 					}
-					else
+					else if(rtti_is_of_type<SerializedObject>(entryData))
 					{
-						switch (curGenericField->mType)
-						{
-						case SerializableFT_ReflectablePtr:
-						case SerializableFT_Reflectable:
-						{
-							SPtr<SerializedObject> fieldObjectData = std::static_pointer_cast<SerializedObject>(entryData);
-							if (fieldObjectData != nullptr)
-								findGameObjectHandles(fieldObjectData, handleObjects);
-						}
-							break;
-						}
+						SPtr<SerializedObject> fieldObjectData = std::static_pointer_cast<SerializedObject>(entryData);
+						findGameObjectHandles(fieldObjectData, handleObjects);
 					}
 				}
 			}