diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 9358a4a..cd3cb60 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -585,7 +585,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
585 | public Quaternion Rotation | 585 | public Quaternion Rotation |
586 | { | 586 | { |
587 | get { return m_bodyRot; } | 587 | get { return m_bodyRot; } |
588 | set { m_bodyRot = value; } | 588 | set |
589 | { | ||
590 | m_bodyRot = value; | ||
591 | m_log.DebugFormat("[SCENE PRESENCE]: Body rot for {0} set to {1}", Name, m_bodyRot); | ||
592 | } | ||
589 | } | 593 | } |
590 | 594 | ||
591 | public Quaternion PreviousRotation | 595 | public Quaternion PreviousRotation |
@@ -1711,7 +1715,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1711 | 1715 | ||
1712 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is | 1716 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is |
1713 | // always slightly higher than the actual terrain height. | 1717 | // always slightly higher than the actual terrain height. |
1714 | // FIXME: This constrains NOC movements as well, so should be somewhere else. | 1718 | // FIXME: This constrains NPC movements as well, so should be somewhere else. |
1715 | if (pos.Z - terrainHeight < 0.2) | 1719 | if (pos.Z - terrainHeight < 0.2) |
1716 | pos.Z = terrainHeight; | 1720 | pos.Z = terrainHeight; |
1717 | 1721 | ||
@@ -1727,6 +1731,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
1727 | MovingToTarget = true; | 1731 | MovingToTarget = true; |
1728 | MoveToPositionTarget = pos; | 1732 | MoveToPositionTarget = pos; |
1729 | 1733 | ||
1734 | // Rotate presence around the z-axis to point in same direction as movement. | ||
1735 | // Ignore z component of vector | ||
1736 | Vector3 localVectorToTarget3D = pos - AbsolutePosition; | ||
1737 | Vector3 localVectorToTarget2D = new Vector3((float)(localVectorToTarget3D.X), (float)(localVectorToTarget3D.Y), 0f); | ||
1738 | |||
1739 | // m_log.DebugFormat("[SCENE PRESENCE]: Local vector to target is {0}", localVectorToTarget2D); | ||
1740 | |||
1741 | // Calculate the yaw. | ||
1742 | Vector3 angle = new Vector3(0, 0, (float)(Math.Atan2(localVectorToTarget2D.Y, localVectorToTarget2D.X))); | ||
1743 | |||
1744 | // m_log.DebugFormat("[SCENE PRESENCE]: Angle is {0}", angle); | ||
1745 | |||
1746 | Rotation = Quaternion.CreateFromEulers(angle); | ||
1747 | // m_log.DebugFormat("[SCENE PRESENCE]: Body rot for {0} set to {1}", Name, Rotation); | ||
1748 | |||
1730 | Vector3 agent_control_v3 = new Vector3(); | 1749 | Vector3 agent_control_v3 = new Vector3(); |
1731 | HandleMoveToTargetUpdate(ref agent_control_v3); | 1750 | HandleMoveToTargetUpdate(ref agent_control_v3); |
1732 | AddNewMovement(agent_control_v3); | 1751 | AddNewMovement(agent_control_v3); |