diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 24 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 51 |
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() |