aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/InnerScene.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/InnerScene.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/InnerScene.cs50
1 files changed, 50 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs
index 90478c6..c8e9b73 100644
--- a/OpenSim/Region/Environment/Scenes/InnerScene.cs
+++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs
@@ -536,6 +536,56 @@ namespace OpenSim.Region.Environment.Scenes
536 parenPrim.LinkToGroup(sceneObj); 536 parenPrim.LinkToGroup(sceneObj);
537 } 537 }
538 } 538 }
539
540 /// <summary>
541 /// Delink a linkset
542 /// </summary>
543 /// <param name="prims"></param>
544 public void DelinkObjects(List<uint> primIds)
545 {
546 //OpenSim.Framework.Console.MainLog.Instance.Verbose("DelinkObjects()");
547
548 SceneObjectGroup parenPrim = null;
549
550 // Need a list of the SceneObjectGroup local ids
551 // XXX I'm anticipating that building this dictionary once is more efficient than
552 // repeated scanning of the Entity.Values for a large number of primIds. However, it might
553 // be more efficient yet to keep this dictionary permanently on hand.
554 Dictionary<uint, SceneObjectGroup> sceneObjects = new Dictionary<uint, SceneObjectGroup>();
555 foreach (EntityBase ent in Entities.Values)
556 {
557 if (ent is SceneObjectGroup)
558 {
559 SceneObjectGroup obj = (SceneObjectGroup)ent;
560 sceneObjects.Add(obj.LocalId, obj);
561 }
562 }
563
564 // Find the root prim among the prim ids we've been given
565 for (int i = 0; i < primIds.Count; i++)
566 {
567 if (sceneObjects.ContainsKey(primIds[i]))
568 {
569 parenPrim = sceneObjects[primIds[i]];
570 primIds.RemoveAt(i);
571 break;
572 }
573 }
574
575 if (parenPrim != null)
576 {
577 foreach (uint childPrimId in primIds)
578 {
579 parenPrim.DelinkFromGroup(childPrimId);
580 }
581 }
582 else
583 {
584 OpenSim.Framework.Console.MainLog.Instance.Verbose(
585 "DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!",
586 primIds);
587 }
588 }
539 589
540 /// <summary> 590 /// <summary>
541 /// 591 ///