diff options
author | Justin Clark-Casey (justincc) | 2011-08-02 23:41:12 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-08-02 23:41:12 +0100 |
commit | c122489e0947300753281e88771b7a74d49869c7 (patch) | |
tree | c8b0f67e85f883cd1e9a1ff3ff411c7eca08e64f /OpenSim/Region/Framework/Scenes/ScenePresence.cs | |
parent | If GetRegionByName can't match something in the local db, then search the hyp... (diff) | |
download | opensim-SC_OLD-c122489e0947300753281e88771b7a74d49869c7.zip opensim-SC_OLD-c122489e0947300753281e88771b7a74d49869c7.tar.gz opensim-SC_OLD-c122489e0947300753281e88771b7a74d49869c7.tar.bz2 opensim-SC_OLD-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/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 112 |
1 files changed, 51 insertions, 61 deletions
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() |