diff options
author | Justin Clark-Casey (justincc) | 2011-03-26 02:24:32 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-03-26 02:24:32 +0000 |
commit | f2d2470c256486df585705313a7fdfdf3d344c1f (patch) | |
tree | 62b1776d2d0d9e66caf19bb6c014ead21e2d344c | |
parent | Make SceneGraph.ForEachSOG() execute once for each SOG, not once for each pri... (diff) | |
download | opensim-SC-f2d2470c256486df585705313a7fdfdf3d344c1f.zip opensim-SC-f2d2470c256486df585705313a7fdfdf3d344c1f.tar.gz opensim-SC-f2d2470c256486df585705313a7fdfdf3d344c1f.tar.bz2 opensim-SC-f2d2470c256486df585705313a7fdfdf3d344c1f.tar.xz |
When an object is duplicated, add it to the full/local id SOG indexes as well as Entities
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1621398..60855b2 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -363,6 +363,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
363 | 363 | ||
364 | if (Entities.ContainsKey(sceneObject.UUID)) | 364 | if (Entities.ContainsKey(sceneObject.UUID)) |
365 | return false; | 365 | return false; |
366 | |||
367 | // m_log.DebugFormat( | ||
368 | // "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}", | ||
369 | // sceneObject.Name, sceneObject.UUID, sceneObject.Parts.Length, m_parentScene.RegionInfo.RegionName); | ||
366 | 370 | ||
367 | SceneObjectPart[] children = sceneObject.Parts; | 371 | SceneObjectPart[] children = sceneObject.Parts; |
368 | 372 | ||
@@ -1798,7 +1802,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1798 | /// <param name="rot"></param> | 1802 | /// <param name="rot"></param> |
1799 | public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) | 1803 | public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) |
1800 | { | 1804 | { |
1801 | //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); | 1805 | // m_log.DebugFormat( |
1806 | // "[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", | ||
1807 | // originalPrimID, offset, AgentID); | ||
1808 | |||
1802 | SceneObjectGroup original = GetGroupByPrim(originalPrimID); | 1809 | SceneObjectGroup original = GetGroupByPrim(originalPrimID); |
1803 | if (original != null) | 1810 | if (original != null) |
1804 | { | 1811 | { |
@@ -1829,7 +1836,28 @@ namespace OpenSim.Region.Framework.Scenes | |||
1829 | copy.RootPart.SalePrice = 10; | 1836 | copy.RootPart.SalePrice = 10; |
1830 | } | 1837 | } |
1831 | 1838 | ||
1839 | // FIXME: This section needs to be refactored so that it just calls AddSceneObject() | ||
1832 | Entities.Add(copy); | 1840 | Entities.Add(copy); |
1841 | |||
1842 | lock (SceneObjectGroupsByFullID) | ||
1843 | SceneObjectGroupsByFullID[copy.UUID] = copy; | ||
1844 | |||
1845 | SceneObjectPart[] children = copy.Parts; | ||
1846 | |||
1847 | lock (SceneObjectGroupsByFullPartID) | ||
1848 | { | ||
1849 | SceneObjectGroupsByFullPartID[copy.UUID] = copy; | ||
1850 | foreach (SceneObjectPart part in children) | ||
1851 | SceneObjectGroupsByFullPartID[part.UUID] = copy; | ||
1852 | } | ||
1853 | |||
1854 | lock (SceneObjectGroupsByLocalPartID) | ||
1855 | { | ||
1856 | SceneObjectGroupsByLocalPartID[copy.LocalId] = copy; | ||
1857 | foreach (SceneObjectPart part in children) | ||
1858 | SceneObjectGroupsByLocalPartID[copy.LocalId] = copy; | ||
1859 | } | ||
1860 | // PROBABLE END OF FIXME | ||
1833 | 1861 | ||
1834 | // Since we copy from a source group that is in selected | 1862 | // Since we copy from a source group that is in selected |
1835 | // state, but the copy is shown deselected in the viewer, | 1863 | // state, but the copy is shown deselected in the viewer, |