diff options
Diffstat (limited to 'OpenSim/Region/Framework')
9 files changed, 48 insertions, 112 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 2af2548..05c1e00 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | |||
@@ -131,5 +131,13 @@ namespace OpenSim.Region.Framework.Interfaces | |||
131 | /// A <see cref="IClientAPI"/> | 131 | /// A <see cref="IClientAPI"/> |
132 | /// </param> | 132 | /// </param> |
133 | void ShowDetachInUserInventory(UUID itemID, IClientAPI remoteClient); | 133 | void ShowDetachInUserInventory(UUID itemID, IClientAPI remoteClient); |
134 | |||
135 | /// <summary> | ||
136 | /// Update the position of an attachment | ||
137 | /// </summary> | ||
138 | /// <param name="client"></param> | ||
139 | /// <param name="sog"></param> | ||
140 | /// <param name="pos"></param> | ||
141 | void UpdateAttachmentPosition(IClientAPI client, SceneObjectGroup sog, Vector3 pos); | ||
134 | } | 142 | } |
135 | } \ No newline at end of file | 143 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs index de3c360..272f718 100644 --- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs +++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs | |||
@@ -31,7 +31,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
31 | 31 | ||
32 | public class Prioritizer | 32 | public class Prioritizer |
33 | { | 33 | { |
34 | private static readonly ILog m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 34 | // private static readonly ILog m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
35 | 35 | ||
36 | /// <summary> | 36 | /// <summary> |
37 | /// This is added to the priority of all child prims, to make sure that the root prim update is sent to the | 37 | /// This is added to the priority of all child prims, to make sure that the root prim update is sent to the |
@@ -75,7 +75,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
75 | break; | 75 | break; |
76 | default: | 76 | default: |
77 | throw new InvalidOperationException("UpdatePrioritizationScheme not defined."); | 77 | throw new InvalidOperationException("UpdatePrioritizationScheme not defined."); |
78 | break; | ||
79 | } | 78 | } |
80 | 79 | ||
81 | // Adjust priority so that root prims are sent to the viewer first. This is especially important for | 80 | // Adjust priority so that root prims are sent to the viewer first. This is especially important for |
@@ -122,9 +121,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
122 | // Use group position for child prims | 121 | // Use group position for child prims |
123 | Vector3 entityPos; | 122 | Vector3 entityPos; |
124 | if (entity is SceneObjectPart) | 123 | if (entity is SceneObjectPart) |
125 | entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; | 124 | { |
125 | // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene | ||
126 | // before its scheduled update was triggered | ||
127 | //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; | ||
128 | entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; | ||
129 | } | ||
126 | else | 130 | else |
131 | { | ||
127 | entityPos = entity.AbsolutePosition; | 132 | entityPos = entity.AbsolutePosition; |
133 | } | ||
128 | 134 | ||
129 | return Vector3.DistanceSquared(presencePos, entityPos); | 135 | return Vector3.DistanceSquared(presencePos, entityPos); |
130 | } | 136 | } |
@@ -144,9 +150,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
144 | // Use group position for child prims | 150 | // Use group position for child prims |
145 | Vector3 entityPos = entity.AbsolutePosition; | 151 | Vector3 entityPos = entity.AbsolutePosition; |
146 | if (entity is SceneObjectPart) | 152 | if (entity is SceneObjectPart) |
147 | entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; | 153 | { |
154 | // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene | ||
155 | // before its scheduled update was triggered | ||
156 | //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; | ||
157 | entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; | ||
158 | } | ||
148 | else | 159 | else |
160 | { | ||
149 | entityPos = entity.AbsolutePosition; | 161 | entityPos = entity.AbsolutePosition; |
162 | } | ||
150 | 163 | ||
151 | if (!presence.IsChildAgent) | 164 | if (!presence.IsChildAgent) |
152 | { | 165 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 379128a..8ed8b96 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1799,53 +1799,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1799 | } | 1799 | } |
1800 | } | 1800 | } |
1801 | 1801 | ||
1802 | public void UpdateKnownItem(IClientAPI remoteClient, SceneObjectGroup grp, UUID itemID, UUID agentID) | ||
1803 | { | ||
1804 | SceneObjectGroup objectGroup = grp; | ||
1805 | if (objectGroup != null) | ||
1806 | { | ||
1807 | if (!grp.HasGroupChanged) | ||
1808 | { | ||
1809 | m_log.InfoFormat("[ATTACHMENT]: Save request for {0} which is unchanged", grp.UUID); | ||
1810 | return; | ||
1811 | } | ||
1812 | |||
1813 | m_log.InfoFormat( | ||
1814 | "[ATTACHMENT]: Updating asset for attachment {0}, attachpoint {1}", | ||
1815 | grp.UUID, grp.GetAttachmentPoint()); | ||
1816 | |||
1817 | string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(objectGroup); | ||
1818 | |||
1819 | InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); | ||
1820 | item = InventoryService.GetItem(item); | ||
1821 | |||
1822 | if (item != null) | ||
1823 | { | ||
1824 | AssetBase asset = CreateAsset( | ||
1825 | objectGroup.GetPartName(objectGroup.LocalId), | ||
1826 | objectGroup.GetPartDescription(objectGroup.LocalId), | ||
1827 | (sbyte)AssetType.Object, | ||
1828 | Utils.StringToBytes(sceneObjectXml), | ||
1829 | remoteClient.AgentId); | ||
1830 | AssetService.Store(asset); | ||
1831 | |||
1832 | item.AssetID = asset.FullID; | ||
1833 | item.Description = asset.Description; | ||
1834 | item.Name = asset.Name; | ||
1835 | item.AssetType = asset.Type; | ||
1836 | item.InvType = (int)InventoryType.Object; | ||
1837 | |||
1838 | InventoryService.UpdateItem(item); | ||
1839 | |||
1840 | // this gets called when the agent loggs off! | ||
1841 | if (remoteClient != null) | ||
1842 | { | ||
1843 | remoteClient.SendInventoryItemCreateUpdate(item, 0); | ||
1844 | } | ||
1845 | } | ||
1846 | } | ||
1847 | } | ||
1848 | |||
1849 | public UUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, UUID AgentId, out UUID itemID) | 1802 | public UUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, UUID AgentId, out UUID itemID) |
1850 | { | 1803 | { |
1851 | itemID = UUID.Zero; | 1804 | itemID = UUID.Zero; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 1f4d022..5fe944d 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3608,18 +3608,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3608 | return true; | 3608 | return true; |
3609 | } | 3609 | } |
3610 | 3610 | ||
3611 | private ILandObject GetParcelAtPoint(float x, float y) | ||
3612 | { | ||
3613 | foreach (var parcel in AllParcels()) | ||
3614 | { | ||
3615 | if (parcel.ContainsPoint((int)x,(int)y)) | ||
3616 | { | ||
3617 | return parcel; | ||
3618 | } | ||
3619 | } | ||
3620 | return null; | ||
3621 | } | ||
3622 | |||
3623 | /// <summary> | 3611 | /// <summary> |
3624 | /// Update an AgentCircuitData object with new information | 3612 | /// Update an AgentCircuitData object with new information |
3625 | /// </summary> | 3613 | /// </summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index c675322..88e084e 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -70,7 +70,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
70 | /// <summary> | 70 | /// <summary> |
71 | /// A user will arrive shortly, set up appropriate credentials so it can connect | 71 | /// A user will arrive shortly, set up appropriate credentials so it can connect |
72 | /// </summary> | 72 | /// </summary> |
73 | public event ExpectUserDelegate OnExpectUser; | 73 | // public event ExpectUserDelegate OnExpectUser; |
74 | 74 | ||
75 | /// <summary> | 75 | /// <summary> |
76 | /// A Prim will arrive shortly | 76 | /// A Prim will arrive shortly |
@@ -80,7 +80,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
80 | /// <summary> | 80 | /// <summary> |
81 | /// A new prim has arrived | 81 | /// A new prim has arrived |
82 | /// </summary> | 82 | /// </summary> |
83 | public event PrimCrossing OnPrimCrossingIntoRegion; | 83 | // public event PrimCrossing OnPrimCrossingIntoRegion; |
84 | 84 | ||
85 | ///// <summary> | 85 | ///// <summary> |
86 | ///// A New Region is up and available | 86 | ///// A New Region is up and available |
@@ -90,7 +90,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
90 | /// <summary> | 90 | /// <summary> |
91 | /// We have a child agent for this avatar and we're getting a status update about it | 91 | /// We have a child agent for this avatar and we're getting a status update about it |
92 | /// </summary> | 92 | /// </summary> |
93 | public event ChildAgentUpdate OnChildAgentUpdate; | 93 | // public event ChildAgentUpdate OnChildAgentUpdate; |
94 | //public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar; | 94 | //public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar; |
95 | 95 | ||
96 | /// <summary> | 96 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1da4287..9db2691 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1289,37 +1289,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
1289 | /// <param name="localID"></param> | 1289 | /// <param name="localID"></param> |
1290 | /// <param name="pos"></param> | 1290 | /// <param name="pos"></param> |
1291 | /// <param name="remoteClient"></param> | 1291 | /// <param name="remoteClient"></param> |
1292 | protected internal void UpdatePrimPosition(uint localID, Vector3 pos, IClientAPI remoteClient) | 1292 | public void UpdatePrimPosition(uint localID, Vector3 pos, IClientAPI remoteClient) |
1293 | { | 1293 | { |
1294 | SceneObjectGroup group = GetGroupByPrim(localID); | 1294 | SceneObjectGroup group = GetGroupByPrim(localID); |
1295 | |||
1295 | if (group != null) | 1296 | if (group != null) |
1296 | { | 1297 | { |
1297 | |||
1298 | // Vector3 oldPos = group.AbsolutePosition; | ||
1299 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) | 1298 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) |
1300 | { | 1299 | { |
1301 | 1300 | if (m_parentScene.AttachmentsModule != null) | |
1302 | // If this is an attachment, then we need to save the modified | 1301 | m_parentScene.AttachmentsModule.UpdateAttachmentPosition(remoteClient, group, pos); |
1303 | // object back into the avatar's inventory. First we save the | ||
1304 | // attachment point information, then we update the relative | ||
1305 | // positioning (which caused this method to get driven in the | ||
1306 | // first place. Then we have to mark the object as NOT an | ||
1307 | // attachment. This is necessary in order to correctly save | ||
1308 | // and retrieve GroupPosition information for the attachment. | ||
1309 | // Then we save the asset back into the appropriate inventory | ||
1310 | // entry. Finally, we restore the object's attachment status. | ||
1311 | |||
1312 | byte attachmentPoint = group.GetAttachmentPoint(); | ||
1313 | group.UpdateGroupPosition(pos); | ||
1314 | group.RootPart.IsAttachment = false; | ||
1315 | group.AbsolutePosition = group.RootPart.AttachedPos; | ||
1316 | m_parentScene.UpdateKnownItem(remoteClient, group, group.GetFromItemID(), group.OwnerID); | ||
1317 | group.SetAttachmentPoint(attachmentPoint); | ||
1318 | |||
1319 | } | 1302 | } |
1320 | else | 1303 | else |
1321 | { | 1304 | { |
1322 | if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId) && m_parentScene.Permissions.CanObjectEntry(group.UUID, false, pos)) | 1305 | if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId) |
1306 | && m_parentScene.Permissions.CanObjectEntry(group.UUID, false, pos)) | ||
1323 | { | 1307 | { |
1324 | group.UpdateGroupPosition(pos); | 1308 | group.UpdateGroupPosition(pos); |
1325 | } | 1309 | } |
@@ -1328,14 +1312,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1328 | } | 1312 | } |
1329 | 1313 | ||
1330 | /// <summary> | 1314 | /// <summary> |
1331 | /// | 1315 | /// Update the texture entry of the given prim. |
1332 | /// </summary> | 1316 | /// </summary> |
1317 | /// | ||
1318 | /// A texture entry is an object that contains details of all the textures of the prim's face. In this case, | ||
1319 | /// the texture is given in its byte serialized form. | ||
1320 | /// | ||
1333 | /// <param name="localID"></param> | 1321 | /// <param name="localID"></param> |
1334 | /// <param name="texture"></param> | 1322 | /// <param name="texture"></param> |
1335 | /// <param name="remoteClient"></param> | 1323 | /// <param name="remoteClient"></param> |
1336 | protected internal void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) | 1324 | protected internal void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) |
1337 | { | 1325 | { |
1338 | SceneObjectGroup group = GetGroupByPrim(localID); | 1326 | SceneObjectGroup group = GetGroupByPrim(localID); |
1327 | |||
1339 | if (group != null) | 1328 | if (group != null) |
1340 | { | 1329 | { |
1341 | if (m_parentScene.Permissions.CanEditObject(group.UUID,remoteClient.AgentId)) | 1330 | if (m_parentScene.Permissions.CanEditObject(group.UUID,remoteClient.AgentId)) |
@@ -1700,8 +1689,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1700 | SceneObjectPart newRoot = newSet[0]; | 1689 | SceneObjectPart newRoot = newSet[0]; |
1701 | newSet.RemoveAt(0); | 1690 | newSet.RemoveAt(0); |
1702 | 1691 | ||
1703 | List<uint> linkIDs = new List<uint>(); | ||
1704 | |||
1705 | foreach (SceneObjectPart newChild in newSet) | 1692 | foreach (SceneObjectPart newChild in newSet) |
1706 | newChild.UpdateFlag = 0; | 1693 | newChild.UpdateFlag = 0; |
1707 | 1694 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 2ad4223..3ed74e1 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -4727,20 +4727,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4727 | if (ParentGroup == null || ParentGroup.IsDeleted) | 4727 | if (ParentGroup == null || ParentGroup.IsDeleted) |
4728 | return; | 4728 | return; |
4729 | 4729 | ||
4730 | Vector3 lPos = OffsetPosition; | 4730 | if (IsAttachment && ParentGroup.RootPart != this) |
4731 | 4731 | return; | |
4732 | if (IsAttachment) | ||
4733 | { | ||
4734 | if (ParentGroup.RootPart != this) | ||
4735 | return; | ||
4736 | |||
4737 | lPos = ParentGroup.RootPart.AttachedPos; | ||
4738 | } | ||
4739 | else | ||
4740 | { | ||
4741 | if (ParentGroup.RootPart == this) | ||
4742 | lPos = AbsolutePosition; | ||
4743 | } | ||
4744 | 4732 | ||
4745 | // Causes this thread to dig into the Client Thread Data. | 4733 | // Causes this thread to dig into the Client Thread Data. |
4746 | // Remember your locking here! | 4734 | // Remember your locking here! |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index e08fa77..d7767bd 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -576,8 +576,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
576 | } | 576 | } |
577 | 577 | ||
578 | public SceneObjectGroup GetRezReadySceneObject(TaskInventoryItem item) | 578 | public SceneObjectGroup GetRezReadySceneObject(TaskInventoryItem item) |
579 | { | 579 | { |
580 | UUID ownerID = item.OwnerID; | ||
581 | AssetBase rezAsset = m_part.ParentGroup.Scene.AssetService.Get(item.AssetID.ToString()); | 580 | AssetBase rezAsset = m_part.ParentGroup.Scene.AssetService.Get(item.AssetID.ToString()); |
582 | 581 | ||
583 | if (null == rezAsset) | 582 | if (null == rezAsset) |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 08c6e27..fbb3177 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2326,15 +2326,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
2326 | { | 2326 | { |
2327 | m_perfMonMS = Util.EnvironmentTickCount(); | 2327 | m_perfMonMS = Util.EnvironmentTickCount(); |
2328 | 2328 | ||
2329 | PhysicsActor actor = m_physicsActor; | ||
2330 | Vector3 velocity = (actor != null) ? actor.Velocity : Vector3.Zero; | ||
2331 | |||
2332 | Vector3 pos = m_pos; | 2329 | Vector3 pos = m_pos; |
2333 | pos.Z += m_appearance.HipOffset; | 2330 | pos.Z += m_appearance.HipOffset; |
2334 | 2331 | ||
2335 | //m_log.DebugFormat("[SCENEPRESENCE]: TerseUpdate: Pos={0} Rot={1} Vel={2}", m_pos, m_bodyRot, m_velocity); | 2332 | //m_log.DebugFormat("[SCENEPRESENCE]: TerseUpdate: Pos={0} Rot={1} Vel={2}", m_pos, m_bodyRot, m_velocity); |
2336 | 2333 | ||
2337 | remoteClient.SendPrimUpdate(this, PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity); | 2334 | remoteClient.SendPrimUpdate( |
2335 | this, | ||
2336 | PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity | ||
2337 | | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity); | ||
2338 | 2338 | ||
2339 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); | 2339 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); |
2340 | m_scene.StatsReporter.AddAgentUpdates(1); | 2340 | m_scene.StatsReporter.AddAgentUpdates(1); |