aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs24
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs51
2 files changed, 25 insertions, 50 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 66fb493..bc3400a 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -215,27 +215,9 @@ namespace OpenSim.Region.Framework.Scenes
215 if (sp.IsChildAgent) 215 if (sp.IsChildAgent)
216 continue; 216 continue;
217 217
218 if (sp.ParentID != 0) 218 coarseLocations.Add(sp.AbsolutePosition);
219 { 219
220 // sitting avatar 220 avatarUUIDs.Add(sp.UUID);
221 SceneObjectPart sop = m_parentScene.GetSceneObjectPart(sp.ParentID);
222 if (sop != null)
223 {
224 coarseLocations.Add(sop.AbsolutePosition + sp.OffsetPosition);
225 avatarUUIDs.Add(sp.UUID);
226 }
227 else
228 {
229 // we can't find the parent.. ! arg!
230 coarseLocations.Add(sp.AbsolutePosition);
231 avatarUUIDs.Add(sp.UUID);
232 }
233 }
234 else
235 {
236 coarseLocations.Add(sp.AbsolutePosition);
237 avatarUUIDs.Add(sp.UUID);
238 }
239 } 221 }
240 } 222 }
241 223
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index be56fe1..b84660a 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -432,7 +432,7 @@ namespace OpenSim.Region.Framework.Scenes
432 { 432 {
433 get 433 get
434 { 434 {
435 if (PhysicsActor != null && m_parentID == 0) 435 if (PhysicsActor != null)
436 { 436 {
437 m_pos = PhysicsActor.Position; 437 m_pos = PhysicsActor.Position;
438 438
@@ -477,7 +477,7 @@ namespace OpenSim.Region.Framework.Scenes
477 } 477 }
478 } 478 }
479 479
480 // Don't update while sitting 480 // Don't update while sitting. The PhysicsActor above is null whilst sitting.
481 if (ParentID == 0) 481 if (ParentID == 0)
482 { 482 {
483 m_pos = value; 483 m_pos = value;
@@ -504,6 +504,7 @@ namespace OpenSim.Region.Framework.Scenes
504 // There is no offset position when not seated 504 // There is no offset position when not seated
505 if (ParentID == 0) 505 if (ParentID == 0)
506 return; 506 return;
507
507 m_pos = value; 508 m_pos = value;
508 } 509 }
509 } 510 }
@@ -562,19 +563,18 @@ namespace OpenSim.Region.Framework.Scenes
562 563
563 public bool IsChildAgent { get; set; } 564 public bool IsChildAgent { get; set; }
564 565
565 public uint ParentID 566 /// <summary>
566 { 567 /// If the avatar is sitting, the local ID of the prim that it's sitting on. If not sitting then zero.
567 get { return m_parentID; } 568 /// </summary>
568 set { m_parentID = value; } 569 public uint ParentID { get; set; }
569 }
570 private uint m_parentID;
571 570
572 public SceneObjectPart ParentPart 571 /// <summary>
573 { 572 /// If the avatar is sitting, the prim that it's sitting on. If not sitting then null.
574 get { return m_parentPart; } 573 /// </summary>
575 set { m_parentPart = value; } 574 /// <remarks>
576 } 575 /// If you use this property then you must take a reference since another thread could set it to null.
577 private SceneObjectPart m_parentPart = null; 576 /// </remarks>
577 public SceneObjectPart ParentPart { get; set; }
578 578
579 public float Health 579 public float Health
580 { 580 {
@@ -2204,23 +2204,16 @@ namespace OpenSim.Region.Framework.Scenes
2204// "[SCENE PRESENCE]: Sitting {0} at position {1} ({2} + {3}) on part {4} {5} without sit target", 2204// "[SCENE PRESENCE]: Sitting {0} at position {1} ({2} + {3}) on part {4} {5} without sit target",
2205// Name, part.AbsolutePosition, m_pos, ParentPosition, part.Name, part.LocalId); 2205// Name, part.AbsolutePosition, m_pos, ParentPosition, part.Name, part.LocalId);
2206 } 2206 }
2207 }
2208 else
2209 {
2210 return;
2211 }
2212 2207
2213 ParentPart = m_scene.GetSceneObjectPart(m_requestedSitTargetID); 2208 ParentPart = m_scene.GetSceneObjectPart(m_requestedSitTargetID);
2214 if (ParentPart == null) 2209 ParentID = m_requestedSitTargetID;
2215 return;
2216 2210
2217 ParentID = m_requestedSitTargetID; 2211 Velocity = Vector3.Zero;
2218 2212 RemoveFromPhysicalScene();
2219 Velocity = Vector3.Zero; 2213
2220 RemoveFromPhysicalScene(); 2214 Animator.TrySetMovementAnimation(sitAnimation);
2221 2215 SendAvatarDataToAllAgents();
2222 Animator.TrySetMovementAnimation(sitAnimation); 2216 }
2223 SendAvatarDataToAllAgents();
2224 } 2217 }
2225 2218
2226 public void HandleAgentSitOnGround() 2219 public void HandleAgentSitOnGround()