diff options
4 files changed, 32 insertions, 68 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 66fb493..dd0ca43 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -215,27 +215,13 @@ 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 | SceneObjectPart sitPart = sp.ParentPart; |
219 | { | 219 | if (sitPart != null) |
220 | // sitting avatar | 220 | coarseLocations.Add(sitPart.AbsolutePosition + sp.OffsetPosition); |
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 | 221 | else |
235 | { | ||
236 | coarseLocations.Add(sp.AbsolutePosition); | 222 | coarseLocations.Add(sp.AbsolutePosition); |
237 | avatarUUIDs.Add(sp.UUID); | 223 | |
238 | } | 224 | avatarUUIDs.Add(sp.UUID); |
239 | } | 225 | } |
240 | } | 226 | } |
241 | 227 | ||
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index c9dc7fd..aab0bf0 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 && ParentID == 0) |
436 | { | 436 | { |
437 | m_pos = PhysicsActor.Position; | 437 | m_pos = PhysicsActor.Position; |
438 | 438 | ||
@@ -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 | { |
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs index 09da97a..a2e3ac2 100644 --- a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs +++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs | |||
@@ -716,29 +716,17 @@ namespace OpenSim.Region.RegionCombinerModule | |||
716 | { | 716 | { |
717 | if (sp.UUID != presence.UUID) | 717 | if (sp.UUID != presence.UUID) |
718 | { | 718 | { |
719 | if (sp.ParentID != 0) | 719 | SceneObjectPart sitPart = sp.ParentPart; |
720 | { | 720 | |
721 | // sitting avatar | 721 | if (sitPart != null) |
722 | SceneObjectPart sop = connectiondata.RegionScene.GetSceneObjectPart(sp.ParentID); | 722 | CoarseLocations.Add(sitPart.AbsolutePosition + sp.AbsolutePosition); |
723 | if (sop != null) | ||
724 | { | ||
725 | CoarseLocations.Add(sop.AbsolutePosition + sp.AbsolutePosition); | ||
726 | AvatarUUIDs.Add(sp.UUID); | ||
727 | } | ||
728 | else | ||
729 | { | ||
730 | // we can't find the parent.. ! arg! | ||
731 | CoarseLocations.Add(sp.AbsolutePosition); | ||
732 | AvatarUUIDs.Add(sp.UUID); | ||
733 | } | ||
734 | } | ||
735 | else | 723 | else |
736 | { | ||
737 | CoarseLocations.Add(sp.AbsolutePosition); | 724 | CoarseLocations.Add(sp.AbsolutePosition); |
738 | AvatarUUIDs.Add(sp.UUID); | 725 | |
739 | } | 726 | AvatarUUIDs.Add(sp.UUID); |
740 | } | 727 | } |
741 | }); | 728 | }); |
729 | |||
742 | DistributeCourseLocationUpdates(CoarseLocations, AvatarUUIDs, connectiondata, presence); | 730 | DistributeCourseLocationUpdates(CoarseLocations, AvatarUUIDs, connectiondata, presence); |
743 | } | 731 | } |
744 | 732 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 786ae6e..bb374ed 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -3825,7 +3825,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3825 | List<String> nametable = new List<String>(); | 3825 | List<String> nametable = new List<String>(); |
3826 | World.ForEachRootScenePresence(delegate(ScenePresence presence) | 3826 | World.ForEachRootScenePresence(delegate(ScenePresence presence) |
3827 | { | 3827 | { |
3828 | if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID)) | 3828 | SceneObjectPart sitPart = presence.ParentPart; |
3829 | if (sitPart != null && m_host.ParentGroup.HasChildPrim(sitPart.LocalId)) | ||
3829 | nametable.Add(presence.ControllingClient.Name); | 3830 | nametable.Add(presence.ControllingClient.Name); |
3830 | }); | 3831 | }); |
3831 | 3832 | ||
@@ -4393,22 +4394,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4393 | 4394 | ||
4394 | // Find pushee position | 4395 | // Find pushee position |
4395 | // Pushee Linked? | 4396 | // Pushee Linked? |
4396 | if (pusheeav.ParentID != 0) | 4397 | SceneObjectPart sitPart = pusheeav.ParentPart; |
4397 | { | 4398 | if (sitPart != null) |
4398 | SceneObjectPart parentobj = World.GetSceneObjectPart(pusheeav.ParentID); | 4399 | PusheePos = sitPart.AbsolutePosition; |
4399 | if (parentobj != null) | ||
4400 | { | ||
4401 | PusheePos = parentobj.AbsolutePosition; | ||
4402 | } | ||
4403 | else | ||
4404 | { | ||
4405 | PusheePos = pusheeav.AbsolutePosition; | ||
4406 | } | ||
4407 | } | ||
4408 | else | 4400 | else |
4409 | { | ||
4410 | PusheePos = pusheeav.AbsolutePosition; | 4401 | PusheePos = pusheeav.AbsolutePosition; |
4411 | } | ||
4412 | } | 4402 | } |
4413 | 4403 | ||
4414 | if (!pusheeIsAvatar) | 4404 | if (!pusheeIsAvatar) |
@@ -5603,7 +5593,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5603 | flags |= ScriptBaseClass.AGENT_IN_AIR; | 5593 | flags |= ScriptBaseClass.AGENT_IN_AIR; |
5604 | } | 5594 | } |
5605 | 5595 | ||
5606 | if (agent.ParentID != 0) | 5596 | if (agent.ParentPart != null) |
5607 | { | 5597 | { |
5608 | flags |= ScriptBaseClass.AGENT_ON_OBJECT; | 5598 | flags |= ScriptBaseClass.AGENT_ON_OBJECT; |
5609 | flags |= ScriptBaseClass.AGENT_SITTING; | 5599 | flags |= ScriptBaseClass.AGENT_SITTING; |
@@ -7692,7 +7682,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7692 | World.ForEachRootScenePresence(delegate(ScenePresence presence) | 7682 | World.ForEachRootScenePresence(delegate(ScenePresence presence) |
7693 | { | 7683 | { |
7694 | if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID)) | 7684 | if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID)) |
7695 | avatarCount++; | 7685 | avatarCount++; |
7696 | }); | 7686 | }); |
7697 | 7687 | ||
7698 | return m_host.ParentGroup.PrimCount + avatarCount; | 7688 | return m_host.ParentGroup.PrimCount + avatarCount; |