diff options
author | Melanie | 2011-10-11 22:32:10 +0100 |
---|---|---|
committer | Melanie | 2011-10-11 22:32:10 +0100 |
commit | 6101de2316c3d1e1f563f19975503085ecc3f255 (patch) | |
tree | 9a443e52cedd059a5ef2f140957f9d69fb1e57ca /OpenSim/Region | |
parent | Merge commit '7ec7a3cf33b3a67cb10df14bad04cf6f09262822' into bigmerge (diff) | |
parent | When calling osNpcMoveTo(), rotate the avatar in the direction of travel. (diff) | |
download | opensim-SC-6101de2316c3d1e1f563f19975503085ecc3f255.zip opensim-SC-6101de2316c3d1e1f563f19975503085ecc3f255.tar.gz opensim-SC-6101de2316c3d1e1f563f19975503085ecc3f255.tar.bz2 opensim-SC-6101de2316c3d1e1f563f19975503085ecc3f255.tar.xz |
Merge commit '8159fd7110459246ff61a41800899f5d854eceee' into bigmerge
Conflicts:
OpenSim/Region/Framework/Scenes/ScenePresence.cs
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 17 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs | 16 |
2 files changed, 28 insertions, 5 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); |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs index 246bc34..1a0d0c7 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs | |||
@@ -182,18 +182,21 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
182 | scene.Update(); | 182 | scene.Update(); |
183 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | 183 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); |
184 | 184 | ||
185 | Vector3 targetPos = startPos + new Vector3(0, 0, 10); | 185 | Vector3 targetPos = startPos + new Vector3(0, 10, 0); |
186 | npcModule.MoveToTarget(npc.UUID, scene, targetPos, false, false); | 186 | npcModule.MoveToTarget(npc.UUID, scene, targetPos, false, false); |
187 | 187 | ||
188 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | 188 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); |
189 | //Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0.7071068f, 0.7071068f))); | ||
190 | Assert.That( | ||
191 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0.7071068f, 0.7071068f), 0.000001)); | ||
189 | 192 | ||
190 | scene.Update(); | 193 | scene.Update(); |
191 | 194 | ||
192 | // We should really check the exact figure. | 195 | // We should really check the exact figure. |
193 | Assert.That(npc.AbsolutePosition.X, Is.EqualTo(startPos.X)); | 196 | Assert.That(npc.AbsolutePosition.X, Is.EqualTo(startPos.X)); |
194 | Assert.That(npc.AbsolutePosition.Y, Is.EqualTo(startPos.Y)); | 197 | Assert.That(npc.AbsolutePosition.Y, Is.GreaterThan(startPos.Y)); |
195 | Assert.That(npc.AbsolutePosition.Z, Is.GreaterThan(startPos.Z)); | 198 | Assert.That(npc.AbsolutePosition.Z, Is.EqualTo(startPos.Z)); |
196 | Assert.That(npc.AbsolutePosition.Z, Is.LessThan(targetPos.Z)); | 199 | Assert.That(npc.AbsolutePosition.Z, Is.LessThan(targetPos.X)); |
197 | 200 | ||
198 | for (int i = 0; i < 10; i++) | 201 | for (int i = 0; i < 10; i++) |
199 | scene.Update(); | 202 | scene.Update(); |
@@ -208,6 +211,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
208 | targetPos = startPos + new Vector3(10, 0, 0); | 211 | targetPos = startPos + new Vector3(10, 0, 0); |
209 | npcModule.MoveToTarget(npc.UUID, scene, targetPos, false, false); | 212 | npcModule.MoveToTarget(npc.UUID, scene, targetPos, false, false); |
210 | 213 | ||
214 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | ||
215 | // Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0, 1))); | ||
216 | Assert.That( | ||
217 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0, 1), 0.000001)); | ||
218 | |||
211 | scene.Update(); | 219 | scene.Update(); |
212 | 220 | ||
213 | // We should really check the exact figure. | 221 | // We should really check the exact figure. |