aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-08-02 23:41:12 +0100
committerJustin Clark-Casey (justincc)2011-08-02 23:41:12 +0100
commitc122489e0947300753281e88771b7a74d49869c7 (patch)
treec8b0f67e85f883cd1e9a1ff3ff411c7eca08e64f /OpenSim/Region/Framework
parentIf GetRegionByName can't match something in the local db, then search the hyp... (diff)
downloadopensim-SC-c122489e0947300753281e88771b7a74d49869c7.zip
opensim-SC-c122489e0947300753281e88771b7a74d49869c7.tar.gz
opensim-SC-c122489e0947300753281e88771b7a74d49869c7.tar.bz2
opensim-SC-c122489e0947300753281e88771b7a74d49869c7.tar.xz
Partially fix autopilot/go here
This now works again except that it requires a click or avatar mvmt to get going This is because the ScenePresence.HandleAgentUpdate() method doesn't trigger until the client does something significant, at which point autopilot takes over. Even clicking is enough to trigger. This will be improved presently.
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs112
-rw-r--r--OpenSim/Region/Framework/Scenes/UndoState.cs2
3 files changed, 53 insertions, 72 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index b6fb5a4..1417efb 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1650,16 +1650,7 @@ namespace OpenSim.Region.Framework.Scenes
1650 ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); 1650 ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar);
1651 if (avatar != null) 1651 if (avatar != null)
1652 { 1652 {
1653 List<string> coords = new List<string>(); 1653 avatar.DoMoveToPosition(0, target, null);
1654 uint regionX = 0;
1655 uint regionY = 0;
1656 Utils.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY);
1657 target.X += regionX;
1658 target.Y += regionY;
1659 coords.Add(target.X.ToString());
1660 coords.Add(target.Y.ToString());
1661 coords.Add(target.Z.ToString());
1662 avatar.DoMoveToPosition(avatar, "", coords);
1663 } 1654 }
1664 } 1655 }
1665 else 1656 else
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4739f5b..a508813 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -116,7 +116,7 @@ namespace OpenSim.Region.Framework.Scenes
116 private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO; 116 private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO;
117 private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO; 117 private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO;
118 private bool MouseDown = false; 118 private bool MouseDown = false;
119 private SceneObjectGroup proxyObjectGroup; 119// private SceneObjectGroup proxyObjectGroup;
120 //private SceneObjectPart proxyObjectPart = null; 120 //private SceneObjectPart proxyObjectPart = null;
121 public Vector3 lastKnownAllowedPosition; 121 public Vector3 lastKnownAllowedPosition;
122 public bool sentMessageAboutRestrictedParcelFlyingDown; 122 public bool sentMessageAboutRestrictedParcelFlyingDown;
@@ -779,8 +779,7 @@ namespace OpenSim.Region.Framework.Scenes
779 m_controllingClient.OnStartAnim += HandleStartAnim; 779 m_controllingClient.OnStartAnim += HandleStartAnim;
780 m_controllingClient.OnStopAnim += HandleStopAnim; 780 m_controllingClient.OnStopAnim += HandleStopAnim;
781 m_controllingClient.OnForceReleaseControls += HandleForceReleaseControls; 781 m_controllingClient.OnForceReleaseControls += HandleForceReleaseControls;
782 m_controllingClient.OnAutoPilotGo += DoAutoPilot; 782 m_controllingClient.OnAutoPilotGo += DoMoveToPosition;
783 m_controllingClient.AddGenericPacketHandler("autopilot", DoMoveToPosition);
784 783
785 // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); 784 // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
786 // ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); 785 // ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
@@ -1480,6 +1479,7 @@ namespace OpenSim.Region.Framework.Scenes
1480 bAllowUpdateMoveToPosition = true; 1479 bAllowUpdateMoveToPosition = true;
1481 } 1480 }
1482 } 1481 }
1482
1483 i++; 1483 i++;
1484 } 1484 }
1485 1485
@@ -1492,12 +1492,21 @@ namespace OpenSim.Region.Framework.Scenes
1492 bAllowUpdateMoveToPosition = false; 1492 bAllowUpdateMoveToPosition = false;
1493 } 1493 }
1494 1494
1495 m_log.DebugFormat(
1496 "[SCENE PRESENCE]: bAllowUpdateMoveToPosition {0}, m_moveToPositionInProgress {1}, m_autopilotMoving {2}",
1497 bAllowUpdateMoveToPosition, m_moveToPositionInProgress, m_autopilotMoving);
1498
1495 if (bAllowUpdateMoveToPosition && (m_moveToPositionInProgress && !m_autopilotMoving)) 1499 if (bAllowUpdateMoveToPosition && (m_moveToPositionInProgress && !m_autopilotMoving))
1496 { 1500 {
1497 //Check the error term of the current position in relation to the target position 1501 double distanceToTarget = Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget);
1498 if (Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget) <= 0.5f) 1502// m_log.DebugFormat(
1503// "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}",
1504// Name, AbsolutePosition, m_moveToPositionTarget, distanceToTarget);
1505
1506 // Check the error term of the current position in relation to the target position
1507 if (distanceToTarget <= 1)
1499 { 1508 {
1500 // we are close enough to the target 1509 // We are close enough to the target
1501 m_moveToPositionTarget = Vector3.Zero; 1510 m_moveToPositionTarget = Vector3.Zero;
1502 m_moveToPositionInProgress = false; 1511 m_moveToPositionInProgress = false;
1503 update_movementflag = true; 1512 update_movementflag = true;
@@ -1608,8 +1617,6 @@ namespace OpenSim.Region.Framework.Scenes
1608 // "In {0} adding velocity to {1} of {2}", m_scene.RegionInfo.RegionName, Name, agent_control_v3); 1617 // "In {0} adding velocity to {1} of {2}", m_scene.RegionInfo.RegionName, Name, agent_control_v3);
1609 1618
1610 AddNewMovement(agent_control_v3, q); 1619 AddNewMovement(agent_control_v3, q);
1611
1612
1613 } 1620 }
1614 } 1621 }
1615 1622
@@ -1621,61 +1628,44 @@ namespace OpenSim.Region.Framework.Scenes
1621 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); 1628 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
1622 } 1629 }
1623 1630
1624 public void DoAutoPilot(uint not_used, Vector3 Pos, IClientAPI remote_client) 1631// public void DoAutoPilot(uint not_used, Vector3 Pos, IClientAPI remote_client)
1625 { 1632// {
1626 m_autopilotMoving = true; 1633// m_autopilotMoving = true;
1627 m_autoPilotTarget = Pos; 1634// m_autoPilotTarget = Pos;
1628 m_sitAtAutoTarget = false; 1635// m_sitAtAutoTarget = false;
1629 PrimitiveBaseShape proxy = PrimitiveBaseShape.Default; 1636// PrimitiveBaseShape proxy = PrimitiveBaseShape.Default;
1630 //proxy.PCode = (byte)PCode.ParticleSystem; 1637// //proxy.PCode = (byte)PCode.ParticleSystem;
1638//
1639// proxyObjectGroup = new SceneObjectGroup(UUID, Pos, Rotation, proxy);
1640// proxyObjectGroup.AttachToScene(m_scene);
1641//
1642// // Commented out this code since it could never have executed, but might still be informative.
1643//// if (proxyObjectGroup != null)
1644//// {
1645// proxyObjectGroup.SendGroupFullUpdate();
1646// remote_client.SendSitResponse(proxyObjectGroup.UUID, Vector3.Zero, Quaternion.Identity, true, Vector3.Zero, Vector3.Zero, false);
1647// m_scene.DeleteSceneObject(proxyObjectGroup, false);
1648//// }
1649//// else
1650//// {
1651//// m_autopilotMoving = false;
1652//// m_autoPilotTarget = Vector3.Zero;
1653//// ControllingClient.SendAlertMessage("Autopilot cancelled");
1654//// }
1655// }
1631 1656
1632 proxyObjectGroup = new SceneObjectGroup(UUID, Pos, Rotation, proxy); 1657 /// <summary>
1633 proxyObjectGroup.AttachToScene(m_scene); 1658 /// Move this presence to the given position over time.
1634 1659 /// </summary>
1635 // Commented out this code since it could never have executed, but might still be informative. 1660 /// <param name="pos"></param>
1636// if (proxyObjectGroup != null) 1661 public void DoMoveToPosition(uint not_used, Vector3 pos, IClientAPI remote_client)
1637// {
1638 proxyObjectGroup.SendGroupFullUpdate();
1639 remote_client.SendSitResponse(proxyObjectGroup.UUID, Vector3.Zero, Quaternion.Identity, true, Vector3.Zero, Vector3.Zero, false);
1640 m_scene.DeleteSceneObject(proxyObjectGroup, false);
1641// }
1642// else
1643// {
1644// m_autopilotMoving = false;
1645// m_autoPilotTarget = Vector3.Zero;
1646// ControllingClient.SendAlertMessage("Autopilot cancelled");
1647// }
1648 }
1649
1650 public void DoMoveToPosition(Object sender, string method, List<String> args)
1651 { 1662 {
1652 try 1663 m_log.DebugFormat(
1653 { 1664 "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}",
1654 float locx = 0f; 1665 Name, pos, m_scene.RegionInfo.RegionName);
1655 float locy = 0f; 1666
1656 float locz = 0f; 1667 m_moveToPositionInProgress = true;
1657 uint regionX = 0; 1668 m_moveToPositionTarget = pos;
1658 uint regionY = 0;
1659 try
1660 {
1661 Utils.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY);
1662 locx = Convert.ToSingle(args[0]) - (float)regionX;
1663 locy = Convert.ToSingle(args[1]) - (float)regionY;
1664 locz = Convert.ToSingle(args[2]);
1665 }
1666 catch (InvalidCastException)
1667 {
1668 m_log.Error("[CLIENT]: Invalid autopilot request");
1669 return;
1670 }
1671 m_moveToPositionInProgress = true;
1672 m_moveToPositionTarget = new Vector3(locx, locy, locz);
1673 }
1674 catch (Exception ex)
1675 {
1676 //Why did I get this error?
1677 m_log.Error("[SCENEPRESENCE]: DoMoveToPosition" + ex);
1678 }
1679 } 1669 }
1680 1670
1681 private void CheckAtSitTarget() 1671 private void CheckAtSitTarget()
diff --git a/OpenSim/Region/Framework/Scenes/UndoState.cs b/OpenSim/Region/Framework/Scenes/UndoState.cs
index 393f42d..d34d8e5 100644
--- a/OpenSim/Region/Framework/Scenes/UndoState.cs
+++ b/OpenSim/Region/Framework/Scenes/UndoState.cs
@@ -35,7 +35,7 @@ namespace OpenSim.Region.Framework.Scenes
35{ 35{
36 public class UndoState 36 public class UndoState
37 { 37 {
38 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 38// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
39 39
40 public Vector3 Position = Vector3.Zero; 40 public Vector3 Position = Vector3.Zero;
41 public Vector3 Scale = Vector3.Zero; 41 public Vector3 Scale = Vector3.Zero;