From 6ac9c9c97277e510cbe7eb908f3cf7883a01c1c3 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 3 Apr 2014 01:14:39 +0100 Subject: refactor: Use m_sittingAvatars to maintain the list of sitting avatars instead of two independent structures that do exactly the same thing m_sittingAvatars code also already properly handles locking to avoid races. --- .../Region/Framework/Scenes/SceneObjectGroup.cs | 54 +++------------------- 1 file changed, 6 insertions(+), 48 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 7ede725..529bc9f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -121,7 +121,6 @@ namespace OpenSim.Region.Framework.Scenes private bool m_hasGroupChanged = false; private long timeFirstChanged; private long timeLastChanged; - private List m_linkedAvatars = new List(); /// /// This indicates whether the object has changed such that it needs to be repersisted to permenant storage @@ -484,7 +483,7 @@ namespace OpenSim.Region.Framework.Scenes m_rootPart.KeyframeMotion.StartCrossingCheck(); bool canCross = true; - foreach (ScenePresence av in m_linkedAvatars) + foreach (ScenePresence av in GetSittingAvatars()) { // We need to cross these agents. First, let's find // out if any of them can't cross for some reason. @@ -511,7 +510,7 @@ namespace OpenSim.Region.Framework.Scenes List avsToCross = new List(); - foreach (ScenePresence av in m_linkedAvatars) + foreach (ScenePresence av in GetSittingAvatars()) { avtocrossInfo avinfo = new avtocrossInfo(); SceneObjectPart parentPart = m_scene.GetSceneObjectPart(av.ParentID); @@ -838,7 +837,7 @@ namespace OpenSim.Region.Framework.Scenes /// No avatar should appear more than once in this list. /// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart. /// - protected internal List m_sittingAvatars = new List(); + protected internal List m_sittingAvatars = new List(); #endregion @@ -1281,46 +1280,6 @@ namespace OpenSim.Region.Framework.Scenes part.ParentID = m_rootPart.LocalId; part.ClearUndoState(); } - /// - /// Add the avatar to this linkset (avatar is sat). - /// - /// - public void AddAvatar(UUID agentID) - { - ScenePresence presence; - if (m_scene.TryGetScenePresence(agentID, out presence)) - { - if (!m_linkedAvatars.Contains(presence)) - { - m_linkedAvatars.Add(presence); - } - } - } - - /// - /// Delete the avatar from this linkset (avatar is unsat). - /// - /// - public void DeleteAvatar(UUID agentID) - { - ScenePresence presence; - if (m_scene.TryGetScenePresence(agentID, out presence)) - { - if (m_linkedAvatars.Contains(presence)) - { - m_linkedAvatars.Remove(presence); - } - } - } - - /// - /// Returns the list of linked presences (avatars sat on this group) - /// - /// - public List GetLinkedAvatars() - { - return m_linkedAvatars; - } public ushort GetTimeDilation() { @@ -1714,8 +1673,7 @@ namespace OpenSim.Region.Framework.Scenes dupe.Backup = false; dupe.m_parts = new MapAndArray(); - dupe.m_sittingAvatars = new List(); - dupe.m_linkedAvatars = new List(); + dupe.m_sittingAvatars = new List(); dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; @@ -3833,10 +3791,10 @@ namespace OpenSim.Region.Framework.Scenes /// down after it move one place down the list. /// /// A list of the sitting avatars. Returns an empty list if there are no sitting avatars. - public List GetSittingAvatars() + public List GetSittingAvatars() { lock (m_sittingAvatars) - return new List(m_sittingAvatars); + return new List(m_sittingAvatars); } /// -- cgit v1.1