aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-03-13 00:22:38 +0000
committerJustin Clarke Casey2008-03-13 00:22:38 +0000
commita4304fb9e6ec94b9a2aa70db85a68b9b102d4c33 (patch)
tree0b98401a00ff68bebdf2f7de385386e6a5060fff /OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
parent* Updated LibSL _packets_.cs to latest revision. AKA New Packets. (diff)
downloadopensim-SC_OLD-a4304fb9e6ec94b9a2aa70db85a68b9b102d4c33.zip
opensim-SC_OLD-a4304fb9e6ec94b9a2aa70db85a68b9b102d4c33.tar.gz
opensim-SC_OLD-a4304fb9e6ec94b9a2aa70db85a68b9b102d4c33.tar.bz2
opensim-SC_OLD-a4304fb9e6ec94b9a2aa70db85a68b9b102d4c33.tar.xz
* Fix Mantis 761 (linking and delinking prims rapidly caused prims to 'disappear')
* Root cause was that if two updates occurred in the same second of time, the second one was never sent * Linking/delinking appears to be okay now
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs14
1 files changed, 11 insertions, 3 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 1a32460..50dc2ae 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -247,9 +247,11 @@ namespace OpenSim.Region.Environment.Scenes
247 public SceneObjectGroup(Scene scene, ulong regionHandle, SceneObjectPart part) 247 public SceneObjectGroup(Scene scene, ulong regionHandle, SceneObjectPart part)
248 { 248 {
249 m_scene = scene; 249 m_scene = scene;
250
250 part.SetParent(this); 251 part.SetParent(this);
251 part.ParentID = 0; 252 part.ParentID = 0;
252 part.LinkNum = 0; 253 part.LinkNum = 0;
254
253 m_parts.Add(part.UUID, part); 255 m_parts.Add(part.UUID, part);
254 256
255 SetPartAsRoot(part); 257 SetPartAsRoot(part);
@@ -691,7 +693,7 @@ namespace OpenSim.Region.Environment.Scenes
691 #region Scheduling 693 #region Scheduling
692 694
693 /// <summary> 695 /// <summary>
694 /// 696 /// Examine this object's parts to see if they've changed sufficiently to warrant an update
695 /// </summary> 697 /// </summary>
696 public override void Update() 698 public override void Update()
697 { 699 {
@@ -703,6 +705,7 @@ namespace OpenSim.Region.Environment.Scenes
703 } 705 }
704 lastPhysGroupPos = AbsolutePosition; 706 lastPhysGroupPos = AbsolutePosition;
705 } 707 }
708
706 if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1) 709 if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1)
707 || (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1) 710 || (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1)
708 || (Math.Abs(lastPhysGroupRot.Y - GroupRotation.Y) > 0.1) 711 || (Math.Abs(lastPhysGroupRot.Y - GroupRotation.Y) > 0.1)
@@ -714,6 +717,7 @@ namespace OpenSim.Region.Environment.Scenes
714 } 717 }
715 lastPhysGroupRot = GroupRotation; 718 lastPhysGroupRot = GroupRotation;
716 } 719 }
720
717 foreach (SceneObjectPart part in m_parts.Values) 721 foreach (SceneObjectPart part in m_parts.Values)
718 { 722 {
719 part.SendScheduledUpdates(); 723 part.SendScheduledUpdates();
@@ -737,7 +741,7 @@ namespace OpenSim.Region.Environment.Scenes
737 } 741 }
738 742
739 /// <summary> 743 /// <summary>
740 /// 744 /// Schedule a full update for every part in this object
741 /// </summary> 745 /// </summary>
742 public void ScheduleGroupForFullUpdate() 746 public void ScheduleGroupForFullUpdate()
743 { 747 {
@@ -910,6 +914,7 @@ namespace OpenSim.Region.Environment.Scenes
910 linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); 914 linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w);
911 915
912 linkPart.ParentID = m_rootPart.LocalId; 916 linkPart.ParentID = m_rootPart.LocalId;
917
913 linkPart.LinkNum = m_parts.Count; 918 linkPart.LinkNum = m_parts.Count;
914 919
915 m_parts.Add(linkPart.UUID, linkPart); 920 m_parts.Add(linkPart.UUID, linkPart);
@@ -1015,7 +1020,7 @@ namespace OpenSim.Region.Environment.Scenes
1015 //m_rootPart.DoPhysicsPropertyUpdate(m_rootPart.PhysActor.IsPhysical, true); 1020 //m_rootPart.DoPhysicsPropertyUpdate(m_rootPart.PhysActor.IsPhysical, true);
1016 //} 1021 //}
1017 1022
1018 SceneObjectGroup objectGroup = new SceneObjectGroup(m_scene, m_regionHandle, linkPart); 1023 SceneObjectGroup objectGroup = new SceneObjectGroup(m_scene, m_regionHandle, linkPart);
1019 1024
1020 m_scene.AddEntity(objectGroup); 1025 m_scene.AddEntity(objectGroup);
1021 1026
@@ -1715,6 +1720,9 @@ namespace OpenSim.Region.Environment.Scenes
1715 m_scene.EventManager.TriggerGroupGrab(UUID, offsetPos, remoteClient.AgentId); 1720 m_scene.EventManager.TriggerGroupGrab(UUID, offsetPos, remoteClient.AgentId);
1716 } 1721 }
1717 1722
1723 /// <summary>
1724 /// Completely delete this group and tell all the scene presences about that deletion.
1725 /// </summary>
1718 public void DeleteGroup() 1726 public void DeleteGroup()
1719 { 1727 {
1720 DetachFromBackup(this); 1728 DetachFromBackup(this);