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

Fix a crash if a prefab resource cannot be found
Refuse to load a project with no Resources folder
Potential fix for a crash when a selected element in tree view gets removed

BearishSun 9 лет назад
Родитель
Сommit
aed1e23679

+ 1 - 1
Source/BansheeCore/Source/BsPrefabUtility.cpp

@@ -232,7 +232,7 @@ namespace BansheeEngine
 				current->mPrefabDiff = nullptr;
 
 				HPrefab prefabLink = static_resource_cast<Prefab>(gResources().loadFromUUID(current->mPrefabLinkUUID, false, false));
-				if (prefabLink != nullptr)
+				if (prefabLink.isLoaded(false))
 					current->mPrefabDiff = PrefabDiff::create(prefabLink->_getRoot(), current->getHandle());
 			}
 

+ 2 - 1
Source/BansheeCore/Source/Win32/BsWin32FolderMonitor.cpp

@@ -332,7 +332,8 @@ namespace BansheeEngine
 	{
 		if(!FileSystem::isDirectory(folderPath))
 		{
-			BS_EXCEPT(InvalidParametersException, "Provided path \"" + folderPath.toString() + "\" is not a directory");
+			LOGERR("Provided path \"" + folderPath.toString() + "\" is not a directory");
+			return;
 		}
 
 		WString extendedFolderPath = L"\\\\?\\" + folderPath.toWString(Path::PathType::Windows);

+ 4 - 1
Source/BansheeEditor/Source/BsEditorApplication.cpp

@@ -291,6 +291,10 @@ namespace BansheeEngine
 		if (!FileSystem::isDirectory(path))
 			return false;
 
+		Path resourceDir = Path::combine(path, ProjectLibrary::RESOURCES_DIR);
+		if (!FileSystem::exists(resourceDir))
+			return false;
+
 		return true;
 	}
 
@@ -322,7 +326,6 @@ namespace BansheeEngine
 
 	void EditorApplication::saveDefaultWidgetLayout()
 	{
-		Path resourceDir = Path::combine(mProjectPath, ProjectLibrary::RESOURCES_DIR);
 		Path internalResourcesDir = Path::combine(mProjectPath, ProjectLibrary::INTERNAL_RESOURCES_DIR);
 
 		if (!FileSystem::exists(internalResourcesDir))

+ 17 - 11
Source/BansheeEditor/Source/BsGUITreeView.cpp

@@ -1071,6 +1071,8 @@ namespace BansheeEngine
 		for(auto selectedElem : mSelectedElements)
 		{
 			GUILabel* targetElement = selectedElem.element->mElement;
+			if (targetElement == nullptr)
+				continue;
 
 			GUILayoutData childData = data;
 			childData.area.y = targetElement->_getLayoutData().area.y;
@@ -1082,25 +1084,29 @@ namespace BansheeEngine
 		if (mIsElementHighlighted)
 		{
 			GUILabel* targetElement = mHighlightedElement.element->mElement;
+			if (targetElement != nullptr)
+			{
+				GUILayoutData childData = data;
+				childData.area.y = targetElement->_getLayoutData().area.y;
+				childData.area.height = targetElement->_getLayoutData().area.height;
 
-			GUILayoutData childData = data;
-			childData.area.y = targetElement->_getLayoutData().area.y;
-			childData.area.height = targetElement->_getLayoutData().area.height;
-
-			mHighlightedElement.background->_setLayoutData(childData);
+				mHighlightedElement.background->_setLayoutData(childData);
+			}
 		}
 
 		if(mEditElement != nullptr)
 		{
 			GUILabel* targetElement = mEditElement->mElement;
+			if (targetElement != nullptr)
+			{
+				UINT32 remainingWidth = (UINT32)std::max(0, (((INT32)data.area.width) - (offset.x - data.area.x)));
 
-			UINT32 remainingWidth = (UINT32)std::max(0, (((INT32)data.area.width) - (offset.x - data.area.x)));
-
-			GUILayoutData childData = data;
-			childData.area = targetElement->_getLayoutData().area;
-			childData.area.width = remainingWidth;
+				GUILayoutData childData = data;
+				childData.area = targetElement->_getLayoutData().area;
+				childData.area.width = remainingWidth;
 
-			mNameEditBox->_setLayoutData(childData);
+				mNameEditBox->_setLayoutData(childData);
+			}
 		}
 
 		if(mDragInProgress)