diff options
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() |