From c9415fd76378af35ff76037d46245f2b95e4264f Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 5 Mar 2014 00:35:02 +0000 Subject: If an avatar is sitting, send out position updates to clients for any change, not just those outside the usual tolerances. This is to allow small adjustments of less than 0.05m in functions such as llSetPrimitiveLinkParams() to work This is another fix for http://opensimulator.org/mantis/view.php?id=7044 Extends regression test for this case. --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs') diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index d4af9fc..c8971c4 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -3084,9 +3084,19 @@ namespace OpenSim.Region.Framework.Scenes if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn) SendAvatarDataToAllAgents(); - if (!Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || - !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || - !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE)) + // Allow any updates for sitting avatars to that llSetPrimitiveLinkParams() can work for very + // small increments (e.g. sit position adjusters). An alternative may be to eliminate the tolerance + // checks on all updates but the ramifications of this would need careful consideration. + bool updateClients + = IsSatOnObject && (Rotation != m_lastRotation || Velocity != m_lastVelocity || m_pos != m_lastPosition); + + if (!updateClients) + updateClients + = !Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) + || !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) + || !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE); + + if (updateClients) { SendTerseUpdateToAllClients(); -- cgit v1.1