diff options
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 95 |
1 files changed, 39 insertions, 56 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 2a4e5a2..8c5a9a6 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -488,8 +488,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
488 | private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>(); | 488 | private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>(); |
489 | public List<SceneObjectPart> PlaySoundSlavePrims | 489 | public List<SceneObjectPart> PlaySoundSlavePrims |
490 | { | 490 | { |
491 | get { return m_LoopSoundSlavePrims; } | 491 | get { return m_PlaySoundSlavePrims; } |
492 | set { m_LoopSoundSlavePrims = value; } | 492 | set { m_PlaySoundSlavePrims = value; } |
493 | } | 493 | } |
494 | 494 | ||
495 | private SceneObjectPart m_LoopSoundMasterPrim = null; | 495 | private SceneObjectPart m_LoopSoundMasterPrim = null; |
@@ -641,8 +641,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
641 | } | 641 | } |
642 | 642 | ||
643 | ApplyPhysics(m_scene.m_physicalPrim); | 643 | ApplyPhysics(m_scene.m_physicalPrim); |
644 | 644 | ||
645 | ScheduleGroupForFullUpdate(); | 645 | // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled |
646 | // for the same object with very different properties. The caller must schedule the update. | ||
647 | //ScheduleGroupForFullUpdate(); | ||
646 | } | 648 | } |
647 | 649 | ||
648 | public Vector3 GroupScale() | 650 | public Vector3 GroupScale() |
@@ -1044,10 +1046,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1044 | // don't attach attachments to child agents | 1046 | // don't attach attachments to child agents |
1045 | if (avatar.IsChildAgent) return; | 1047 | if (avatar.IsChildAgent) return; |
1046 | 1048 | ||
1049 | // m_log.DebugFormat("[SOG]: Adding attachment {0} to avatar {1}", Name, avatar.Name); | ||
1050 | |||
1047 | DetachFromBackup(); | 1051 | DetachFromBackup(); |
1048 | 1052 | ||
1049 | // Remove from database and parcel prim count | 1053 | // Remove from database and parcel prim count |
1050 | // | ||
1051 | m_scene.DeleteFromStorage(UUID); | 1054 | m_scene.DeleteFromStorage(UUID); |
1052 | m_scene.EventManager.TriggerParcelPrimCountTainted(); | 1055 | m_scene.EventManager.TriggerParcelPrimCountTainted(); |
1053 | 1056 | ||
@@ -1073,7 +1076,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1073 | SetAttachmentPoint(Convert.ToByte(attachmentpoint)); | 1076 | SetAttachmentPoint(Convert.ToByte(attachmentpoint)); |
1074 | 1077 | ||
1075 | avatar.AddAttachment(this); | 1078 | avatar.AddAttachment(this); |
1076 | m_log.Debug("[SOG]: Added attachment " + UUID + " to avatar " + avatar.UUID); | ||
1077 | 1079 | ||
1078 | if (!silent) | 1080 | if (!silent) |
1079 | { | 1081 | { |
@@ -1090,6 +1092,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1090 | ScheduleGroupForFullUpdate(); | 1092 | ScheduleGroupForFullUpdate(); |
1091 | } | 1093 | } |
1092 | } | 1094 | } |
1095 | else | ||
1096 | { | ||
1097 | m_log.WarnFormat( | ||
1098 | "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present", | ||
1099 | UUID, agentID, Scene.RegionInfo.RegionName); | ||
1100 | } | ||
1093 | } | 1101 | } |
1094 | 1102 | ||
1095 | public byte GetAttachmentPoint() | 1103 | public byte GetAttachmentPoint() |
@@ -1596,11 +1604,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1596 | 1604 | ||
1597 | #endregion | 1605 | #endregion |
1598 | 1606 | ||
1599 | #region Client Updating | ||
1600 | |||
1601 | public void SendFullUpdateToClient(IClientAPI remoteClient) | 1607 | public void SendFullUpdateToClient(IClientAPI remoteClient) |
1602 | { | 1608 | { |
1603 | SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); | 1609 | RootPart.SendFullUpdate( |
1610 | remoteClient, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); | ||
1604 | 1611 | ||
1605 | lockPartsForRead(true); | 1612 | lockPartsForRead(true); |
1606 | { | 1613 | { |
@@ -1608,42 +1615,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1608 | { | 1615 | { |
1609 | 1616 | ||
1610 | if (part != RootPart) | 1617 | if (part != RootPart) |
1611 | SendPartFullUpdate(remoteClient, part, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, part.UUID)); | 1618 | part.SendFullUpdate( |
1612 | 1619 | remoteClient, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, part.UUID)); | |
1613 | } | 1620 | } |
1614 | } | 1621 | } |
1615 | lockPartsForRead(false); | ||
1616 | } | 1622 | } |
1617 | 1623 | ||
1618 | /// <summary> | ||
1619 | /// Send a full update to the client for the given part | ||
1620 | /// </summary> | ||
1621 | /// <param name="remoteClient"></param> | ||
1622 | /// <param name="part"></param> | ||
1623 | internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) | ||
1624 | { | ||
1625 | // m_log.DebugFormat( | ||
1626 | // "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); | ||
1627 | |||
1628 | if (m_rootPart.UUID == part.UUID) | ||
1629 | { | ||
1630 | if (IsAttachment) | ||
1631 | { | ||
1632 | part.SendFullUpdateToClient(remoteClient, m_rootPart.AttachedPos, clientFlags); | ||
1633 | } | ||
1634 | else | ||
1635 | { | ||
1636 | part.SendFullUpdateToClient(remoteClient, AbsolutePosition, clientFlags); | ||
1637 | } | ||
1638 | } | ||
1639 | else | ||
1640 | { | ||
1641 | part.SendFullUpdateToClient(remoteClient, clientFlags); | ||
1642 | } | ||
1643 | } | ||
1644 | |||
1645 | #endregion | ||
1646 | |||
1647 | #region Copying | 1624 | #region Copying |
1648 | 1625 | ||
1649 | /// <summary> | 1626 | /// <summary> |
@@ -2108,6 +2085,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2108 | 2085 | ||
2109 | public void ScheduleFullUpdateToAvatar(ScenePresence presence) | 2086 | public void ScheduleFullUpdateToAvatar(ScenePresence presence) |
2110 | { | 2087 | { |
2088 | // m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name); | ||
2089 | |||
2111 | RootPart.AddFullUpdateToAvatar(presence); | 2090 | RootPart.AddFullUpdateToAvatar(presence); |
2112 | 2091 | ||
2113 | lockPartsForRead(true); | 2092 | lockPartsForRead(true); |
@@ -2126,14 +2105,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2126 | public void ScheduleTerseUpdateToAvatar(ScenePresence presence) | 2105 | public void ScheduleTerseUpdateToAvatar(ScenePresence presence) |
2127 | { | 2106 | { |
2128 | lockPartsForRead(true); | 2107 | lockPartsForRead(true); |
2108 | |||
2109 | foreach (SceneObjectPart part in m_parts.Values) | ||
2129 | { | 2110 | { |
2130 | foreach (SceneObjectPart part in m_parts.Values) | 2111 | part.AddTerseUpdateToAvatar(presence); |
2131 | { | ||
2132 | |||
2133 | part.AddTerseUpdateToAvatar(presence); | ||
2134 | |||
2135 | } | ||
2136 | } | 2112 | } |
2113 | |||
2137 | lockPartsForRead(false); | 2114 | lockPartsForRead(false); |
2138 | } | 2115 | } |
2139 | 2116 | ||
@@ -2142,6 +2119,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2142 | /// </summary> | 2119 | /// </summary> |
2143 | public void ScheduleGroupForFullUpdate() | 2120 | public void ScheduleGroupForFullUpdate() |
2144 | { | 2121 | { |
2122 | // m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID); | ||
2123 | |||
2145 | checkAtTargets(); | 2124 | checkAtTargets(); |
2146 | RootPart.ScheduleFullUpdate(); | 2125 | RootPart.ScheduleFullUpdate(); |
2147 | 2126 | ||
@@ -2164,14 +2143,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2164 | public void ScheduleGroupForTerseUpdate() | 2143 | public void ScheduleGroupForTerseUpdate() |
2165 | { | 2144 | { |
2166 | lockPartsForRead(true); | 2145 | lockPartsForRead(true); |
2146 | |||
2147 | foreach (SceneObjectPart part in m_parts.Values) | ||
2167 | { | 2148 | { |
2168 | foreach (SceneObjectPart part in m_parts.Values) | 2149 | part.ScheduleTerseUpdate(); |
2169 | { | ||
2170 | |||
2171 | part.ScheduleTerseUpdate(); | ||
2172 | |||
2173 | } | ||
2174 | } | 2150 | } |
2151 | |||
2175 | lockPartsForRead(false); | 2152 | lockPartsForRead(false); |
2176 | } | 2153 | } |
2177 | 2154 | ||
@@ -2179,9 +2156,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2179 | /// Immediately send a full update for this scene object. | 2156 | /// Immediately send a full update for this scene object. |
2180 | /// </summary> | 2157 | /// </summary> |
2181 | public void SendGroupFullUpdate() | 2158 | public void SendGroupFullUpdate() |
2182 | { | 2159 | { |
2183 | if (IsDeleted) | 2160 | if (IsDeleted) |
2184 | return; | 2161 | return; |
2162 | |||
2163 | // m_log.DebugFormat("[SOG]: Sending immediate full group update for {0} {1}", Name, UUID); | ||
2185 | 2164 | ||
2186 | RootPart.SendFullUpdateToAllClients(); | 2165 | RootPart.SendFullUpdateToAllClients(); |
2187 | 2166 | ||
@@ -2201,7 +2180,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2201 | /// <summary> | 2180 | /// <summary> |
2202 | /// Immediately send an update for this scene object's root prim only. | 2181 | /// Immediately send an update for this scene object's root prim only. |
2203 | /// This is for updates regarding the object as a whole, and none of its parts in particular. | 2182 | /// This is for updates regarding the object as a whole, and none of its parts in particular. |
2204 | /// Note: this may not be cused by opensim (it probably should) but it's used by | 2183 | /// Note: this may not be used by opensim (it probably should) but it's used by |
2205 | /// external modules. | 2184 | /// external modules. |
2206 | /// </summary> | 2185 | /// </summary> |
2207 | public void SendGroupRootTerseUpdate() | 2186 | public void SendGroupRootTerseUpdate() |
@@ -2216,6 +2195,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2216 | { | 2195 | { |
2217 | if (m_scene == null) // Need to check here as it's null during object creation | 2196 | if (m_scene == null) // Need to check here as it's null during object creation |
2218 | return; | 2197 | return; |
2198 | |||
2219 | m_scene.SceneGraph.AddToUpdateList(this); | 2199 | m_scene.SceneGraph.AddToUpdateList(this); |
2220 | } | 2200 | } |
2221 | 2201 | ||
@@ -3718,7 +3698,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3718 | HasGroupChanged = true; | 3698 | HasGroupChanged = true; |
3719 | } | 3699 | } |
3720 | lockPartsForRead(false); | 3700 | lockPartsForRead(false); |
3721 | ScheduleGroupForFullUpdate(); | 3701 | |
3702 | // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled | ||
3703 | // for the same object with very different properties. The caller must schedule the update. | ||
3704 | //ScheduleGroupForFullUpdate(); | ||
3722 | } | 3705 | } |
3723 | 3706 | ||
3724 | public void TriggerScriptChangedEvent(Changed val) | 3707 | public void TriggerScriptChangedEvent(Changed val) |