diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 39615c066f..8f88d8ea9d 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -365,13 +365,7 @@ namespace OpenSim.Region.Environment.Scenes /// public SceneObjectGroup(SceneObjectPart part) { - part.SetParent(this); - part.ParentID = 0; - part.LinkNum = 0; - - m_parts.Add(part.UUID, part); - - SetPartAsRoot(part); + SetRootPart(part); } /// @@ -506,11 +500,8 @@ namespace OpenSim.Region.Environment.Scenes /// public SceneObjectGroup(UUID ownerID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape) { - Vector3 rootOffset = new Vector3(0, 0, 0); - SceneObjectPart newPart = new SceneObjectPart(ownerID, shape, pos, rot, rootOffset); - newPart.LinkNum = 0; - AddPart(newPart); - SetPartAsRoot(newPart); + Vector3 rootOffset = new Vector3(0, 0, 0); + SetRootPart(new SceneObjectPart(ownerID, shape, pos, rot, rootOffset)); } /// @@ -734,15 +725,6 @@ namespace OpenSim.Region.Environment.Scenes writer.WriteEndElement(); } - /// - /// - /// - /// - private void SetPartAsRoot(SceneObjectPart part) - { - m_rootPart = part; - } - /// /// Attach this scene object to the given avatar. /// @@ -890,9 +872,22 @@ namespace OpenSim.Region.Environment.Scenes { m_scene = scene; } + + /// + /// Set a part to act as the root part for this scene object + /// + /// + private void SetRootPart(SceneObjectPart part) + { + part.SetParent(this); + part.ParentID = 0; + part.LinkNum = 0; + m_rootPart = part; + m_parts.Add(m_rootPart.UUID, m_rootPart); + } /// - /// Add a new part to this scene object + /// Add a new part to this scene object. The part must already be correctly configured. /// /// public void AddPart(SceneObjectPart part) @@ -1394,15 +1389,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void CopyRootPart(SceneObjectPart part, UUID cAgentID, UUID cGroupID, bool userExposed) { - SceneObjectPart newPart = part.Copy(m_scene.AllocateLocalId(), OwnerID, GroupID, m_parts.Count, userExposed); - newPart.SetParent(this); - - lock (m_parts) - { - m_parts.Add(newPart.UUID, newPart); - } - - SetPartAsRoot(newPart); + SetRootPart(part.Copy(m_scene.AllocateLocalId(), OwnerID, GroupID, m_parts.Count, userExposed)); } public void ScriptSetPhysicsStatus(bool UsePhysics)