aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs40
1 files changed, 12 insertions, 28 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index a03593e..acd57a3 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1010,23 +1010,6 @@ namespace OpenSim.Region.Framework.Scenes
1010 Dir_Vectors[10] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge 1010 Dir_Vectors[10] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge
1011 } 1011 }
1012 1012
1013 private Vector3[] GetWalkDirectionVectors()
1014 {
1015 Vector3[] vector = new Vector3[11];
1016 vector[0] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD
1017 vector[1] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK
1018 vector[2] = Vector3.UnitY; //LEFT
1019 vector[3] = -Vector3.UnitY; //RIGHT
1020 vector[4] = new Vector3(CameraAtAxis.Z, 0f, CameraUpAxis.Z); //UP
1021 vector[5] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN
1022 vector[6] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD_NUDGE
1023 vector[7] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK_NUDGE
1024 vector[8] = Vector3.UnitY; //LEFT_NUDGE
1025 vector[9] = -Vector3.UnitY; //RIGHT_NUDGE
1026 vector[10] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN_NUDGE
1027 return vector;
1028 }
1029
1030 #endregion 1013 #endregion
1031 1014
1032 #region Status Methods 1015 #region Status Methods
@@ -2110,15 +2093,6 @@ namespace OpenSim.Region.Framework.Scenes
2110 { 2093 {
2111 bool bAllowUpdateMoveToPosition = false; 2094 bool bAllowUpdateMoveToPosition = false;
2112 2095
2113 Vector3[] dirVectors;
2114
2115 // use camera up angle when in mouselook and not flying or when holding the left mouse button down and not flying
2116 // this prevents 'jumping' in inappropriate situations.
2117 if (!Flying && (m_mouseLook || m_leftButtonDown))
2118 dirVectors = GetWalkDirectionVectors();
2119 else
2120 dirVectors = Dir_Vectors;
2121
2122 // A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction. 2096 // A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction.
2123 foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS) 2097 foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS)
2124 { 2098 {
@@ -2130,7 +2104,7 @@ namespace OpenSim.Region.Framework.Scenes
2130 { 2104 {
2131 // Don't slide against ground when crouching if camera is panned around avatar 2105 // Don't slide against ground when crouching if camera is panned around avatar
2132 if (Flying || DCF != Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN) 2106 if (Flying || DCF != Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN)
2133 agent_control_v3 += dirVectors[i]; 2107 agent_control_v3 += Dir_Vectors[i];
2134 //m_log.DebugFormat("[Motion]: {0}, {1}",i, dirVectors[i]); 2108 //m_log.DebugFormat("[Motion]: {0}, {1}",i, dirVectors[i]);
2135 } 2109 }
2136 catch (IndexOutOfRangeException) 2110 catch (IndexOutOfRangeException)
@@ -3164,7 +3138,17 @@ namespace OpenSim.Region.Framework.Scenes
3164// "[SCENE PRESENCE]: Adding new movement {0} with rotation {1}, thisAddSpeedModifier {2} for {3}", 3138// "[SCENE PRESENCE]: Adding new movement {0} with rotation {1}, thisAddSpeedModifier {2} for {3}",
3165// vec, Rotation, thisAddSpeedModifier, Name); 3139// vec, Rotation, thisAddSpeedModifier, Name);
3166 3140
3167 Vector3 direc = vec * Rotation; 3141 Quaternion rot = Rotation;
3142 if (!(Flying && m_mouseLook))
3143 {
3144 // The only situation in which we care about X and Y is in mouselook flying. The rest of the time
3145 // these parameters are not relevant for determining avatar movement direction and cause issues such
3146 // as wrong walk speed if the camera is rotated.
3147 rot.X = 0;
3148 rot.Y = 0;
3149 }
3150
3151 Vector3 direc = vec * rot;
3168 direc.Normalize(); 3152 direc.Normalize();
3169 3153
3170 if (Flying != FlyingOld) // add for fly velocity control 3154 if (Flying != FlyingOld) // add for fly velocity control