diff options
author | UbitUmarov | 2016-08-22 20:28:15 +0100 |
---|---|---|
committer | UbitUmarov | 2016-08-22 20:28:15 +0100 |
commit | 133fce98e79eced53bb68adc73749adf176cfccd (patch) | |
tree | d038c524f3c50e338baca67d2ace14dd740128ea /OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs | |
parent | try to make mono happy (diff) | |
download | opensim-SC_OLD-133fce98e79eced53bb68adc73749adf176cfccd.zip opensim-SC_OLD-133fce98e79eced53bb68adc73749adf176cfccd.tar.gz opensim-SC_OLD-133fce98e79eced53bb68adc73749adf176cfccd.tar.bz2 opensim-SC_OLD-133fce98e79eced53bb68adc73749adf176cfccd.tar.xz |
change ODEs topcolliders code ( still bad), plus a few memory leaks
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs index 623e6be..fc08819 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs | |||
@@ -30,6 +30,7 @@ | |||
30 | 30 | ||
31 | using System; | 31 | using System; |
32 | using System.Collections.Generic; | 32 | using System.Collections.Generic; |
33 | using System.Linq; | ||
33 | using System.Reflection; | 34 | using System.Reflection; |
34 | using System.Runtime.InteropServices; | 35 | using System.Runtime.InteropServices; |
35 | using System.Threading; | 36 | using System.Threading; |
@@ -803,14 +804,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde | |||
803 | return; | 804 | return; |
804 | } | 805 | } |
805 | 806 | ||
806 | // update actors collision score | ||
807 | if (p1.CollisionScore >= float.MaxValue - count) | ||
808 | p1.CollisionScore = 0; | ||
809 | p1.CollisionScore += count; | ||
810 | |||
811 | if (p2.CollisionScore >= float.MaxValue - count) | ||
812 | p2.CollisionScore = 0; | ||
813 | p2.CollisionScore += count; | ||
814 | 807 | ||
815 | // get first contact | 808 | // get first contact |
816 | d.ContactGeom curContact = new d.ContactGeom(); | 809 | d.ContactGeom curContact = new d.ContactGeom(); |
@@ -1056,6 +1049,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde | |||
1056 | { | 1049 | { |
1057 | uint obj2LocalID = 0; | 1050 | uint obj2LocalID = 0; |
1058 | 1051 | ||
1052 | // update actors collision score | ||
1053 | if (p1.CollisionScore < float.MaxValue) | ||
1054 | p1.CollisionScore += 1.0f; | ||
1055 | if (p2.CollisionScore < float.MaxValue) | ||
1056 | p2.CollisionScore += 1.0f; | ||
1057 | |||
1059 | bool p1events = p1.SubscribedEvents(); | 1058 | bool p1events = p1.SubscribedEvents(); |
1060 | bool p2events = p2.SubscribedEvents(); | 1059 | bool p2events = p2.SubscribedEvents(); |
1061 | 1060 | ||
@@ -2569,27 +2568,22 @@ namespace OpenSim.Region.PhysicsModule.ubOde | |||
2569 | } | 2568 | } |
2570 | } | 2569 | } |
2571 | 2570 | ||
2571 | private int compareByCollisionsDesc(OdePrim A, OdePrim B) | ||
2572 | { | ||
2573 | return -A.CollisionScore.CompareTo(B.CollisionScore); | ||
2574 | } | ||
2575 | |||
2572 | public override Dictionary<uint, float> GetTopColliders() | 2576 | public override Dictionary<uint, float> GetTopColliders() |
2573 | { | 2577 | { |
2574 | Dictionary<uint, float> returncolliders = new Dictionary<uint, float>(); | 2578 | Dictionary<uint, float> topColliders; |
2575 | int cnt = 0; | 2579 | List<OdePrim> orderedPrims; |
2576 | lock (_prims) | 2580 | lock (_activeprims) |
2577 | { | 2581 | orderedPrims = new List<OdePrim>(_activeprims); |
2578 | foreach (OdePrim prm in _prims.Values) | 2582 | |
2579 | { | 2583 | orderedPrims.Sort(compareByCollisionsDesc); |
2580 | if (prm.CollisionScore > 0) | 2584 | topColliders = orderedPrims.Take(25).ToDictionary(p => p.LocalID, p => p.CollisionScore); |
2581 | { | 2585 | |
2582 | returncolliders.Add(prm.LocalID, prm.CollisionScore); | 2586 | return topColliders; |
2583 | cnt++; | ||
2584 | prm.CollisionScore = 0f; | ||
2585 | if (cnt > 25) | ||
2586 | { | ||
2587 | break; | ||
2588 | } | ||
2589 | } | ||
2590 | } | ||
2591 | } | ||
2592 | return returncolliders; | ||
2593 | } | 2587 | } |
2594 | 2588 | ||
2595 | public override bool SupportsRayCast() | 2589 | public override bool SupportsRayCast() |