From ebe84907ae0515c8caf7ca815c4360a16131481a Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Sat, 7 Mar 2009 01:18:59 +0000 Subject: * Fixes mantis: #3241 * Uses 'mouselook' or left mouse button down, to determine when to use the camera's UP axis to determine the direction of movement. * We crouch-slide no more. --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 7db9c07..5160e73 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -547,6 +547,9 @@ namespace OpenSim.Region.Framework.Scenes } private bool m_inTransit; + private bool m_mouseLook; + private bool m_leftButtonDown; + public bool IsInTransit { get { return m_inTransit; } @@ -1141,6 +1144,8 @@ namespace OpenSim.Region.Framework.Scenes { StandUp(); } + m_mouseLook = (flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0; + m_leftButtonDown = (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0; lock (scriptedcontrols) { if (scriptedcontrols.Count > 0) @@ -1206,8 +1211,14 @@ namespace OpenSim.Region.Framework.Scenes bool bResetMoveToPosition = false; Vector3[] dirVectors; - if (m_physicsActor.Flying) dirVectors = Dir_Vectors; - else dirVectors = GetWalkDirectionVectors(); + + // use camera up angle when in mouselook and not flying or when holding the left mouse button down and not flying + // this prevents 'jumping' in inappropriate situations. + if ((m_mouseLook && !m_physicsActor.Flying) || (m_leftButtonDown && !m_physicsActor.Flying)) + dirVectors = GetWalkDirectionVectors(); + else + dirVectors = Dir_Vectors; + foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof (Dir_ControlFlags))) { -- cgit v1.1