diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 1 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 30 |
3 files changed, 34 insertions, 2 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 5024b5d..89162a0 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | |||
@@ -570,6 +570,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
570 | public override float CollisionScore | 570 | public override float CollisionScore |
571 | { | 571 | { |
572 | get { return 0f; } | 572 | get { return 0f; } |
573 | set { } | ||
573 | } | 574 | } |
574 | 575 | ||
575 | public override bool Kinematic | 576 | public override bool Kinematic |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 4c8eb20..6ade638 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -124,7 +124,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
124 | private bool m_throttleUpdates = false; | 124 | private bool m_throttleUpdates = false; |
125 | private int throttleCounter = 0; | 125 | private int throttleCounter = 0; |
126 | public int m_interpenetrationcount = 0; | 126 | public int m_interpenetrationcount = 0; |
127 | public int m_collisionscore = 0; | 127 | public float m_collisionscore = 0; |
128 | public int m_roundsUnderMotionThreshold = 0; | 128 | public int m_roundsUnderMotionThreshold = 0; |
129 | private int m_crossingfailures = 0; | 129 | private int m_crossingfailures = 0; |
130 | 130 | ||
@@ -243,7 +243,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
243 | // is physical or the object is modified somehow *IN THE FUTURE* | 243 | // is physical or the object is modified somehow *IN THE FUTURE* |
244 | // without this, if an avatar selects prim, they can walk right | 244 | // without this, if an avatar selects prim, they can walk right |
245 | // through it while it's selected | 245 | // through it while it's selected |
246 | 246 | m_collisionscore = 0; | |
247 | if ((m_isphysical && !_zeroFlag) || !value) | 247 | if ((m_isphysical && !_zeroFlag) || !value) |
248 | { | 248 | { |
249 | m_taintselected = value; | 249 | m_taintselected = value; |
@@ -1783,6 +1783,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1783 | public override float CollisionScore | 1783 | public override float CollisionScore |
1784 | { | 1784 | { |
1785 | get { return m_collisionscore; } | 1785 | get { return m_collisionscore; } |
1786 | set { m_collisionscore = value; } | ||
1786 | } | 1787 | } |
1787 | 1788 | ||
1788 | public override bool Kinematic | 1789 | public override bool Kinematic |
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index fef0c4e..e43a1ac 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |||
@@ -555,6 +555,13 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
555 | } | 555 | } |
556 | 556 | ||
557 | float max_collision_depth = 0f; | 557 | float max_collision_depth = 0f; |
558 | if (p1.CollisionScore + count >= float.MaxValue) | ||
559 | p1.CollisionScore = 0; | ||
560 | p1.CollisionScore += count; | ||
561 | |||
562 | if (p2.CollisionScore + count >= float.MaxValue) | ||
563 | p2.CollisionScore = 0; | ||
564 | p2.CollisionScore += count; | ||
558 | 565 | ||
559 | for (int i = 0; i < count; i++) | 566 | for (int i = 0; i < count; i++) |
560 | { | 567 | { |
@@ -585,6 +592,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
585 | p2.CollidingGround = true; | 592 | p2.CollidingGround = true; |
586 | break; | 593 | break; |
587 | } | 594 | } |
595 | |||
588 | 596 | ||
589 | // we don't want prim or avatar to explode | 597 | // we don't want prim or avatar to explode |
590 | 598 | ||
@@ -2162,5 +2170,27 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2162 | //d.CloseODE(); | 2170 | //d.CloseODE(); |
2163 | } | 2171 | } |
2164 | } | 2172 | } |
2173 | public override Dictionary<uint, float> GetTopColliders() | ||
2174 | { | ||
2175 | Dictionary<uint, float> returncolliders = new Dictionary<uint, float>(); | ||
2176 | int cnt = 0; | ||
2177 | lock (_prims) | ||
2178 | { | ||
2179 | foreach (OdePrim prm in _prims) | ||
2180 | { | ||
2181 | if (prm.CollisionScore > 0) | ||
2182 | { | ||
2183 | returncolliders.Add(prm.m_localID, prm.CollisionScore); | ||
2184 | cnt++; | ||
2185 | prm.CollisionScore = 0f; | ||
2186 | if (cnt > 25) | ||
2187 | { | ||
2188 | break; | ||
2189 | } | ||
2190 | } | ||
2191 | } | ||
2192 | } | ||
2193 | return returncolliders; | ||
2194 | } | ||
2165 | } | 2195 | } |
2166 | } | 2196 | } |