aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs61
1 files changed, 44 insertions, 17 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index eff622a..99f1900 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -149,6 +149,15 @@ namespace OpenSim.Region.Environment.Scenes
149 /// saying what prim(s) that user has selected. 149 /// saying what prim(s) that user has selected.
150 /// </summary> 150 /// </summary>
151 protected bool m_isSelected = false; 151 protected bool m_isSelected = false;
152
153 protected virtual bool InSceneBackup
154 {
155 get
156 {
157 return true;
158 }
159 }
160
152 public bool IsSelected 161 public bool IsSelected
153 { 162 {
154 get { return m_isSelected; } 163 get { return m_isSelected; }
@@ -218,10 +227,20 @@ namespace OpenSim.Region.Environment.Scenes
218 this.m_rootPart.ParentID = 0; 227 this.m_rootPart.ParentID = 0;
219 this.m_rootPart.RegionHandle = m_regionHandle; 228 this.m_rootPart.RegionHandle = m_regionHandle;
220 this.UpdateParentIDs(); 229 this.UpdateParentIDs();
221 m_scene.EventManager.OnBackup += this.ProcessBackup; 230
231 AttachToBackup();
232
222 this.ScheduleGroupForFullUpdate(); 233 this.ScheduleGroupForFullUpdate();
223 } 234 }
224 235
236 private void AttachToBackup()
237 {
238 if (InSceneBackup)
239 {
240 m_scene.EventManager.OnBackup += this.ProcessBackup;
241 }
242 }
243
225 /// <summary> 244 /// <summary>
226 /// 245 ///
227 /// </summary> 246 /// </summary>
@@ -243,7 +262,8 @@ namespace OpenSim.Region.Environment.Scenes
243 SceneObjectPart newPart = new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rootOffset); 262 SceneObjectPart newPart = new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rootOffset);
244 this.m_parts.Add(newPart.UUID, newPart); 263 this.m_parts.Add(newPart.UUID, newPart);
245 this.SetPartAsRoot(newPart); 264 this.SetPartAsRoot(newPart);
246 m_scene.EventManager.OnBackup += this.ProcessBackup; 265
266 AttachToBackup();
247 } 267 }
248 #endregion 268 #endregion
249 269
@@ -307,7 +327,8 @@ namespace OpenSim.Region.Environment.Scenes
307 } 327 }
308 dupe.UpdateParentIDs(); 328 dupe.UpdateParentIDs();
309 329
310 m_scene.EventManager.OnBackup += dupe.ProcessBackup; 330 dupe.AttachToBackup();
331
311 return dupe; 332 return dupe;
312 } 333 }
313 334
@@ -523,13 +544,19 @@ namespace OpenSim.Region.Environment.Scenes
523 } 544 }
524 } 545 }
525 546
526 m_scene.EventManager.OnBackup -= objectGroup.ProcessBackup; 547 DetachFromBackup(objectGroup);
548
527 m_scene.DeleteEntity(objectGroup.UUID); 549 m_scene.DeleteEntity(objectGroup.UUID);
528 550
529 objectGroup.DeleteParts(); 551 objectGroup.DeleteParts();
530 this.ScheduleGroupForFullUpdate(); 552 this.ScheduleGroupForFullUpdate();
531 } 553 }
532 554
555 private void DetachFromBackup(SceneObjectGroup objectGroup)
556 {
557 m_scene.EventManager.OnBackup -= objectGroup.ProcessBackup;
558 }
559
533 560
534 private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation) 561 private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation)
535 { 562 {
@@ -583,7 +610,7 @@ namespace OpenSim.Region.Environment.Scenes
583 proper.ObjectData[0].FolderID = LLUUID.Zero; 610 proper.ObjectData[0].FolderID = LLUUID.Zero;
584 proper.ObjectData[0].FromTaskID = LLUUID.Zero; 611 proper.ObjectData[0].FromTaskID = LLUUID.Zero;
585 proper.ObjectData[0].GroupID = LLUUID.Zero; 612 proper.ObjectData[0].GroupID = LLUUID.Zero;
586 proper.ObjectData[0].InventorySerial = (short) this.m_rootPart.InventorySerial; 613 proper.ObjectData[0].InventorySerial = (short)this.m_rootPart.InventorySerial;
587 proper.ObjectData[0].LastOwnerID = this.m_rootPart.LastOwnerID; 614 proper.ObjectData[0].LastOwnerID = this.m_rootPart.LastOwnerID;
588 proper.ObjectData[0].ObjectID = this.UUID; 615 proper.ObjectData[0].ObjectID = this.UUID;
589 proper.ObjectData[0].OwnerID = this.m_rootPart.OwnerID; 616 proper.ObjectData[0].OwnerID = this.m_rootPart.OwnerID;
@@ -672,7 +699,7 @@ namespace OpenSim.Region.Environment.Scenes
672 SceneObjectPart part = this.GetChildPart(localID); 699 SceneObjectPart part = this.GetChildPart(localID);
673 if (part != null) 700 if (part != null)
674 { 701 {
675 return part.GetInventoryFileName(remoteClient, localID); 702 return part.GetInventoryFileName(remoteClient, localID);
676 } 703 }
677 return false; 704 return false;
678 } 705 }
@@ -682,7 +709,7 @@ namespace OpenSim.Region.Environment.Scenes
682 SceneObjectPart part = this.GetChildPart(localID); 709 SceneObjectPart part = this.GetChildPart(localID);
683 if (part != null) 710 if (part != null)
684 { 711 {
685 part.RequestInventoryFile(xferManager); 712 part.RequestInventoryFile(xferManager);
686 } 713 }
687 return ""; 714 return "";
688 } 715 }
@@ -705,7 +732,7 @@ namespace OpenSim.Region.Environment.Scenes
705 return true; 732 return true;
706 } 733 }
707 return false; 734 return false;
708 735
709 } 736 }
710 737
711 public bool AddInventoryItem(IClientAPI remoteClient, uint localID, InventoryItemBase item, LLUUID copyItemID) 738 public bool AddInventoryItem(IClientAPI remoteClient, uint localID, InventoryItemBase item, LLUUID copyItemID)
@@ -730,19 +757,19 @@ namespace OpenSim.Region.Environment.Scenes
730 } 757 }
731 else 758 else
732 { 759 {
733 return AddInventoryItem(remoteClient, localID, item); 760 return AddInventoryItem(remoteClient, localID, item);
734 } 761 }
735 return false; 762 return false;
736 } 763 }
737 764
738 public int RemoveInventoryItem(IClientAPI remoteClient, uint localID, LLUUID itemID) 765 public int RemoveInventoryItem(IClientAPI remoteClient, uint localID, LLUUID itemID)
739 { 766 {
740 SceneObjectPart part = this.GetChildPart(localID); 767 SceneObjectPart part = this.GetChildPart(localID);
741 if (part != null) 768 if (part != null)
742 { 769 {
743 return part.RemoveInventoryItem(remoteClient, localID, itemID); 770 return part.RemoveInventoryItem(remoteClient, localID, itemID);
744 } 771 }
745 return -1; 772 return -1;
746 } 773 }
747 774
748 /// <summary> 775 /// <summary>
@@ -1077,7 +1104,7 @@ namespace OpenSim.Region.Environment.Scenes
1077 public void SetScene(Scene scene) 1104 public void SetScene(Scene scene)
1078 { 1105 {
1079 m_scene = scene; 1106 m_scene = scene;
1080 m_scene.EventManager.OnBackup += this.ProcessBackup; 1107 AttachToBackup();
1081 } 1108 }
1082 1109
1083 /// <summary> 1110 /// <summary>
@@ -1153,7 +1180,7 @@ namespace OpenSim.Region.Environment.Scenes
1153 1180
1154 public void DeleteGroup() 1181 public void DeleteGroup()
1155 { 1182 {
1156 m_scene.EventManager.OnBackup -= this.ProcessBackup; 1183 DetachFromBackup( this );
1157 foreach (SceneObjectPart part in this.m_parts.Values) 1184 foreach (SceneObjectPart part in this.m_parts.Values)
1158 { 1185 {
1159 List<ScenePresence> avatars = this.RequestSceneAvatars(); 1186 List<ScenePresence> avatars = this.RequestSceneAvatars();