aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs37
1 files changed, 24 insertions, 13 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index a610b6b..9558258 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -211,7 +211,8 @@ namespace OpenSim.Region.Framework.Scenes
211 211
212 //PauPaw:Proper PID Controler for autopilot************ 212 //PauPaw:Proper PID Controler for autopilot************
213 private bool m_moveToPositionInProgress; 213 private bool m_moveToPositionInProgress;
214 private Vector3 m_moveToPositionTarget; 214
215 public Vector3 MoveToPositionTarget { get; private set; }
215 216
216 private bool m_followCamAuto; 217 private bool m_followCamAuto;
217 218
@@ -1385,7 +1386,7 @@ namespace OpenSim.Region.Framework.Scenes
1385 if (agentData.UseClientAgentPosition) 1386 if (agentData.UseClientAgentPosition)
1386 { 1387 {
1387 m_moveToPositionInProgress = (agentData.ClientAgentPosition - AbsolutePosition).Length() > 0.2f; 1388 m_moveToPositionInProgress = (agentData.ClientAgentPosition - AbsolutePosition).Length() > 0.2f;
1388 m_moveToPositionTarget = agentData.ClientAgentPosition; 1389 MoveToPositionTarget = agentData.ClientAgentPosition;
1389 } 1390 }
1390 1391
1391 int i = 0; 1392 int i = 0;
@@ -1543,16 +1544,17 @@ namespace OpenSim.Region.Framework.Scenes
1543 /// <param value="reset">If true, clear the move to position</param> 1544 /// <param value="reset">If true, clear the move to position</param>
1544 /// <param value="allowUpdate">If true, allow the update in principle.</param> 1545 /// <param value="allowUpdate">If true, allow the update in principle.</param>
1545 /// <returns>True if movement has been updated in some way. False otherwise.</returns> 1546 /// <returns>True if movement has been updated in some way. False otherwise.</returns>
1546 protected bool DoMoveToPositionUpdate( 1547 public bool DoMoveToPositionUpdate(
1547 ref Vector3 agent_control_v3, Quaternion bodyRotation, bool reset, bool allowUpdate) 1548 ref Vector3 agent_control_v3, Quaternion bodyRotation, bool reset, bool allowUpdate)
1548 { 1549 {
1550// m_log.DebugFormat("[SCENE PRESENCE]: Called DoMoveToPositionUpdate() for {0}", Name);
1551
1549 bool updated = false; 1552 bool updated = false;
1550 1553
1551 //Paupaw:Do Proper PID for Autopilot here 1554 //Paupaw:Do Proper PID for Autopilot here
1552 if (reset) 1555 if (reset)
1553 { 1556 {
1554 m_moveToPositionTarget = Vector3.Zero; 1557 ResetMoveToPosition();
1555 m_moveToPositionInProgress = false;
1556 updated = true; 1558 updated = true;
1557 } 1559 }
1558 1560
@@ -1562,16 +1564,16 @@ namespace OpenSim.Region.Framework.Scenes
1562 1564
1563 if (allowUpdate && (m_moveToPositionInProgress && !m_autopilotMoving)) 1565 if (allowUpdate && (m_moveToPositionInProgress && !m_autopilotMoving))
1564 { 1566 {
1565 double distanceToTarget = Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget); 1567 double distanceToTarget = Util.GetDistanceTo(AbsolutePosition, MoveToPositionTarget);
1566// m_log.DebugFormat( 1568 m_log.DebugFormat(
1567// "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}", 1569 "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}",
1568// Name, AbsolutePosition, m_moveToPositionTarget, distanceToTarget); 1570 Name, AbsolutePosition, MoveToPositionTarget, distanceToTarget);
1569 1571
1570 // Check the error term of the current position in relation to the target position 1572 // Check the error term of the current position in relation to the target position
1571 if (distanceToTarget <= 1) 1573 if (distanceToTarget <= 1)
1572 { 1574 {
1573 // We are close enough to the target 1575 // We are close enough to the target
1574 m_moveToPositionTarget = Vector3.Zero; 1576 MoveToPositionTarget = Vector3.Zero;
1575 m_moveToPositionInProgress = false; 1577 m_moveToPositionInProgress = false;
1576 updated = true; 1578 updated = true;
1577 } 1579 }
@@ -1585,7 +1587,7 @@ namespace OpenSim.Region.Framework.Scenes
1585 // unknown forces are acting on the avatar and we need to adaptively respond 1587 // unknown forces are acting on the avatar and we need to adaptively respond
1586 // to such forces, but the following simple approach seems to works fine. 1588 // to such forces, but the following simple approach seems to works fine.
1587 Vector3 LocalVectorToTarget3D = 1589 Vector3 LocalVectorToTarget3D =
1588 (m_moveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords 1590 (MoveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords
1589 * Matrix4.CreateFromQuaternion(Quaternion.Inverse(bodyRotation)); // change to avatar coords 1591 * Matrix4.CreateFromQuaternion(Quaternion.Inverse(bodyRotation)); // change to avatar coords
1590 // Ignore z component of vector 1592 // Ignore z component of vector
1591// Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f); 1593// Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f);
@@ -1718,13 +1720,22 @@ namespace OpenSim.Region.Framework.Scenes
1718 } 1720 }
1719 1721
1720 m_moveToPositionInProgress = true; 1722 m_moveToPositionInProgress = true;
1721 m_moveToPositionTarget = pos; 1723 MoveToPositionTarget = pos;
1722 1724
1723 Vector3 agent_control_v3 = new Vector3(); 1725 Vector3 agent_control_v3 = new Vector3();
1724 DoMoveToPositionUpdate(ref agent_control_v3, Rotation, false, true); 1726 DoMoveToPositionUpdate(ref agent_control_v3, Rotation, false, true);
1725 AddNewMovement(agent_control_v3, Rotation); 1727 AddNewMovement(agent_control_v3, Rotation);
1726 } 1728 }
1727 1729
1730 /// <summary>
1731 /// Reset the move to position.
1732 /// </summary>
1733 public void ResetMoveToPosition()
1734 {
1735 MoveToPositionTarget = Vector3.Zero;
1736 m_moveToPositionInProgress = false;
1737 }
1738
1728 private void CheckAtSitTarget() 1739 private void CheckAtSitTarget()
1729 { 1740 {
1730 //m_log.Debug("[AUTOPILOT]: " + Util.GetDistanceTo(AbsolutePosition, m_autoPilotTarget).ToString()); 1741 //m_log.Debug("[AUTOPILOT]: " + Util.GetDistanceTo(AbsolutePosition, m_autoPilotTarget).ToString());
@@ -2731,7 +2742,7 @@ namespace OpenSim.Region.Framework.Scenes
2731 if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT) 2742 if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT)
2732 { 2743 {
2733 posLastSignificantMove = AbsolutePosition; 2744 posLastSignificantMove = AbsolutePosition;
2734 m_scene.EventManager.TriggerSignificantClientMovement(m_controllingClient); 2745 m_scene.EventManager.TriggerSignificantClientMovement(this);
2735 } 2746 }
2736 2747
2737 // Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m 2748 // Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m