aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs17
1 files changed, 17 insertions, 0 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 285d4a2..5e8143c 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -95,6 +95,8 @@ public abstract class BSPhysObject : PhysicsActor
95 SubscribedEventsMs = 0; 95 SubscribedEventsMs = 0;
96 CollidingStep = 0; 96 CollidingStep = 0;
97 CollidingGroundStep = 0; 97 CollidingGroundStep = 0;
98 CollisionAccumulation = 0;
99 CollisionScore = 0;
98 } 100 }
99 101
100 // Tell the object to clean up. 102 // Tell the object to clean up.
@@ -239,6 +241,9 @@ public abstract class BSPhysObject : PhysicsActor
239 // The collision flags we think are set in Bullet 241 // The collision flags we think are set in Bullet
240 protected CollisionFlags CurrentCollisionFlags { get; set; } 242 protected CollisionFlags CurrentCollisionFlags { get; set; }
241 243
244 // Count of collisions for this object
245 protected long CollisionAccumulation { get; set; }
246
242 public override bool IsColliding { 247 public override bool IsColliding {
243 get { return (CollidingStep == PhysicsScene.SimulationStep); } 248 get { return (CollidingStep == PhysicsScene.SimulationStep); }
244 set { 249 set {
@@ -300,6 +305,8 @@ public abstract class BSPhysObject : PhysicsActor
300 return ret; 305 return ret;
301 } 306 }
302 307
308 CollisionAccumulation++;
309
303 // if someone has subscribed for collision events.... 310 // if someone has subscribed for collision events....
304 if (SubscribedEvents()) { 311 if (SubscribedEvents()) {
305 CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); 312 CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth));
@@ -386,6 +393,16 @@ public abstract class BSPhysObject : PhysicsActor
386 public override bool SubscribedEvents() { 393 public override bool SubscribedEvents() {
387 return (SubscribedEventsMs > 0); 394 return (SubscribedEventsMs > 0);
388 } 395 }
396 // Because 'CollisionScore' is calls many times while sorting it should not be recomputed
397 // each time called. So this is built to be light weight for each collision and to do
398 // all the processing when the user asks for the info.
399 public void ComputeCollisionScore()
400 {
401 // Scale the collision count by the time since the last collision
402 long timeAgo = PhysicsScene.SimulationStep - CollidingStep + 1;
403 CollisionScore = CollisionAccumulation / timeAgo;
404 }
405 public override float CollisionScore { get; set; }
389 406
390 #endregion // Collisions 407 #endregion // Collisions
391 408