瀏覽代碼

Duplicate in scene window now works

BearishSun 10 年之前
父節點
當前提交
145a44e4ca

+ 3 - 15
SBansheeEditor/Source/BsScriptSelection.cpp

@@ -49,11 +49,7 @@ namespace BansheeEngine
 
 
 		for (UINT32 i = 0; i < (UINT32)sceneObjects.size(); i++)
 		for (UINT32 i = 0; i < (UINT32)sceneObjects.size(); i++)
 		{
 		{
-			// TODO - This bit is commonly used, I should add a method in ScriptGameObjectManager
-			ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(sceneObjects[i]);
-			if (scriptSceneObject == nullptr)
-				scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(sceneObjects[i]);
-
+			ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObjects[i]);
 			MonoObject* sceneMonoObject = scriptSceneObject->getManagedInstance();
 			MonoObject* sceneMonoObject = scriptSceneObject->getManagedInstance();
 
 
 			void* elemAddr = mono_array_addr_with_size(sceneObjectArray, sizeof(MonoObject*), i);
 			void* elemAddr = mono_array_addr_with_size(sceneObjectArray, sizeof(MonoObject*), i);
@@ -183,11 +179,7 @@ namespace BansheeEngine
 		ScriptArray scriptObjects = ScriptArray::create<ScriptSceneObject>(numObjects);
 		ScriptArray scriptObjects = ScriptArray::create<ScriptSceneObject>(numObjects);
 		for (UINT32 i = 0; i < numObjects; i++)
 		for (UINT32 i = 0; i < numObjects; i++)
 		{
 		{
-			// TODO - This bit is commonly used, I should add a method in ScriptGameObjectManager
-			ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(sceneObjects[i]);
-			if (scriptSceneObject == nullptr)
-				scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(sceneObjects[i]);
-
+			ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObjects[i]);
 			scriptObjects.set(i, scriptSceneObject->getManagedInstance());
 			scriptObjects.set(i, scriptSceneObject->getManagedInstance());
 		}
 		}
 
 
@@ -210,11 +202,7 @@ namespace BansheeEngine
 
 
 	void ScriptSelection::onSceneObjectPing(const HSceneObject& sceneObject)
 	void ScriptSelection::onSceneObjectPing(const HSceneObject& sceneObject)
 	{
 	{
-		// TODO - This bit is commonly used, I should add a method in ScriptGameObjectManager
-		ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(sceneObject);
-		if (scriptSceneObject == nullptr)
-			scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(sceneObject);
-
+		ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObject);
 		MonoUtil::invokeThunk(OnPingSceneObjectThunk, scriptSceneObject->getManagedInstance());
 		MonoUtil::invokeThunk(OnPingSceneObjectThunk, scriptSceneObject->getManagedInstance());
 	}
 	}
 }
 }

+ 5 - 3
SBansheeEditor/Source/BsScriptUndoRedo.cpp

@@ -84,7 +84,8 @@ namespace BansheeEngine
 		WString nativeDescription = MonoUtil::monoToWString(description);
 		WString nativeDescription = MonoUtil::monoToWString(description);
 		HSceneObject clone = CmdCloneSO::execute(soPtr->getNativeSceneObject(), nativeDescription);
 		HSceneObject clone = CmdCloneSO::execute(soPtr->getNativeSceneObject(), nativeDescription);
 
 
-		return ScriptGameObjectManager::instance().createScriptSceneObject(clone)->getManagedInstance();
+		ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(clone);
+		return cloneSoPtr->getManagedInstance();
 	}
 	}
 
 
 	MonoArray* ScriptUndoRedo::internal_CloneSOMulti(MonoArray* soPtrs, MonoString* description)
 	MonoArray* ScriptUndoRedo::internal_CloneSOMulti(MonoArray* soPtrs, MonoString* description)
@@ -98,8 +99,8 @@ namespace BansheeEngine
 		{
 		{
 			ScriptSceneObject* soPtr = input.get<ScriptSceneObject*>(i);
 			ScriptSceneObject* soPtr = input.get<ScriptSceneObject*>(i);
 			HSceneObject clone = CmdCloneSO::execute(soPtr->getNativeSceneObject(), nativeDescription);
 			HSceneObject clone = CmdCloneSO::execute(soPtr->getNativeSceneObject(), nativeDescription);
-			ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().createScriptSceneObject(clone);
 
 
+			ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(clone);
 			output.set(i, cloneSoPtr->getManagedInstance());
 			output.set(i, cloneSoPtr->getManagedInstance());
 		}
 		}
 
 
