aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-06-08 15:50:21 +0100
committerJustin Clark-Casey (justincc)2010-06-08 15:50:21 +0100
commita160b44e0766329a6c336adcb804cede39e00fc7 (patch)
treeedf6d5070a0bb9dcba424cf883fe20a7c96af751 /OpenSim/Region/Framework
parentIf a transfer request is received for a task inventory item asset, then route... (diff)
parentminor: remove some commented out code and return ScenePresence.UpdatePriority... (diff)
downloadopensim-SC-a160b44e0766329a6c336adcb804cede39e00fc7.zip
opensim-SC-a160b44e0766329a6c336adcb804cede39e00fc7.tar.gz
opensim-SC-a160b44e0766329a6c336adcb804cede39e00fc7.tar.bz2
opensim-SC-a160b44e0766329a6c336adcb804cede39e00fc7.tar.xz
Merge branch '0.6.9-post-fixes' into share-with-group
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs51
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs34
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs15
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs59
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneViewer.cs10
9 files changed, 152 insertions, 29 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 26d3372..79b3cfd 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2450,6 +2450,8 @@ namespace OpenSim.Region.Framework.Scenes
2450 return; 2450 return;
2451 } 2451 }
2452 2452
2453// m_log.DebugFormat("[SCENE INVENTORY]: {0} {1} IsAttachment={2}", att.Name, att.LocalId, att.IsAttachment);
2454// Console.WriteLine("HERE X");
2453 ScenePresence presence; 2455 ScenePresence presence;
2454 if (TryGetAvatar(remoteClient.AgentId, out presence)) 2456 if (TryGetAvatar(remoteClient.AgentId, out presence))
2455 { 2457 {
@@ -2457,9 +2459,12 @@ namespace OpenSim.Region.Framework.Scenes
2457 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 2459 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
2458 item = InventoryService.GetItem(item); 2460 item = InventoryService.GetItem(item);
2459 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); 2461 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
2462// Console.WriteLine("HERE Y");
2460 2463
2461 if (m_AvatarFactory != null) 2464 if (m_AvatarFactory != null)
2462 m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); 2465 m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
2466
2467// Console.WriteLine("HERE Z");
2463 } 2468 }
2464 } 2469 }
2465 2470
@@ -2642,4 +2647,4 @@ namespace OpenSim.Region.Framework.Scenes
2642 m_sceneGraph.LinkObjects(root, children); 2647 m_sceneGraph.LinkObjects(root, children);
2643 } 2648 }
2644 } 2649 }
2645} 2650} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index ac04dc7..adc9496 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -124,6 +124,7 @@ namespace OpenSim.Region.Framework.Scenes
124 { 124 {
125 if (((SceneObjectGroup)ent).LocalId == primLocalID) 125 if (((SceneObjectGroup)ent).LocalId == primLocalID)
126 { 126 {
127// m_log.DebugFormat("[SCENE]: Received full update request for {0} from {1}", primLocalID, remoteClient.Name);
127 ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient); 128 ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient);
128 return; 129 return;
129 } 130 }
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 637ebff..7089368 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1850,9 +1850,31 @@ namespace OpenSim.Region.Framework.Scenes
1850 /// true if the object was added, false if an object with the same uuid was already in the scene 1850 /// true if the object was added, false if an object with the same uuid was already in the scene
1851 /// </returns> 1851 /// </returns>
1852 public bool AddRestoredSceneObject( 1852 public bool AddRestoredSceneObject(
1853 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates)
1854 {
1855 return m_sceneGraph.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, sendClientUpdates);
1856 }
1857
1858 /// <summary>
1859 /// Add an object into the scene that has come from storage
1860 /// </summary>
1861 ///
1862 /// <param name="sceneObject"></param>
1863 /// <param name="attachToBackup">
1864 /// If true, changes to the object will be reflected in its persisted data
1865 /// If false, the persisted data will not be changed even if the object in the scene is changed
1866 /// </param>
1867 /// <param name="alreadyPersisted">
1868 /// If true, we won't persist this object until it changes
1869 /// If false, we'll persist this object immediately
1870 /// </param>
1871 /// <returns>
1872 /// true if the object was added, false if an object with the same uuid was already in the scene
1873 /// </returns>
1874 public bool AddRestoredSceneObject(
1853 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) 1875 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
1854 { 1876 {
1855 return m_sceneGraph.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted); 1877 return AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, true);
1856 } 1878 }
1857 1879
1858 /// <summary> 1880 /// <summary>
@@ -1886,7 +1908,7 @@ namespace OpenSim.Region.Framework.Scenes
1886 } 1908 }
1887 1909
1888 /// <summary> 1910 /// <summary>
1889 /// Delete every object from the scene 1911 /// Delete every object from the scene. This does not include attachments worn by avatars.
1890 /// </summary> 1912 /// </summary>
1891 public void DeleteAllSceneObjects() 1913 public void DeleteAllSceneObjects()
1892 { 1914 {
@@ -1897,7 +1919,11 @@ namespace OpenSim.Region.Framework.Scenes
1897 foreach (EntityBase e in entities) 1919 foreach (EntityBase e in entities)
1898 { 1920 {
1899 if (e is SceneObjectGroup) 1921 if (e is SceneObjectGroup)
1900 DeleteSceneObject((SceneObjectGroup)e, false); 1922 {
1923 SceneObjectGroup sog = (SceneObjectGroup)e;
1924 if (!sog.IsAttachment)
1925 DeleteSceneObject((SceneObjectGroup)e, false);
1926 }
1901 } 1927 }
1902 } 1928 }
1903 } 1929 }
@@ -2461,7 +2487,7 @@ namespace OpenSim.Region.Framework.Scenes
2461 /// <returns></returns> 2487 /// <returns></returns>
2462 public bool IncomingCreateObject(ISceneObject sog) 2488 public bool IncomingCreateObject(ISceneObject sog)
2463 { 2489 {
2464 //m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted); 2490// m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted);
2465 SceneObjectGroup newObject; 2491 SceneObjectGroup newObject;
2466 try 2492 try
2467 { 2493 {
@@ -2533,10 +2559,12 @@ namespace OpenSim.Region.Framework.Scenes
2533 2559
2534 if (sceneObject.IsAttachmentCheckFull()) // Attachment 2560 if (sceneObject.IsAttachmentCheckFull()) // Attachment
2535 { 2561 {
2562// m_log.DebugFormat("[SCENE]: Adding attachment {0} {1}", sceneObject.Name, sceneObject.LocalId);
2563
2536 sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez); 2564 sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez);
2537 sceneObject.RootPart.AddFlag(PrimFlags.Phantom); 2565 sceneObject.RootPart.AddFlag(PrimFlags.Phantom);
2538 2566
2539 AddRestoredSceneObject(sceneObject, false, false); 2567 AddRestoredSceneObject(sceneObject, false, false, false);
2540 2568
2541 // Handle attachment special case 2569 // Handle attachment special case
2542 SceneObjectPart RootPrim = sceneObject.RootPart; 2570 SceneObjectPart RootPrim = sceneObject.RootPart;
@@ -2544,6 +2572,8 @@ namespace OpenSim.Region.Framework.Scenes
2544 // Fix up attachment Parent Local ID 2572 // Fix up attachment Parent Local ID
2545 ScenePresence sp = GetScenePresence(sceneObject.OwnerID); 2573 ScenePresence sp = GetScenePresence(sceneObject.OwnerID);
2546 2574
2575// Console.WriteLine("AAAA");
2576
2547 //uint parentLocalID = 0; 2577 //uint parentLocalID = 0;
2548 if (sp != null) 2578 if (sp != null)
2549 { 2579 {
@@ -2562,20 +2592,25 @@ namespace OpenSim.Region.Framework.Scenes
2562 //grp.SetFromAssetID(grp.RootPart.LastOwnerID); 2592 //grp.SetFromAssetID(grp.RootPart.LastOwnerID);
2563 m_log.DebugFormat( 2593 m_log.DebugFormat(
2564 "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition); 2594 "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition);
2565 2595
2596 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2566 AttachObject( 2597 AttachObject(
2567 sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); 2598 sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false);
2568 RootPrim.RemFlag(PrimFlags.TemporaryOnRez); 2599
2569 grp.SendGroupFullUpdate(); 2600 //grp.SendGroupFullUpdate();
2570 } 2601 }
2571 else 2602 else
2572 { 2603 {
2573 RootPrim.RemFlag(PrimFlags.TemporaryOnRez); 2604 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2574 RootPrim.AddFlag(PrimFlags.TemporaryOnRez); 2605 RootPrim.AddFlag(PrimFlags.TemporaryOnRez);
2575 } 2606 }
2607
2608// Console.WriteLine("BBBB");
2576 } 2609 }
2577 else 2610 else
2578 { 2611 {
2612// m_log.DebugFormat("[SCENE]: Adding ordinary object {0} {1}", sceneObject.Name, sceneObject.LocalId);
2613
2579 AddRestoredSceneObject(sceneObject, true, false); 2614 AddRestoredSceneObject(sceneObject, true, false);
2580 2615
2581 if (!Permissions.CanObjectEntry(sceneObject.UUID, 2616 if (!Permissions.CanObjectEntry(sceneObject.UUID,
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 2f6a0db..67fa13d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -1383,7 +1383,9 @@ namespace OpenSim.Region.Framework.Scenes
1383 // now we have a child agent in this region. Request all interesting data about other (root) agents 1383 // now we have a child agent in this region. Request all interesting data about other (root) agents
1384 agent.SendInitialFullUpdateToAllClients(); 1384 agent.SendInitialFullUpdateToAllClients();
1385 1385
1386// Console.WriteLine("SCS 1");
1386 agent.CrossAttachmentsIntoNewRegion(neighbourHandle, true); 1387 agent.CrossAttachmentsIntoNewRegion(neighbourHandle, true);
1388// Console.WriteLine("SCS 2");
1387 1389
1388 // m_scene.SendKillObject(m_localId); 1390 // m_scene.SendKillObject(m_localId);
1389 1391
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 59a2f41..bdab696 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -216,11 +216,15 @@ namespace OpenSim.Region.Framework.Scenes
216 /// If true, we won't persist this object until it changes 216 /// If true, we won't persist this object until it changes
217 /// If false, we'll persist this object immediately 217 /// If false, we'll persist this object immediately
218 /// </param> 218 /// </param>
219 /// <param name="sendClientUpdate">
220 /// If true, we send updates to the client to tell it about this object
221 /// If false, we leave it up to the caller to do this
222 /// </param>
219 /// <returns> 223 /// <returns>
220 /// true if the object was added, false if an object with the same uuid was already in the scene 224 /// true if the object was added, false if an object with the same uuid was already in the scene
221 /// </returns> 225 /// </returns>
222 protected internal bool AddRestoredSceneObject( 226 protected internal bool AddRestoredSceneObject(
223 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) 227 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates)
224 { 228 {
225 if (!alreadyPersisted) 229 if (!alreadyPersisted)
226 { 230 {
@@ -228,8 +232,29 @@ namespace OpenSim.Region.Framework.Scenes
228 sceneObject.HasGroupChanged = true; 232 sceneObject.HasGroupChanged = true;
229 } 233 }
230 234
231 return AddSceneObject(sceneObject, attachToBackup, true); 235 return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
232 } 236 }
237
238// /// <summary>
239// /// Add an object into the scene that has come from storage
240// /// </summary>
241// /// <param name="sceneObject"></param>
242// /// <param name="attachToBackup">
243// /// If true, changes to the object will be reflected in its persisted data
244// /// If false, the persisted data will not be changed even if the object in the scene is changed
245// /// </param>
246// /// <param name="alreadyPersisted">
247// /// If true, we won't persist this object until it changes
248// /// If false, we'll persist this object immediately
249// /// </param>
250// /// <returns>
251// /// true if the object was added, false if an object with the same uuid was already in the scene
252// /// </returns>
253// protected internal bool AddRestoredSceneObject(
254// SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
255// {
256// AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, true);
257// }
233 258
234 /// <summary> 259 /// <summary>
235 /// Add a newly created object to the scene. This will both update the scene, and send information about the 260 /// Add a newly created object to the scene. This will both update the scene, and send information about the
@@ -611,11 +636,13 @@ namespace OpenSim.Region.Framework.Scenes
611 protected internal bool AttachObject( 636 protected internal bool AttachObject(
612 IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) 637 IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent)
613 { 638 {
639// Console.WriteLine("HERE A");
614 SceneObjectGroup group = GetGroupByPrim(objectLocalID); 640 SceneObjectGroup group = GetGroupByPrim(objectLocalID);
615 if (group != null) 641 if (group != null)
616 { 642 {
617 if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) 643 if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId))
618 { 644 {
645// Console.WriteLine("HERE -1");
619 // If the attachment point isn't the same as the one previously used 646 // If the attachment point isn't the same as the one previously used
620 // set it's offset position = 0 so that it appears on the attachment point 647 // set it's offset position = 0 so that it appears on the attachment point
621 // and not in a weird location somewhere unknown. 648 // and not in a weird location somewhere unknown.
@@ -654,9 +681,12 @@ namespace OpenSim.Region.Framework.Scenes
654 itemId = group.GetFromItemID(); 681 itemId = group.GetFromItemID();
655 } 682 }
656 683
684// Console.WriteLine("HERE 0");
657 m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group); 685 m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group);
658 686
687// Console.WriteLine("HERE 1");
659 group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent); 688 group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent);
689// Console.WriteLine("HERE 2");
660 // In case it is later dropped again, don't let 690 // In case it is later dropped again, don't let
661 // it get cleaned up 691 // it get cleaned up
662 // 692 //
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 602b811..451c6f9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1494,6 +1494,10 @@ namespace OpenSim.Region.Framework.Scenes
1494 1494
1495 public void SendFullUpdateToClient(IClientAPI remoteClient) 1495 public void SendFullUpdateToClient(IClientAPI remoteClient)
1496 { 1496 {
1497// if (IsAttachment)
1498// m_log.DebugFormat(
1499// "[SOG]: Sending full update to client {0} for {1} {2}", remoteClient.Name, Name, LocalId);
1500
1497 SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); 1501 SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID));
1498 1502
1499 lock (m_parts) 1503 lock (m_parts)
@@ -1513,8 +1517,9 @@ namespace OpenSim.Region.Framework.Scenes
1513 /// <param name="part"></param> 1517 /// <param name="part"></param>
1514 internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) 1518 internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags)
1515 { 1519 {
1516// m_log.DebugFormat( 1520// if (IsAttachment)
1517// "[SOG]: Sending part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); 1521// m_log.DebugFormat(
1522// "[SOG]: Sending part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId);
1518 1523
1519 if (m_rootPart.UUID == part.UUID) 1524 if (m_rootPart.UUID == part.UUID)
1520 { 1525 {
@@ -1994,7 +1999,8 @@ namespace OpenSim.Region.Framework.Scenes
1994 1999
1995 public void ScheduleFullUpdateToAvatar(ScenePresence presence) 2000 public void ScheduleFullUpdateToAvatar(ScenePresence presence)
1996 { 2001 {
1997// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name); 2002// if (IsAttachment)
2003// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name);
1998 2004
1999 RootPart.AddFullUpdateToAvatar(presence); 2005 RootPart.AddFullUpdateToAvatar(presence);
2000 2006
@@ -2026,7 +2032,8 @@ namespace OpenSim.Region.Framework.Scenes
2026 /// </summary> 2032 /// </summary>
2027 public void ScheduleGroupForFullUpdate() 2033 public void ScheduleGroupForFullUpdate()
2028 { 2034 {
2029// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID); 2035// if (IsAttachment)
2036// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID);
2030 2037
2031 checkAtTargets(); 2038 checkAtTargets();
2032 RootPart.ScheduleFullUpdate(); 2039 RootPart.ScheduleFullUpdate();
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index a85a4b3..19ff288 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1259,16 +1259,17 @@ namespace OpenSim.Region.Framework.Scenes
1259 /// Tell all scene presences that they should send updates for this part to their clients 1259 /// Tell all scene presences that they should send updates for this part to their clients
1260 /// </summary> 1260 /// </summary>
1261 public void AddFullUpdateToAllAvatars() 1261 public void AddFullUpdateToAllAvatars()
1262 { 1262 {
1263 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 1263 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
1264 for (int i = 0; i < avatars.Length; i++) 1264 for (int i = 0; i < avatars.Length; i++)
1265 { 1265 AddFullUpdateToAvatar(avatars[i]);
1266 avatars[i].SceneViewer.QueuePartForUpdate(this);
1267 }
1268 } 1266 }
1269 1267
1270 public void AddFullUpdateToAvatar(ScenePresence presence) 1268 public void AddFullUpdateToAvatar(ScenePresence presence)
1271 { 1269 {
1270// if (IsAttachment)
1271// m_log.DebugFormat("AddFullUpdateToAllAvatar() {0} for {1} {2}", presence.Name, Name, LocalId);
1272
1272 presence.SceneViewer.QueuePartForUpdate(this); 1273 presence.SceneViewer.QueuePartForUpdate(this);
1273 } 1274 }
1274 1275
@@ -1287,13 +1288,14 @@ namespace OpenSim.Region.Framework.Scenes
1287 { 1288 {
1288 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 1289 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
1289 for (int i = 0; i < avatars.Length; i++) 1290 for (int i = 0; i < avatars.Length; i++)
1290 { 1291 AddTerseUpdateToAvatar(avatars[i]);
1291 avatars[i].SceneViewer.QueuePartForUpdate(this);
1292 }
1293 } 1292 }
1294 1293
1295 public void AddTerseUpdateToAvatar(ScenePresence presence) 1294 public void AddTerseUpdateToAvatar(ScenePresence presence)
1296 { 1295 {
1296// if (IsAttachment)
1297// m_log.DebugFormat("AddTerseUpdateToAvatar() {0} for {1} {2}", presence.Name, Name, LocalId);
1298
1297 presence.SceneViewer.QueuePartForUpdate(this); 1299 presence.SceneViewer.QueuePartForUpdate(this);
1298 } 1300 }
1299 1301
@@ -2727,7 +2729,8 @@ namespace OpenSim.Region.Framework.Scenes
2727 /// </summary> 2729 /// </summary>
2728 public void ScheduleFullUpdate() 2730 public void ScheduleFullUpdate()
2729 { 2731 {
2730// m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); 2732// if (IsAttachment)
2733// m_log.DebugFormat("[SOP]: Scheduling full update for {0} {1}", Name, LocalId);
2731 2734
2732 if (m_parentGroup != null) 2735 if (m_parentGroup != null)
2733 { 2736 {
@@ -2840,6 +2843,10 @@ namespace OpenSim.Region.Framework.Scenes
2840 /// <param name="remoteClient"></param> 2843 /// <param name="remoteClient"></param>
2841 public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) 2844 public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags)
2842 { 2845 {
2846// if (IsAttachment)
2847// m_log.DebugFormat(
2848// "[SCENE OBJECT PART]: Sending part full update to {0} for {1} {2}", remoteClient.Name, Name, LocalId);
2849
2843 m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); 2850 m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags);
2844 } 2851 }
2845 2852
@@ -2848,6 +2855,10 @@ namespace OpenSim.Region.Framework.Scenes
2848 /// </summary> 2855 /// </summary>
2849 public void SendFullUpdateToAllClients() 2856 public void SendFullUpdateToAllClients()
2850 { 2857 {
2858// if (IsAttachment)
2859// m_log.DebugFormat(
2860// "[SCENE OBJECT PART]: Sending full update for {0} {1} for all clients", Name, LocalId);
2861
2851 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 2862 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
2852 for (int i = 0; i < avatars.Length; i++) 2863 for (int i = 0; i < avatars.Length; i++)
2853 { 2864 {
@@ -2859,6 +2870,10 @@ namespace OpenSim.Region.Framework.Scenes
2859 2870
2860 public void SendFullUpdateToAllClientsExcept(UUID agentID) 2871 public void SendFullUpdateToAllClientsExcept(UUID agentID)
2861 { 2872 {
2873// if (IsAttachment)
2874// m_log.DebugFormat(
2875// "[SCENE OBJECT PART]: Sending full update for {0} {1} to all clients except {2}", Name, LocalId, agentID);
2876
2862 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 2877 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
2863 for (int i = 0; i < avatars.Length; i++) 2878 for (int i = 0; i < avatars.Length; i++)
2864 { 2879 {
@@ -2914,10 +2929,27 @@ namespace OpenSim.Region.Framework.Scenes
2914 //isattachment = ParentGroup.RootPart.IsAttachment; 2929 //isattachment = ParentGroup.RootPart.IsAttachment;
2915 2930
2916 byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A}; 2931 byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A};
2917 remoteClient.SendPrimitiveToClient(new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape, 2932
2918 lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID, 2933 double priority = ParentGroup.GetUpdatePriority(remoteClient);
2919 m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment, 2934 if (IsRoot && IsAttachment)
2920 AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, ParentGroup.GetUpdatePriority(remoteClient))); 2935 {
2936 if (double.MinValue == priority)
2937 {
2938 m_log.WarnFormat(
2939 "[SOP]: Couldn't raise update priority of root part for attachment {0} {1} because priority is already highest value",
2940 Name, LocalId);
2941 }
2942 else
2943 {
2944 priority = double.MinValue;
2945 }
2946 }
2947
2948 remoteClient.SendPrimitiveToClient(
2949 new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape,
2950 lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID,
2951 m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment,
2952 AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, priority));
2921 } 2953 }
2922 2954
2923 /// <summary> 2955 /// <summary>
@@ -2965,6 +2997,9 @@ namespace OpenSim.Region.Framework.Scenes
2965 { 2997 {
2966 if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes 2998 if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes
2967 { 2999 {
3000// if (IsAttachment)
3001// m_log.DebugFormat("[SOP]: Sending scheduled full update for {0} {1}", Name, LocalId);
3002
2968 AddFullUpdateToAllAvatars(); 3003 AddFullUpdateToAllAvatars();
2969 ClearUpdateSchedule(); 3004 ClearUpdateSchedule();
2970 } 3005 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4973663..51cdf1b 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3873,6 +3873,8 @@ namespace OpenSim.Region.Framework.Scenes
3873 3873
3874 private double UpdatePriority(UpdatePriorityData data) 3874 private double UpdatePriority(UpdatePriorityData data)
3875 { 3875 {
3876// m_log.DebugFormat("[SCENE PRESENCE]: Reprioritizing updates to client {0} for {1}", Name, data.localID);
3877
3876 EntityBase entity; 3878 EntityBase entity;
3877 SceneObjectGroup group; 3879 SceneObjectGroup group;
3878 3880
diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
index e4296ef..23663dd 100644
--- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Reflection;
30using OpenMetaverse; 31using OpenMetaverse;
31using log4net; 32using log4net;
32using OpenSim.Framework; 33using OpenSim.Framework;
@@ -39,6 +40,8 @@ namespace OpenSim.Region.Framework.Scenes
39{ 40{
40 public class SceneViewer : ISceneViewer 41 public class SceneViewer : ISceneViewer
41 { 42 {
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44
42 protected ScenePresence m_presence; 45 protected ScenePresence m_presence;
43 protected UpdateQueue m_partsUpdateQueue = new UpdateQueue(); 46 protected UpdateQueue m_partsUpdateQueue = new UpdateQueue();
44 protected Queue<SceneObjectGroup> m_pendingObjects; 47 protected Queue<SceneObjectGroup> m_pendingObjects;
@@ -60,6 +63,9 @@ namespace OpenSim.Region.Framework.Scenes
60 /// <param name="part"></param> 63 /// <param name="part"></param>
61 public void QueuePartForUpdate(SceneObjectPart part) 64 public void QueuePartForUpdate(SceneObjectPart part)
62 { 65 {
66// if (part.IsAttachment)
67// m_log.DebugFormat("[SCENE VIEWER]: Queueing part {0} {1} for update", part.Name, part.LocalId);
68
63 lock (m_partsUpdateQueue) 69 lock (m_partsUpdateQueue)
64 { 70 {
65 m_partsUpdateQueue.Enqueue(part); 71 m_partsUpdateQueue.Enqueue(part);
@@ -134,7 +140,7 @@ namespace OpenSim.Region.Framework.Scenes
134 } 140 }
135 else if (update.LastTerseUpdateTime <= part.TimeStampTerse) 141 else if (update.LastTerseUpdateTime <= part.TimeStampTerse)
136 { 142 {
137// m_log.DebugFormat( 143// m_log.DebugFormat(AddFullUpdateToAvatar
138// "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", 144// "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}",
139// part.Name, part.UUID, part.TimeStampTerse); 145// part.Name, part.UUID, part.TimeStampTerse);
140 146