diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneGraph.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1d952c4..b86a564 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -402,23 +402,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
402 | part.Shape.Scale = scale; | 402 | part.Shape.Scale = scale; |
403 | } | 403 | } |
404 | } | 404 | } |
405 | 405 | ||
406 | sceneObject.AttachToScene(m_parentScene); | ||
407 | |||
408 | if (sendClientUpdates) | ||
409 | sceneObject.ScheduleGroupForFullUpdate(); | ||
410 | |||
411 | Entities.Add(sceneObject); | ||
412 | m_numPrim += sceneObject.Children.Count; | 406 | m_numPrim += sceneObject.Children.Count; |
413 | |||
414 | if (attachToBackup) | ||
415 | sceneObject.AttachToBackup(); | ||
416 | } | 407 | } |
408 | |||
409 | sceneObject.AttachToScene(m_parentScene); | ||
410 | |||
411 | if (sendClientUpdates) | ||
412 | sceneObject.ScheduleGroupForFullUpdate(); | ||
413 | |||
414 | Entities.Add(sceneObject); | ||
415 | |||
416 | if (attachToBackup) | ||
417 | sceneObject.AttachToBackup(); | ||
417 | 418 | ||
418 | if (OnObjectCreate != null) | 419 | if (OnObjectCreate != null) |
419 | { | ||
420 | OnObjectCreate(sceneObject); | 420 | OnObjectCreate(sceneObject); |
421 | } | ||
422 | 421 | ||
423 | lock (SceneObjectGroupsByFullID) | 422 | lock (SceneObjectGroupsByFullID) |
424 | { | 423 | { |
@@ -426,6 +425,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
426 | foreach (SceneObjectPart part in sceneObject.Children.Values) | 425 | foreach (SceneObjectPart part in sceneObject.Children.Values) |
427 | SceneObjectGroupsByFullID[part.UUID] = sceneObject; | 426 | SceneObjectGroupsByFullID[part.UUID] = sceneObject; |
428 | } | 427 | } |
428 | |||
429 | lock (SceneObjectGroupsByLocalID) | 429 | lock (SceneObjectGroupsByLocalID) |
430 | { | 430 | { |
431 | SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject; | 431 | SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject; |
@@ -1348,37 +1348,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
1348 | /// <param name="localID"></param> | 1348 | /// <param name="localID"></param> |
1349 | /// <param name="pos"></param> | 1349 | /// <param name="pos"></param> |
1350 | /// <param name="remoteClient"></param> | 1350 | /// <param name="remoteClient"></param> |
1351 | protected internal void UpdatePrimPosition(uint localID, Vector3 pos, IClientAPI remoteClient) | 1351 | public void UpdatePrimPosition(uint localID, Vector3 pos, IClientAPI remoteClient) |
1352 | { | 1352 | { |
1353 | SceneObjectGroup group = GetGroupByPrim(localID); | 1353 | SceneObjectGroup group = GetGroupByPrim(localID); |
1354 | |||
1354 | if (group != null) | 1355 | if (group != null) |
1355 | { | 1356 | { |
1356 | |||
1357 | // Vector3 oldPos = group.AbsolutePosition; | ||
1358 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) | 1357 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) |
1359 | { | 1358 | { |
1360 | 1359 | if (m_parentScene.AttachmentsModule != null) | |
1361 | // If this is an attachment, then we need to save the modified | 1360 | m_parentScene.AttachmentsModule.UpdateAttachmentPosition(remoteClient, group, pos); |
1362 | // object back into the avatar's inventory. First we save the | ||
1363 | // attachment point information, then we update the relative | ||
1364 | // positioning (which caused this method to get driven in the | ||
1365 | // first place. Then we have to mark the object as NOT an | ||
1366 | // attachment. This is necessary in order to correctly save | ||
1367 | // and retrieve GroupPosition information for the attachment. | ||
1368 | // Then we save the asset back into the appropriate inventory | ||
1369 | // entry. Finally, we restore the object's attachment status. | ||
1370 | |||
1371 | byte attachmentPoint = group.GetAttachmentPoint(); | ||
1372 | group.UpdateGroupPosition(pos); | ||
1373 | group.RootPart.IsAttachment = false; | ||
1374 | group.AbsolutePosition = group.RootPart.AttachedPos; | ||
1375 | m_parentScene.UpdateKnownItem(remoteClient, group, group.GetFromItemID(), group.OwnerID); | ||
1376 | group.SetAttachmentPoint(attachmentPoint); | ||
1377 | |||
1378 | } | 1361 | } |
1379 | else | 1362 | else |
1380 | { | 1363 | { |
1381 | if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId) && m_parentScene.Permissions.CanObjectEntry(group.UUID, false, pos)) | 1364 | if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId) |
1365 | && m_parentScene.Permissions.CanObjectEntry(group.UUID, false, pos)) | ||
1382 | { | 1366 | { |
1383 | group.UpdateGroupPosition(pos); | 1367 | group.UpdateGroupPosition(pos); |
1384 | } | 1368 | } |
@@ -1387,14 +1371,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1387 | } | 1371 | } |
1388 | 1372 | ||
1389 | /// <summary> | 1373 | /// <summary> |
1390 | /// | 1374 | /// Update the texture entry of the given prim. |
1391 | /// </summary> | 1375 | /// </summary> |
1376 | /// | ||
1377 | /// A texture entry is an object that contains details of all the textures of the prim's face. In this case, | ||
1378 | /// the texture is given in its byte serialized form. | ||
1379 | /// | ||
1392 | /// <param name="localID"></param> | 1380 | /// <param name="localID"></param> |
1393 | /// <param name="texture"></param> | 1381 | /// <param name="texture"></param> |
1394 | /// <param name="remoteClient"></param> | 1382 | /// <param name="remoteClient"></param> |
1395 | protected internal void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) | 1383 | protected internal void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) |
1396 | { | 1384 | { |
1397 | SceneObjectGroup group = GetGroupByPrim(localID); | 1385 | SceneObjectGroup group = GetGroupByPrim(localID); |
1386 | |||
1398 | if (group != null) | 1387 | if (group != null) |
1399 | { | 1388 | { |
1400 | if (m_parentScene.Permissions.CanEditObject(group.UUID,remoteClient.AgentId)) | 1389 | if (m_parentScene.Permissions.CanEditObject(group.UUID,remoteClient.AgentId)) |
@@ -1784,8 +1773,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1784 | SceneObjectPart newRoot = newSet[0]; | 1773 | SceneObjectPart newRoot = newSet[0]; |
1785 | newSet.RemoveAt(0); | 1774 | newSet.RemoveAt(0); |
1786 | 1775 | ||
1787 | List<uint> linkIDs = new List<uint>(); | ||
1788 | |||
1789 | foreach (SceneObjectPart newChild in newSet) | 1776 | foreach (SceneObjectPart newChild in newSet) |
1790 | newChild.UpdateFlag = 0; | 1777 | newChild.UpdateFlag = 0; |
1791 | 1778 | ||