@@ -115,7 +116,8 @@ namespace BansheeEngine
 		WString nativeDescription = MonoUtil::monoToWString(description);
 		WString nativeDescription = MonoUtil::monoToWString(description);
 		HSceneObject clone = CmdInstantiateSO::execute(prefab, nativeDescription);
 		HSceneObject clone = CmdInstantiateSO::execute(prefab, nativeDescription);
 
 
-		return ScriptGameObjectManager::instance().createScriptSceneObject(clone)->getManagedInstance();
+		ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(clone);
+		return cloneSoPtr->getManagedInstance();
 	}
 	}
 
 
 	MonoObject* ScriptUndoRedo::internal_CreateSO(MonoString* name, MonoString* description)
 	MonoObject* ScriptUndoRedo::internal_CreateSO(MonoString* name, MonoString* description)

+ 1 - 1
SBansheeEngine/Include/BsManagedComponent.h

@@ -66,7 +66,7 @@ namespace BansheeEngine
 		 * @param	missingType	Is the component's type missing (can happen after assembly reload).
 		 * @param	missingType	Is the component's type missing (can happen after assembly reload).
 		 *						If true then the serialized data will be stored internally until later
 		 *						If true then the serialized data will be stored internally until later
 		 *						date when user perhaps restores the type with another refresh.
 		 *						date when user perhaps restores the type with another refresh.
-		 *						/p instance must be null if this is true.
+		 *						\p instance must be null if this is true.
 		 */
 		 */
 		void restore(MonoObject* instance, const ComponentBackupData& data, bool missingType);
 		void restore(MonoObject* instance, const ComponentBackupData& data, bool missingType);
 
 

+ 1 - 1
SBansheeEngine/Include/BsManagedSerializableDiff.h

@@ -188,7 +188,7 @@ namespace BansheeEngine
 		 * @brief	Generates a new managed diff object by comparing two objects of the same type. Callers must
 		 * @brief	Generates a new managed diff object by comparing two objects of the same type. Callers must
 		 *			ensure both objects are not null and of identical types.
 		 *			ensure both objects are not null and of identical types.
 		 *
 		 *
-		 * @param	oldObj	Original object. This is the object you can apply the diff to to convert it to /p newObj.
+		 * @param	oldObj	Original object. This is the object you can apply the diff to to convert it to \p newObj.
 		 * @param	newObj	New modified object. Any values in this object that differ from the original object will be
 		 * @param	newObj	New modified object. Any values in this object that differ from the original object will be
 		 *					recorded in the diff.
 		 *					recorded in the diff.
 		 *
 		 *

+ 1 - 4
SBansheeEngine/Source/BsManagedSerializableField.cpp

@@ -853,10 +853,7 @@ namespace BansheeEngine
 			{
 			{
 				if(value)
 				if(value)
 				{
 				{
-					ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(value);
-					if(scriptSceneObject == nullptr)
-						scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(value);
-
+					ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(value);
 					return scriptSceneObject->getManagedInstance();
 					return scriptSceneObject->getManagedInstance();
 				}
 				}
 				else
 				else

+ 1 - 3
SBansheeEngine/Source/BsScriptComponent.cpp

@@ -151,9 +151,7 @@ namespace BansheeEngine
 
 
 		HSceneObject sceneObject = nativeInstance->mManagedComponent->sceneObject();
 		HSceneObject sceneObject = nativeInstance->mManagedComponent->sceneObject();
 
 
-		ScriptSceneObject* scriptSO = ScriptGameObjectManager::instance().getScriptSceneObject(sceneObject);
-		if (scriptSO == nullptr)
-			scriptSO = ScriptGameObjectManager::instance().createScriptSceneObject(sceneObject);
+		ScriptSceneObject* scriptSO = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObject);
 
 
 		assert(scriptSO->getManagedInstance() != nullptr);
 		assert(scriptSO->getManagedInstance() != nullptr);
 		return scriptSO->getManagedInstance();
 		return scriptSO->getManagedInstance();

+ 1 - 4
SBansheeEngine/Source/BsScriptSceneObject.cpp

@@ -120,10 +120,7 @@ namespace BansheeEngine
 			return nullptr;
 			return nullptr;
 
 
 		HSceneObject parent = nativeInstance->mSceneObject->getParent();
 		HSceneObject parent = nativeInstance->mSceneObject->getParent();
-
-		ScriptSceneObject* parentScriptSO = ScriptGameObjectManager::instance().getScriptSceneObject(parent);
-		if(parentScriptSO == nullptr)
-			parentScriptSO = ScriptGameObjectManager::instance().createScriptSceneObject(parent);
+		ScriptSceneObject* parentScriptSO = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(parent);
 
 
 		return parentScriptSO->getManagedInstance();
 		return parentScriptSO->getManagedInstance();
 	}
 	}