aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs35
1 files changed, 25 insertions, 10 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index af46659..94e64e4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -509,7 +509,7 @@ namespace OpenSim.Region.Framework.Scenes
509 509
510 if (m_rootPart.Shape.PCode != 9 || m_rootPart.Shape.State == 0) 510 if (m_rootPart.Shape.PCode != 9 || m_rootPart.Shape.State == 0)
511 m_rootPart.ParentID = 0; 511 m_rootPart.ParentID = 0;
512 if (m_rootPart.LocalId==0) 512 if (m_rootPart.LocalId == 0)
513 m_rootPart.LocalId = m_scene.AllocateLocalId(); 513 m_rootPart.LocalId = m_scene.AllocateLocalId();
514 514
515 // No need to lock here since the object isn't yet in a scene 515 // No need to lock here since the object isn't yet in a scene
@@ -1468,6 +1468,9 @@ namespace OpenSim.Region.Framework.Scenes
1468 /// <param name="part"></param> 1468 /// <param name="part"></param>
1469 internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) 1469 internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags)
1470 { 1470 {
1471// m_log.DebugFormat(
1472// "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId);
1473
1471 if (m_rootPart.UUID == part.UUID) 1474 if (m_rootPart.UUID == part.UUID)
1472 { 1475 {
1473 if (IsAttachment) 1476 if (IsAttachment)
@@ -2284,7 +2287,6 @@ namespace OpenSim.Region.Framework.Scenes
2284 2287
2285 AttachToBackup(); 2288 AttachToBackup();
2286 2289
2287
2288 // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the 2290 // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the
2289 // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and 2291 // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and
2290 // unmoved prims! 2292 // unmoved prims!
@@ -2299,9 +2301,10 @@ namespace OpenSim.Region.Framework.Scenes
2299 /// an independent SceneObjectGroup. 2301 /// an independent SceneObjectGroup.
2300 /// </summary> 2302 /// </summary>
2301 /// <param name="partID"></param> 2303 /// <param name="partID"></param>
2302 public void DelinkFromGroup(uint partID) 2304 /// <returns>The object group of the newly delinked prim. Null if part could not be found</returns>
2305 public SceneObjectGroup DelinkFromGroup(uint partID)
2303 { 2306 {
2304 DelinkFromGroup(partID, true); 2307 return DelinkFromGroup(partID, true);
2305 } 2308 }
2306 2309
2307 /// <summary> 2310 /// <summary>
@@ -2310,28 +2313,39 @@ namespace OpenSim.Region.Framework.Scenes
2310 /// </summary> 2313 /// </summary>
2311 /// <param name="partID"></param> 2314 /// <param name="partID"></param>
2312 /// <param name="sendEvents"></param> 2315 /// <param name="sendEvents"></param>
2313 public void DelinkFromGroup(uint partID, bool sendEvents) 2316 /// <returns>The object group of the newly delinked prim. Null if part could not be found</returns>
2317 public SceneObjectGroup DelinkFromGroup(uint partID, bool sendEvents)
2314 { 2318 {
2315 SceneObjectPart linkPart = GetChildPart(partID); 2319 SceneObjectPart linkPart = GetChildPart(partID);
2316 2320
2317 if (linkPart != null) 2321 if (linkPart != null)
2318 { 2322 {
2319 DelinkFromGroup(linkPart, sendEvents); 2323 return DelinkFromGroup(linkPart, sendEvents);
2320 } 2324 }
2321 else 2325 else
2322 { 2326 {
2323 m_log.InfoFormat("[SCENE OBJECT GROUP]: " + 2327 m_log.WarnFormat("[SCENE OBJECT GROUP]: " +
2324 "DelinkFromGroup(): Child prim {0} not found in object {1}, {2}", 2328 "DelinkFromGroup(): Child prim {0} not found in object {1}, {2}",
2325 partID, LocalId, UUID); 2329 partID, LocalId, UUID);
2330
2331 return null;
2326 } 2332 }
2327 } 2333 }
2328 2334
2329 public void DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents) 2335 /// <summary>
2336 /// Delink the given prim from this group. The delinked prim is established as
2337 /// an independent SceneObjectGroup.
2338 /// </summary>
2339 /// <param name="partID"></param>
2340 /// <param name="sendEvents"></param>
2341 /// <returns>The object group of the newly delinked prim.</returns>
2342 public SceneObjectGroup DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents)
2330 { 2343 {
2331 linkPart.ClearUndoState();
2332// m_log.DebugFormat( 2344// m_log.DebugFormat(
2333// "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}", 2345// "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}",
2334// linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID); 2346// linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID);
2347
2348 linkPart.ClearUndoState();
2335 2349
2336 Quaternion worldRot = linkPart.GetWorldRotation(); 2350 Quaternion worldRot = linkPart.GetWorldRotation();
2337 2351
@@ -2384,6 +2398,8 @@ namespace OpenSim.Region.Framework.Scenes
2384 2398
2385 //HasGroupChanged = true; 2399 //HasGroupChanged = true;
2386 //ScheduleGroupForFullUpdate(); 2400 //ScheduleGroupForFullUpdate();
2401
2402 return objectGroup;
2387 } 2403 }
2388 2404
2389 /// <summary> 2405 /// <summary>
@@ -2422,7 +2438,6 @@ namespace OpenSim.Region.Framework.Scenes
2422 2438
2423 part.LinkNum = linkNum; 2439 part.LinkNum = linkNum;
2424 2440
2425
2426 part.OffsetPosition = part.GroupPosition - AbsolutePosition; 2441 part.OffsetPosition = part.GroupPosition - AbsolutePosition;
2427 2442
2428 Quaternion rootRotation = m_rootPart.RotationOffset; 2443 Quaternion rootRotation = m_rootPart.RotationOffset;