diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index fc8f8b9..95d06fe 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1863,7 +1863,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1863 | 1863 | ||
1864 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is | 1864 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is |
1865 | // always slightly higher than the actual terrain height. | 1865 | // always slightly higher than the actual terrain height. |
1866 | // FIXME: This constrains NOC movements as well, so should be somewhere else. | 1866 | // FIXME: This constrains NPC movements as well, so should be somewhere else. |
1867 | if (pos.Z - terrainHeight < 0.2) | 1867 | if (pos.Z - terrainHeight < 0.2) |
1868 | pos.Z = terrainHeight; | 1868 | pos.Z = terrainHeight; |
1869 | 1869 | ||
@@ -1879,6 +1879,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
1879 | MovingToTarget = true; | 1879 | MovingToTarget = true; |
1880 | MoveToPositionTarget = pos; | 1880 | MoveToPositionTarget = pos; |
1881 | 1881 | ||
1882 | // Rotate presence around the z-axis to point in same direction as movement. | ||
1883 | // Ignore z component of vector | ||
1884 | Vector3 localVectorToTarget3D = pos - AbsolutePosition; | ||
1885 | Vector3 localVectorToTarget2D = new Vector3((float)(localVectorToTarget3D.X), (float)(localVectorToTarget3D.Y), 0f); | ||
1886 | |||
1887 | // m_log.DebugFormat("[SCENE PRESENCE]: Local vector to target is {0}", localVectorToTarget2D); | ||
1888 | |||
1889 | // Calculate the yaw. | ||
1890 | Vector3 angle = new Vector3(0, 0, (float)(Math.Atan2(localVectorToTarget2D.Y, localVectorToTarget2D.X))); | ||
1891 | |||
1892 | // m_log.DebugFormat("[SCENE PRESENCE]: Angle is {0}", angle); | ||
1893 | |||
1894 | Rotation = Quaternion.CreateFromEulers(angle); | ||
1895 | // m_log.DebugFormat("[SCENE PRESENCE]: Body rot for {0} set to {1}", Name, Rotation); | ||
1896 | |||
1882 | Vector3 agent_control_v3 = new Vector3(); | 1897 | Vector3 agent_control_v3 = new Vector3(); |
1883 | HandleMoveToTargetUpdate(ref agent_control_v3); | 1898 | HandleMoveToTargetUpdate(ref agent_control_v3); |
1884 | AddNewMovement(agent_control_v3); | 1899 | AddNewMovement(agent_control_v3); |