aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs20
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs41
4 files changed, 61 insertions, 14 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index b77f1b6..4071159 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1096,13 +1096,21 @@ namespace OpenSim.Region.Framework.Scenes
1096 public Quaternion SitTargetOrientation 1096 public Quaternion SitTargetOrientation
1097 { 1097 {
1098 get { return m_sitTargetOrientation; } 1098 get { return m_sitTargetOrientation; }
1099 set { m_sitTargetOrientation = value; } 1099 set
1100 {
1101 m_sitTargetOrientation = value;
1102// m_log.DebugFormat("[SCENE OBJECT PART]: Set sit target orientation {0} for {1} {2}", m_sitTargetOrientation, Name, LocalId);
1103 }
1100 } 1104 }
1101 1105
1102 public Vector3 SitTargetPosition 1106 public Vector3 SitTargetPosition
1103 { 1107 {
1104 get { return m_sitTargetPosition; } 1108 get { return m_sitTargetPosition; }
1105 set { m_sitTargetPosition = value; } 1109 set
1110 {
1111 m_sitTargetPosition = value;
1112// m_log.DebugFormat("[SCENE OBJECT PART]: Set sit target position to {0} for {1} {2}", m_sitTargetPosition, Name, LocalId);
1113 }
1106 } 1114 }
1107 1115
1108 // This sort of sucks, but I'm adding these in to make some of 1116 // This sort of sucks, but I'm adding these in to make some of
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 89e511f..4156f21 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -89,7 +89,7 @@ namespace OpenSim.Region.Framework.Scenes
89 /// rotation, prim cut, prim twist, prim taper, and prim shear. See mantis 89 /// rotation, prim cut, prim twist, prim taper, and prim shear. See mantis
90 /// issue #1716 90 /// issue #1716
91 /// </summary> 91 /// </summary>
92 private static readonly Vector3 SIT_TARGET_ADJUSTMENT = new Vector3(0.1f, 0.0f, 0.3f); 92 public static readonly Vector3 SIT_TARGET_ADJUSTMENT = new Vector3(0.1f, 0.0f, 0.3f);
93 93
94 /// <summary> 94 /// <summary>
95 /// Movement updates for agents in neighboring regions are sent directly to clients. 95 /// Movement updates for agents in neighboring regions are sent directly to clients.
@@ -1873,7 +1873,7 @@ namespace OpenSim.Region.Framework.Scenes
1873 AddToPhysicalScene(false); 1873 AddToPhysicalScene(false);
1874 } 1874 }
1875 1875
1876 m_pos += ParentPosition + new Vector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); 1876 m_pos += ParentPosition + new Vector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight);
1877 ParentPosition = Vector3.Zero; 1877 ParentPosition = Vector3.Zero;
1878 1878
1879 ParentID = 0; 1879 ParentID = 0;
@@ -2283,6 +2283,10 @@ namespace OpenSim.Region.Framework.Scenes
2283 Vector3 sitTargetPos = part.SitTargetPosition; 2283 Vector3 sitTargetPos = part.SitTargetPosition;
2284 Quaternion sitTargetOrient = part.SitTargetOrientation; 2284 Quaternion sitTargetOrient = part.SitTargetOrientation;
2285 2285
2286// m_log.DebugFormat(
2287// "[SCENE PRESENCE]: Sitting {0} at sit target {1}, {2} on {3} {4}",
2288// Name, sitTargetPos, sitTargetOrient, part.Name, part.LocalId);
2289
2286 //Quaternion vq = new Quaternion(sitTargetPos.X, sitTargetPos.Y+0.2f, sitTargetPos.Z+0.2f, 0); 2290 //Quaternion vq = new Quaternion(sitTargetPos.X, sitTargetPos.Y+0.2f, sitTargetPos.Z+0.2f, 0);
2287 //Quaternion nq = new Quaternion(-sitTargetOrient.X, -sitTargetOrient.Y, -sitTargetOrient.Z, sitTargetOrient.w); 2291 //Quaternion nq = new Quaternion(-sitTargetOrient.X, -sitTargetOrient.Y, -sitTargetOrient.Z, sitTargetOrient.w);
2288 2292
@@ -2291,15 +2295,17 @@ namespace OpenSim.Region.Framework.Scenes
2291 m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z); 2295 m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z);
2292 m_pos += SIT_TARGET_ADJUSTMENT; 2296 m_pos += SIT_TARGET_ADJUSTMENT;
2293 Rotation = sitTargetOrient; 2297 Rotation = sitTargetOrient;
2294 //Rotation = sitTargetOrient;
2295 ParentPosition = part.AbsolutePosition; 2298 ParentPosition = part.AbsolutePosition;
2296
2297 //SendTerseUpdateToAllClients();
2298 } 2299 }
2299 else 2300 else
2300 { 2301 {
2301 m_pos -= part.AbsolutePosition; 2302 m_pos -= part.AbsolutePosition;
2303
2302 ParentPosition = part.AbsolutePosition; 2304 ParentPosition = part.AbsolutePosition;
2305
2306// m_log.DebugFormat(
2307// "[SCENE PRESENCE]: Sitting {0} at position {1} ({2} + {3}) on part {4} {5} without sit target",
2308// Name, part.AbsolutePosition, m_pos, ParentPosition, part.Name, part.LocalId);
2303 } 2309 }
2304 } 2310 }
2305 else 2311 else
@@ -2314,10 +2320,6 @@ namespace OpenSim.Region.Framework.Scenes
2314 2320
2315 Animator.TrySetMovementAnimation(sitAnimation); 2321 Animator.TrySetMovementAnimation(sitAnimation);
2316 SendAvatarDataToAllAgents(); 2322 SendAvatarDataToAllAgents();
2317 // This may seem stupid, but Our Full updates don't send avatar rotation :P
2318 // So we're also sending a terse update (which has avatar rotation)
2319 // [Update] We do now.
2320 //SendTerseUpdateToAllClients();
2321 } 2323 }
2322 2324
2323 /// <summary> 2325 /// <summary>
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 10181aa..56ff367 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -208,7 +208,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
208 ScenePresence sp; 208 ScenePresence sp;
209 scene.TryGetScenePresence(agentID, out sp); 209 scene.TryGetScenePresence(agentID, out sp);
210 sp.HandleAgentRequestSit(m_avatars[agentID], agentID, partID, Vector3.Zero); 210 sp.HandleAgentRequestSit(m_avatars[agentID], agentID, partID, Vector3.Zero);
211 sp.HandleAgentSit(m_avatars[agentID], agentID); 211// sp.HandleAgentSit(m_avatars[agentID], agentID);
212 212
213 return true; 213 return true;
214 } 214 }
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
index 174d74c..d2b79f7 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
@@ -231,7 +231,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
231 } 231 }
232 232
233 [Test] 233 [Test]
234 public void TestSitAndStand() 234 public void TestSitAndStandWithSitTarget()
235 { 235 {
236 TestHelpers.InMethod(); 236 TestHelpers.InMethod();
237// log4net.Config.XmlConfigurator.Configure(); 237// log4net.Config.XmlConfigurator.Configure();
@@ -245,12 +245,49 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
245 ScenePresence npc = scene.GetScenePresence(npcId); 245 ScenePresence npc = scene.GetScenePresence(npcId);
246 SceneObjectPart part = SceneHelpers.AddSceneObject(scene); 246 SceneObjectPart part = SceneHelpers.AddSceneObject(scene);
247 247
248 // We must have a non Vector3.Zero sit target position otherwise part.SitTargetAvatar doesn't get set!
249 part.SitTargetPosition = new Vector3(0, 0, 1); 248 part.SitTargetPosition = new Vector3(0, 0, 1);
250 npcModule.Sit(npc.UUID, part.UUID, scene); 249 npcModule.Sit(npc.UUID, part.UUID, scene);
251 250
252 Assert.That(part.SitTargetAvatar, Is.EqualTo(npcId)); 251 Assert.That(part.SitTargetAvatar, Is.EqualTo(npcId));
253 Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); 252 Assert.That(npc.ParentID, Is.EqualTo(part.LocalId));
253 Assert.That(
254 npc.AbsolutePosition,
255 Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT));
256
257 npcModule.Stand(npc.UUID, scene);
258
259 Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero));
260 Assert.That(npc.ParentID, Is.EqualTo(0));
261 }
262
263 [Test]
264 public void TestSitAndStandWithNoSitTarget()
265 {
266 TestHelpers.InMethod();
267// log4net.Config.XmlConfigurator.Configure();
268
269 ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
270
271 // FIXME: To get this to work for now, we are going to place the npc right next to the target so that
272 // the autopilot doesn't trigger
273 Vector3 startPos = new Vector3(1, 1, 1);
274
275 INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
276 UUID npcId = npcModule.CreateNPC("John", "Smith", startPos, scene, sp.Appearance);
277
278 ScenePresence npc = scene.GetScenePresence(npcId);
279 SceneObjectPart part = SceneHelpers.AddSceneObject(scene);
280
281 npcModule.Sit(npc.UUID, part.UUID, scene);
282
283 Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero));
284 Assert.That(npc.ParentID, Is.EqualTo(part.LocalId));
285
286 // FIXME: This is different for live avatars - z position is adjusted. This is half the height of the
287 // default avatar.
288 Assert.That(
289 npc.AbsolutePosition,
290 Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, 0.8857438f)));
254 291
255 npcModule.Stand(npc.UUID, scene); 292 npcModule.Stand(npc.UUID, scene);
256 293