diff options
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index 43d852b..fe2b2b2 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs | |||
@@ -188,11 +188,20 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
188 | private d.NearCallback nearCallback; | 188 | private d.NearCallback nearCallback; |
189 | public d.TriCallback triCallback; | 189 | public d.TriCallback triCallback; |
190 | public d.TriArrayCallback triArrayCallback; | 190 | public d.TriArrayCallback triArrayCallback; |
191 | |||
191 | private readonly HashSet<OdeCharacter> _characters = new HashSet<OdeCharacter>(); | 192 | private readonly HashSet<OdeCharacter> _characters = new HashSet<OdeCharacter>(); |
192 | private readonly HashSet<OdePrim> _prims = new HashSet<OdePrim>(); | 193 | private readonly HashSet<OdePrim> _prims = new HashSet<OdePrim>(); |
193 | private readonly HashSet<OdePrim> _activeprims = new HashSet<OdePrim>(); | 194 | private readonly HashSet<OdePrim> _activeprims = new HashSet<OdePrim>(); |
194 | 195 | ||
195 | /// <summary> | 196 | /// <summary> |
197 | /// Defects list to remove characters that no longer have finite positions due to some other bug. | ||
198 | /// </summary> | ||
199 | /// <remarks> | ||
200 | /// Used repeatedly in Simulate() but initialized once here. | ||
201 | /// </remarks> | ||
202 | private readonly List<OdeCharacter> defects = new List<OdeCharacter>(); | ||
203 | |||
204 | /// <summary> | ||
196 | /// Used to lock on manipulation of _taintedPrimL and _taintedPrimH | 205 | /// Used to lock on manipulation of _taintedPrimL and _taintedPrimH |
197 | /// </summary> | 206 | /// </summary> |
198 | private readonly Object _taintedPrimLock = new Object(); | 207 | private readonly Object _taintedPrimLock = new Object(); |
@@ -2773,18 +2782,18 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name); | |||
2773 | // Move characters | 2782 | // Move characters |
2774 | lock (_characters) | 2783 | lock (_characters) |
2775 | { | 2784 | { |
2776 | List<OdeCharacter> defects = new List<OdeCharacter>(); | ||
2777 | foreach (OdeCharacter actor in _characters) | 2785 | foreach (OdeCharacter actor in _characters) |
2778 | { | 2786 | { |
2779 | if (actor != null) | 2787 | if (actor != null) |
2780 | actor.Move(defects); | 2788 | actor.Move(defects); |
2781 | } | 2789 | } |
2790 | |||
2782 | if (0 != defects.Count) | 2791 | if (0 != defects.Count) |
2783 | { | 2792 | { |
2784 | foreach (OdeCharacter defect in defects) | 2793 | foreach (OdeCharacter defect in defects) |
2785 | { | ||
2786 | RemoveCharacter(defect); | 2794 | RemoveCharacter(defect); |
2787 | } | 2795 | |
2796 | defects.Clear(); | ||
2788 | } | 2797 | } |
2789 | } | 2798 | } |
2790 | 2799 | ||