aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs41
1 files changed, 34 insertions, 7 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index e44705c..263ac27 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Region.Environment.Scenes
67 /// </summary> 67 /// </summary>
68 public int PrimCount 68 public int PrimCount
69 { 69 {
70 get { return 1; } 70 get { return m_parts.Count; }
71 } 71 }
72 72
73 public LLQuaternion GroupRotation 73 public LLQuaternion GroupRotation
@@ -240,8 +240,9 @@ namespace OpenSim.Region.Environment.Scenes
240 m_scene = scene; 240 m_scene = scene;
241 part.SetParent(this); 241 part.SetParent(this);
242 part.ParentID = 0; 242 part.ParentID = 0;
243 243 part.LinkNum = 0;
244 m_parts.Add(part.UUID, part); 244 m_parts.Add(part.UUID, part);
245
245 SetPartAsRoot(part); 246 SetPartAsRoot(part);
246 247
247 RegionHandle = regionHandle; 248 RegionHandle = regionHandle;
@@ -267,7 +268,7 @@ namespace OpenSim.Region.Environment.Scenes
267 reader.ReadStartElement("SceneObjectGroup"); 268 reader.ReadStartElement("SceneObjectGroup");
268 reader.ReadStartElement("RootPart"); 269 reader.ReadStartElement("RootPart");
269 m_rootPart = SceneObjectPart.FromXml(reader); 270 m_rootPart = SceneObjectPart.FromXml(reader);
270 271 AddPart(m_rootPart);
271 reader.ReadEndElement(); 272 reader.ReadEndElement();
272 273
273 while (reader.Read()) 274 while (reader.Read())
@@ -293,7 +294,7 @@ namespace OpenSim.Region.Environment.Scenes
293 reader.Close(); 294 reader.Close();
294 sr.Close(); 295 sr.Close();
295 296
296 AddPart(m_rootPart); 297
297 298
298 m_rootPart.LocalID = m_scene.PrimIDAllocate(); 299 m_rootPart.LocalID = m_scene.PrimIDAllocate();
299 m_rootPart.ParentID = 0; 300 m_rootPart.ParentID = 0;
@@ -318,6 +319,10 @@ namespace OpenSim.Region.Environment.Scenes
318 319
319 reader.ReadStartElement("SceneObjectGroup"); 320 reader.ReadStartElement("SceneObjectGroup");
320 m_rootPart = SceneObjectPart.FromXml(reader); 321 m_rootPart = SceneObjectPart.FromXml(reader);
322 m_rootPart.SetParent(this);
323 m_parts.Add(m_rootPart.UUID, m_rootPart);
324 m_rootPart.ParentID = 0;
325 m_rootPart.LinkNum = 0;
321 326
322 reader.Read(); 327 reader.Read();
323 bool more = true; 328 bool more = true;
@@ -346,9 +351,7 @@ namespace OpenSim.Region.Environment.Scenes
346 } 351 }
347 reader.Close(); 352 reader.Close();
348 sr.Close(); 353 sr.Close();
349 m_rootPart.SetParent(this); 354
350 m_parts.Add(m_rootPart.UUID, m_rootPart);
351 m_rootPart.ParentID = 0;
352 UpdateParentIDs(); 355 UpdateParentIDs();
353 356
354 ScheduleGroupForFullUpdate(); 357 ScheduleGroupForFullUpdate();
@@ -431,6 +434,7 @@ namespace OpenSim.Region.Environment.Scenes
431 LLVector3 rootOffset = new LLVector3(0, 0, 0); 434 LLVector3 rootOffset = new LLVector3(0, 0, 0);
432 SceneObjectPart newPart = 435 SceneObjectPart newPart =
433 new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset); 436 new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset);
437 newPart.LinkNum = m_parts.Count;
434 m_parts.Add(newPart.UUID, newPart); 438 m_parts.Add(newPart.UUID, newPart);
435 SetPartAsRoot(newPart); 439 SetPartAsRoot(newPart);
436 440
@@ -586,6 +590,7 @@ namespace OpenSim.Region.Environment.Scenes
586 { 590 {
587 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID); 591 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID);
588 newPart.SetParent(this); 592 newPart.SetParent(this);
593 newPart.LinkNum = m_parts.Count;
589 m_parts.Add(newPart.UUID, newPart); 594 m_parts.Add(newPart.UUID, newPart);
590 SetPartAsRoot(newPart); 595 SetPartAsRoot(newPart);
591 } 596 }
@@ -615,6 +620,7 @@ namespace OpenSim.Region.Environment.Scenes
615 { 620 {
616 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID); 621 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID);
617 newPart.SetParent(this); 622 newPart.SetParent(this);
623 newPart.LinkNum = m_parts.Count;
618 m_parts.Add(newPart.UUID, newPart); 624 m_parts.Add(newPart.UUID, newPart);
619 SetPartAsNonRoot(newPart); 625 SetPartAsNonRoot(newPart);
620 } 626 }
@@ -627,6 +633,7 @@ namespace OpenSim.Region.Environment.Scenes
627 foreach (SceneObjectPart part in partsList) 633 foreach (SceneObjectPart part in partsList)
628 { 634 {
629 part.UUID = LLUUID.Random(); 635 part.UUID = LLUUID.Random();
636 part.LinkNum = m_parts.Count;
630 m_parts.Add(part.UUID, part); 637 m_parts.Add(part.UUID, part);
631 } 638 }
632 } 639 }
@@ -770,6 +777,23 @@ namespace OpenSim.Region.Environment.Scenes
770 #region SceneGroupPart Methods 777 #region SceneGroupPart Methods
771 778
772 /// <summary> 779 /// <summary>
780 /// Get the child part by LinkNum
781 /// </summary>
782 /// <param name="linknum"></param>
783 /// <returns>null if no child part with that linknum or child part</returns>
784 public SceneObjectPart GetLinkNumPart(int linknum)
785 {
786 foreach (SceneObjectPart part in m_parts.Values)
787 {
788 if (part.LinkNum == linknum)
789 {
790 return part;
791 }
792 }
793 return null;
794 }
795
796 /// <summary>
773 /// Get a child part with a given UUID 797 /// Get a child part with a given UUID
774 /// </summary> 798 /// </summary>
775 /// <param name="primID"></param> 799 /// <param name="primID"></param>
@@ -868,6 +892,7 @@ namespace OpenSim.Region.Environment.Scenes
868 Quaternion newRot = parentRot.Inverse() * oldRot; 892 Quaternion newRot = parentRot.Inverse() * oldRot;
869 linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); 893 linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w);
870 linkPart.ParentID = m_rootPart.LocalID; 894 linkPart.ParentID = m_rootPart.LocalID;
895 linkPart.LinkNum = m_parts.Count;
871 m_parts.Add(linkPart.UUID, linkPart); 896 m_parts.Add(linkPart.UUID, linkPart);
872 linkPart.SetParent(this); 897 linkPart.SetParent(this);
873 898
@@ -979,6 +1004,7 @@ namespace OpenSim.Region.Environment.Scenes
979 { 1004 {
980 part.SetParent(this); 1005 part.SetParent(this);
981 part.ParentID = m_rootPart.LocalID; 1006 part.ParentID = m_rootPart.LocalID;
1007 part.LinkNum = m_parts.Count;
982 m_parts.Add(part.UUID, part); 1008 m_parts.Add(part.UUID, part);
983 1009
984 Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z); 1010 Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z);
@@ -1612,6 +1638,7 @@ namespace OpenSim.Region.Environment.Scenes
1612 public void AddPart(SceneObjectPart part) 1638 public void AddPart(SceneObjectPart part)
1613 { 1639 {
1614 part.SetParent(this); 1640 part.SetParent(this);
1641 part.LinkNum = m_parts.Count;
1615 m_parts.Add(part.UUID, part); 1642 m_parts.Add(part.UUID, part);
1616 } 1643 }
1617 1644