diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 1dc7e20..dae20a5 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1648,12 +1648,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
1648 | 1648 | ||
1649 | if (AllowMovement && !SitGround) | 1649 | if (AllowMovement && !SitGround) |
1650 | { | 1650 | { |
1651 | Quaternion bodyRotation = agentData.BodyRotation; | 1651 | // m_log.DebugFormat("[SCENE PRESENCE]: Initial body rotation {0} for {1}", agentData.BodyRotation, Name); |
1652 | |||
1652 | bool update_rotation = false; | 1653 | bool update_rotation = false; |
1653 | 1654 | ||
1654 | if (bodyRotation != Rotation) | 1655 | // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis |
1656 | // it rotates around. | ||
1657 | // In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted | ||
1658 | // excessive up and down movements of the camera when looking up and down. | ||
1659 | // See http://opensimulator.org/mantis/view.php?id=3274 | ||
1660 | // This does not affect head movement, since this is controlled entirely by camera movement rather than | ||
1661 | // body rotation. It does not affect sitting avatar since it's the sitting part rotation that takes | ||
1662 | // effect, not the avatar rotation. | ||
1663 | // However, if we do need to store X and Y rotations in the future, another solution needs to be found | ||
1664 | // for the mouselook bug. Possibly, one could strip out X and Y rotations before sending the avatar | ||
1665 | // update messages. | ||
1666 | if (agentData.BodyRotation.Z != Rotation.Z || agentData.BodyRotation.W != Rotation.W) | ||
1655 | { | 1667 | { |
1656 | Rotation = bodyRotation; | 1668 | Rotation = new Quaternion(0, 0, agentData.BodyRotation.Z, agentData.BodyRotation.W); |
1657 | update_rotation = true; | 1669 | update_rotation = true; |
1658 | } | 1670 | } |
1659 | 1671 | ||