aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs3
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs41
2 files changed, 35 insertions, 9 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index c314596..8b1d705 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -156,7 +156,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation
156 Vector3 left = Vector3.Transform(Vector3.UnitY, rotMatrix); 156 Vector3 left = Vector3.Transform(Vector3.UnitY, rotMatrix);
157 157
158 // Check control flags 158 // Check control flags
159 bool heldForward = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_AT_POS; 159 bool heldForward =
160 (((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) || ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS));
160 bool heldBack = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG; 161 bool heldBack = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG;
161 bool heldLeft = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS; 162 bool heldLeft = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS;
162 bool heldRight = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG; 163 bool heldRight = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG;
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 289ba47..4c2de27 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -169,7 +169,7 @@ namespace OpenSim.Region.Framework.Scenes
169 protected RegionInfo m_regionInfo; 169 protected RegionInfo m_regionInfo;
170 protected ulong crossingFromRegion; 170 protected ulong crossingFromRegion;
171 171
172 private readonly Vector3[] Dir_Vectors = new Vector3[6]; 172 private readonly Vector3[] Dir_Vectors = new Vector3[9];
173 173
174 // Position of agent's camera in world (region cordinates) 174 // Position of agent's camera in world (region cordinates)
175 protected Vector3 m_CameraCenter; 175 protected Vector3 m_CameraCenter;
@@ -233,6 +233,8 @@ namespace OpenSim.Region.Framework.Scenes
233 DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG, 233 DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG,
234 DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, 234 DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS,
235 DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, 235 DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG,
236 DIR_CONTROL_FLAG_FORWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS,
237 DIR_CONTROL_FLAG_BACKWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG,
236 DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG 238 DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG
237 } 239 }
238 240
@@ -717,19 +719,23 @@ namespace OpenSim.Region.Framework.Scenes
717 Dir_Vectors[3] = -Vector3.UnitY; //RIGHT 719 Dir_Vectors[3] = -Vector3.UnitY; //RIGHT
718 Dir_Vectors[4] = Vector3.UnitZ; //UP 720 Dir_Vectors[4] = Vector3.UnitZ; //UP
719 Dir_Vectors[5] = -Vector3.UnitZ; //DOWN 721 Dir_Vectors[5] = -Vector3.UnitZ; //DOWN
720 Dir_Vectors[5] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge 722 Dir_Vectors[8] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge
723 Dir_Vectors[6] = Vector3.UnitX*2; //FORWARD
724 Dir_Vectors[7] = -Vector3.UnitX; //BACK
721 } 725 }
722 726
723 private Vector3[] GetWalkDirectionVectors() 727 private Vector3[] GetWalkDirectionVectors()
724 { 728 {
725 Vector3[] vector = new Vector3[6]; 729 Vector3[] vector = new Vector3[9];
726 vector[0] = new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z); //FORWARD 730 vector[0] = new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z); //FORWARD
727 vector[1] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK 731 vector[1] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK
728 vector[2] = Vector3.UnitY; //LEFT 732 vector[2] = Vector3.UnitY; //LEFT
729 vector[3] = -Vector3.UnitY; //RIGHT 733 vector[3] = -Vector3.UnitY; //RIGHT
730 vector[4] = new Vector3(m_CameraAtAxis.Z, 0f, m_CameraUpAxis.Z); //UP 734 vector[4] = new Vector3(m_CameraAtAxis.Z, 0f, m_CameraUpAxis.Z); //UP
731 vector[5] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN 735 vector[5] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN
732 vector[5] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_Nudge 736 vector[8] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_Nudge
737 vector[6] = (new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z) * 2); //FORWARD Nudge
738 vector[7] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK Nudge
733 return vector; 739 return vector;
734 } 740 }
735 741
@@ -1306,6 +1312,9 @@ namespace OpenSim.Region.Framework.Scenes
1306 else 1312 else
1307 dirVectors = Dir_Vectors; 1313 dirVectors = Dir_Vectors;
1308 1314
1315 // The fact that m_movementflag is a byte needs to be fixed
1316 // it really should be a uint
1317 uint nudgehack = 250;
1309 foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS) 1318 foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS)
1310 { 1319 {
1311 if (((uint)flags & (uint)DCF) != 0) 1320 if (((uint)flags & (uint)DCF) != 0)
@@ -1315,24 +1324,40 @@ namespace OpenSim.Region.Framework.Scenes
1315 try 1324 try
1316 { 1325 {
1317 agent_control_v3 += dirVectors[i]; 1326 agent_control_v3 += dirVectors[i];
1327 //m_log.DebugFormat("[Motion]: {0}, {1}",i, dirVectors[i]);
1318 } 1328 }
1319 catch (IndexOutOfRangeException) 1329 catch (IndexOutOfRangeException)
1320 { 1330 {
1321 // Why did I get this? 1331 // Why did I get this?
1322 } 1332 }
1323 1333
1324 if ((m_movementflag & (uint)DCF) == 0) 1334 if ((m_movementflag & (byte)(uint)DCF) == 0)
1325 { 1335 {
1336 if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE)
1337 {
1338 m_movementflag |= (byte)nudgehack;
1339 }
1326 m_movementflag += (byte)(uint)DCF; 1340 m_movementflag += (byte)(uint)DCF;
1327 update_movementflag = true; 1341 update_movementflag = true;
1328 } 1342 }
1329 } 1343 }
1330 else 1344 else
1331 { 1345 {
1332 if ((m_movementflag & (uint)DCF) != 0) 1346 if ((m_movementflag & (byte)(uint)DCF) != 0 ||
1347 ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE)
1348 && ((m_movementflag & (byte)nudgehack) == nudgehack))
1349 ) // This or is for Nudge forward
1333 { 1350 {
1334 m_movementflag -= (byte)(uint)DCF; 1351 m_movementflag -= ((byte)(uint)DCF);
1352
1335 update_movementflag = true; 1353 update_movementflag = true;
1354 /*
1355 if ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE)
1356 && ((m_movementflag & (byte)nudgehack) == nudgehack))
1357 {
1358 m_log.Debug("Removed Hack flag");
1359 }
1360 */
1336 } 1361 }
1337 else 1362 else
1338 { 1363 {
@@ -1470,7 +1495,7 @@ namespace OpenSim.Region.Framework.Scenes
1470 } 1495 }
1471 } 1496 }
1472 1497
1473 if (update_movementflag) 1498 if (update_movementflag && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0) && (m_parentID == 0))
1474 Animator.UpdateMovementAnimations(); 1499 Animator.UpdateMovementAnimations();
1475 1500
1476 m_scene.EventManager.TriggerOnClientMovement(this); 1501 m_scene.EventManager.TriggerOnClientMovement(this);