diff options
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 25 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 8 |
2 files changed, 21 insertions, 12 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index e3a564e..3fa6bb0 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1731,18 +1731,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
1731 | //if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) | 1731 | //if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) |
1732 | // return; | 1732 | // return; |
1733 | 1733 | ||
1734 | bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); | 1734 | // If we somehow got here to updating the SOG and its root part is not scheduled for update, |
1735 | 1735 | // check to see if the physical position or rotation warrant an update. | |
1736 | if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) | 1736 | if (m_rootPart.UpdateFlag == UpdateRequired.NONE) |
1737 | { | 1737 | { |
1738 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; | 1738 | bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); |
1739 | lastPhysGroupPos = AbsolutePosition; | ||
1740 | } | ||
1741 | 1739 | ||
1742 | if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) | 1740 | if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) |
1743 | { | 1741 | { |
1744 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; | 1742 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; |
1745 | lastPhysGroupRot = GroupRotation; | 1743 | lastPhysGroupPos = AbsolutePosition; |
1744 | } | ||
1745 | |||
1746 | if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) | ||
1747 | { | ||
1748 | m_rootPart.UpdateFlag = UpdateRequired.TERSE; | ||
1749 | lastPhysGroupRot = GroupRotation; | ||
1750 | } | ||
1746 | } | 1751 | } |
1747 | 1752 | ||
1748 | SceneObjectPart[] parts = m_parts.GetArray(); | 1753 | SceneObjectPart[] parts = m_parts.GetArray(); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 99be46d..fc5141f 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2013,8 +2013,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2013 | sitOrientation = avSitOrientation; | 2013 | sitOrientation = avSitOrientation; |
2014 | autopilot = false; | 2014 | autopilot = false; |
2015 | } | 2015 | } |
2016 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); | ||
2017 | |||
2018 | pos = part.AbsolutePosition + offset; | 2016 | pos = part.AbsolutePosition + offset; |
2019 | //if (Math.Abs(part.AbsolutePosition.Z - AbsolutePosition.Z) > 1) | 2017 | //if (Math.Abs(part.AbsolutePosition.Z - AbsolutePosition.Z) > 1) |
2020 | //{ | 2018 | //{ |
@@ -2060,6 +2058,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2060 | m_sitAtAutoTarget = autopilot; | 2058 | m_sitAtAutoTarget = autopilot; |
2061 | if (!autopilot) | 2059 | if (!autopilot) |
2062 | HandleAgentSit(remoteClient, UUID); | 2060 | HandleAgentSit(remoteClient, UUID); |
2061 | |||
2062 | // Moved here to avoid a race with default sit anim | ||
2063 | // The script event needs to be raised after the default sit anim is set. | ||
2064 | if (part != null) | ||
2065 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); | ||
2066 | |||
2063 | } | 2067 | } |
2064 | 2068 | ||
2065 | // public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset, string sitAnimation) | 2069 | // public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset, string sitAnimation) |