فهرست منبع

Prefab UUID is now properly saved so that root prefab link is no longer broken on next deserialization
Fixed an issue where attempting to save a scene whose prefab was deleted wouldn't re-save the scene
Fixes for VS visualizations

BearishSun 10 سال پیش
والد
کامیت
8fd904479e

+ 3 - 0
BansheeCore/Include/BsPrefabRTTI.h

@@ -24,12 +24,15 @@ namespace BansheeEngine
 		UINT32& getNextLinkId(Prefab* obj) { return obj->mNextLinkId; }
 		void setNextLinkId(Prefab* obj, UINT32& val) { obj->mNextLinkId = val; }
 
+		String& getUUID(Prefab* obj) { return obj->mUUID; }
+		void setUUID(Prefab* obj, String& val) { obj->mUUID = val; }
 	public:
 		PrefabRTTI()
 		{
 			addReflectablePtrField("mRoot", 0, &PrefabRTTI::getSceneObject, &PrefabRTTI::setSceneObject);
 			addPlainField("mHash", 1, &PrefabRTTI::getHash, &PrefabRTTI::setHash);
 			addPlainField("mNextLinkId", 2, &PrefabRTTI::getNextLinkId, &PrefabRTTI::setNextLinkId);
+			addPlainField("mUUID", 3, &PrefabRTTI::getUUID, &PrefabRTTI::setUUID);
 		}
 
 		void onDeserializationStarted(IReflectable* ptr) override

+ 8 - 3
MBansheeEditor/EditorApplication.cs

@@ -317,10 +317,15 @@ namespace BansheeEditor
             if (!string.IsNullOrEmpty(Scene.ActiveSceneUUID))
             {
                 string scenePath = ProjectLibrary.GetPath(Scene.ActiveSceneUUID);
-                SaveScene(scenePath);
+                if (!string.IsNullOrEmpty(scenePath))
+                {
+                    SaveScene(scenePath);
 
-                if (onSuccess != null)
-                    onSuccess();
+                    if (onSuccess != null)
+                        onSuccess();
+                }
+                else
+                    SaveSceneAs(onSuccess, onFailure);
             }
             else
                 SaveSceneAs(onSuccess, onFailure);

+ 0 - 3
SBansheeEngine/Source/BsScriptScene.cpp

@@ -59,10 +59,7 @@ namespace BansheeEngine
 		{
 			HSceneObject root = prefab->instantiate();
 			gSceneManager()._setRootNode(root);
-		}
 
-		if (prefab != nullptr)
-		{
 			ScriptPrefab* scriptPrefab;
 			ScriptResourceManager::instance().getScriptResource(prefab, &scriptPrefab, true);
 

+ 7 - 2
Scripts/VSVisualizations.natvis

@@ -9,12 +9,17 @@
 	</Expand>
   </Type>
   
-  <Type Name="BansheeEngine::ResourceHandleBase&lt;*&gt;">
+  <Type Name="BansheeEngine::TResourceHandle&lt;*&gt;">
 	<DisplayString Condition="mData._Ptr == 0 || mData._Ptr->mPtr._Ptr == 0">Empty</DisplayString>
     <DisplayString>Name = {mData._Ptr->mPtr._Ptr->mMetaData._Ptr->displayName}, UUID = {mData._Ptr->mUUID}</DisplayString>
 	<Expand>	
 		<ExpandedItem Condition="mData._Ptr != 0 &amp;&amp; mData._Ptr->mPtr._Ptr != 0">($T1*)mData._Ptr->mPtr._Ptr</ExpandedItem>
 	</Expand>
-  </Type> 
+  </Type>
+
+  <Type Name="BansheeEngine::HString">
+    <DisplayString Condition="mStringData._Ptr == 0">Empty</DisplayString>
+    <DisplayString>Value = {mStringData._Ptr->string}</DisplayString>
+  </Type>
 
 </AutoVisualizer>