diff options
author | Robert Adams | 2013-01-28 15:11:50 -0800 |
---|---|---|
committer | Robert Adams | 2013-01-28 15:11:50 -0800 |
commit | e9aff0a91d6a4d02498ce45759389bb09b34fcbc (patch) | |
tree | 7379562cbd8825413be1db2bc9a7f4a501e58207 /OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs | |
parent | BulletSim: rename 'uint' to 'UInt32' to make clear the type that is passed to... (diff) | |
download | opensim-SC-e9aff0a91d6a4d02498ce45759389bb09b34fcbc.zip opensim-SC-e9aff0a91d6a4d02498ce45759389bb09b34fcbc.tar.gz opensim-SC-e9aff0a91d6a4d02498ce45759389bb09b34fcbc.tar.bz2 opensim-SC-e9aff0a91d6a4d02498ce45759389bb09b34fcbc.tar.xz |
BulletSim: do not zero an avatar's standing velocity if it is standing
on a moving object.
Rearrange pre/post action subscription code to put more in locks.
Add meshmerizer params to BulletSimTestUtil scene creation (and fix line endings).
Rebuilt version of DLLs and SOs with cleaned up code and no profiling for sure.
Diffstat (limited to '')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs index 5e8143c..a113530 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs | |||
@@ -96,6 +96,7 @@ public abstract class BSPhysObject : PhysicsActor | |||
96 | CollidingStep = 0; | 96 | CollidingStep = 0; |
97 | CollidingGroundStep = 0; | 97 | CollidingGroundStep = 0; |
98 | CollisionAccumulation = 0; | 98 | CollisionAccumulation = 0; |
99 | ColliderIsMoving = false; | ||
99 | CollisionScore = 0; | 100 | CollisionScore = 0; |
100 | } | 101 | } |
101 | 102 | ||
@@ -177,13 +178,14 @@ public abstract class BSPhysObject : PhysicsActor | |||
177 | public abstract OMV.Vector3 RawPosition { get; set; } | 178 | public abstract OMV.Vector3 RawPosition { get; set; } |
178 | public abstract OMV.Vector3 ForcePosition { get; set; } | 179 | public abstract OMV.Vector3 ForcePosition { get; set; } |
179 | 180 | ||
180 | // Position is what the simulator thinks the positions of the prim is. | 181 | // 'Position' and 'Orientation' is what the simulator thinks the positions of the prim is. |
181 | // Because Bullet needs the zero coordinate to be the center of mass of the linkset, | 182 | // Because Bullet needs the zero coordinate to be the center of mass of the linkset, |
182 | // sometimes it is necessary to displace the position the physics engine thinks | 183 | // sometimes it is necessary to displace the position the physics engine thinks |
183 | // the position is. PositionDisplacement must be added and removed from the | 184 | // the position is. PositionDisplacement must be added and removed from the |
184 | // position as the simulator position is stored and fetched from the physics | 185 | // position as the simulator position is stored and fetched from the physics |
185 | // engine. | 186 | // engine. Similar to OrientationDisplacement. |
186 | public virtual OMV.Vector3 PositionDisplacement { get; set; } | 187 | public virtual OMV.Vector3 PositionDisplacement { get; set; } |
188 | public virtual OMV.Quaternion OrientationDisplacement { get; set; } | ||
187 | 189 | ||
188 | public abstract OMV.Quaternion RawOrientation { get; set; } | 190 | public abstract OMV.Quaternion RawOrientation { get; set; } |
189 | public abstract OMV.Quaternion ForceOrientation { get; set; } | 191 | public abstract OMV.Quaternion ForceOrientation { get; set; } |
@@ -240,6 +242,9 @@ public abstract class BSPhysObject : PhysicsActor | |||
240 | protected long CollidingObjectStep { get; set; } | 242 | protected long CollidingObjectStep { get; set; } |
241 | // The collision flags we think are set in Bullet | 243 | // The collision flags we think are set in Bullet |
242 | protected CollisionFlags CurrentCollisionFlags { get; set; } | 244 | protected CollisionFlags CurrentCollisionFlags { get; set; } |
245 | // On a collision, check the collider and remember if the last collider was moving | ||
246 | // Used to modify the standing of avatars (avatars on stationary things stand still) | ||
247 | protected bool ColliderIsMoving; | ||
243 | 248 | ||
244 | // Count of collisions for this object | 249 | // Count of collisions for this object |
245 | protected long CollisionAccumulation { get; set; } | 250 | protected long CollisionAccumulation { get; set; } |
@@ -307,7 +312,10 @@ public abstract class BSPhysObject : PhysicsActor | |||
307 | 312 | ||
308 | CollisionAccumulation++; | 313 | CollisionAccumulation++; |
309 | 314 | ||
310 | // if someone has subscribed for collision events.... | 315 | // For movement tests, remember if we are colliding with an object that is moving. |
316 | ColliderIsMoving = collidee != null ? collidee.RawVelocity != OMV.Vector3.Zero : false; | ||
317 | |||
318 | // If someone has subscribed for collision events log the collision so it will be reported up | ||
311 | if (SubscribedEvents()) { | 319 | if (SubscribedEvents()) { |
312 | CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); | 320 | CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); |
313 | DetailLog("{0},{1}.Collison.AddCollider,call,with={2},point={3},normal={4},depth={5}", | 321 | DetailLog("{0},{1}.Collison.AddCollider,call,with={2},point={3},normal={4},depth={5}", |
@@ -393,12 +401,13 @@ public abstract class BSPhysObject : PhysicsActor | |||
393 | public override bool SubscribedEvents() { | 401 | public override bool SubscribedEvents() { |
394 | return (SubscribedEventsMs > 0); | 402 | return (SubscribedEventsMs > 0); |
395 | } | 403 | } |
396 | // Because 'CollisionScore' is calls many times while sorting it should not be recomputed | 404 | // Because 'CollisionScore' is called 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 | 405 | // 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. | 406 | // all the processing when the user asks for the info. |
399 | public void ComputeCollisionScore() | 407 | public void ComputeCollisionScore() |
400 | { | 408 | { |
401 | // Scale the collision count by the time since the last collision | 409 | // Scale the collision count by the time since the last collision. |
410 | // The "+1" prevents dividing by zero. | ||
402 | long timeAgo = PhysicsScene.SimulationStep - CollidingStep + 1; | 411 | long timeAgo = PhysicsScene.SimulationStep - CollidingStep + 1; |
403 | CollisionScore = CollisionAccumulation / timeAgo; | 412 | CollisionScore = CollisionAccumulation / timeAgo; |
404 | } | 413 | } |
@@ -423,13 +432,15 @@ public abstract class BSPhysObject : PhysicsActor | |||
423 | UnRegisterPreStepAction(op, id); | 432 | UnRegisterPreStepAction(op, id); |
424 | 433 | ||
425 | RegisteredPrestepActions[identifier] = actn; | 434 | RegisteredPrestepActions[identifier] = actn; |
435 | |||
436 | PhysicsScene.BeforeStep += actn; | ||
426 | } | 437 | } |
427 | PhysicsScene.BeforeStep += actn; | ||
428 | DetailLog("{0},BSPhysObject.RegisterPreStepAction,id={1}", LocalID, identifier); | 438 | DetailLog("{0},BSPhysObject.RegisterPreStepAction,id={1}", LocalID, identifier); |
429 | } | 439 | } |
430 | 440 | ||
431 | // Unregister a pre step action. Safe to call if the action has not been registered. | 441 | // Unregister a pre step action. Safe to call if the action has not been registered. |
432 | protected void UnRegisterPreStepAction(string op, uint id) | 442 | // Returns 'true' if an action was actually removed |
443 | protected bool UnRegisterPreStepAction(string op, uint id) | ||
433 | { | 444 | { |
434 | string identifier = op + "-" + id.ToString(); | 445 | string identifier = op + "-" + id.ToString(); |
435 | bool removed = false; | 446 | bool removed = false; |
@@ -443,6 +454,7 @@ public abstract class BSPhysObject : PhysicsActor | |||
443 | } | 454 | } |
444 | } | 455 | } |
445 | DetailLog("{0},BSPhysObject.UnRegisterPreStepAction,id={1},removed={2}", LocalID, identifier, removed); | 456 | DetailLog("{0},BSPhysObject.UnRegisterPreStepAction,id={1},removed={2}", LocalID, identifier, removed); |
457 | return removed; | ||
446 | } | 458 | } |
447 | 459 | ||
448 | protected void UnRegisterAllPreStepActions() | 460 | protected void UnRegisterAllPreStepActions() |
@@ -468,13 +480,15 @@ public abstract class BSPhysObject : PhysicsActor | |||
468 | UnRegisterPostStepAction(op, id); | 480 | UnRegisterPostStepAction(op, id); |
469 | 481 | ||
470 | RegisteredPoststepActions[identifier] = actn; | 482 | RegisteredPoststepActions[identifier] = actn; |
483 | |||
484 | PhysicsScene.AfterStep += actn; | ||
471 | } | 485 | } |
472 | PhysicsScene.AfterStep += actn; | ||
473 | DetailLog("{0},BSPhysObject.RegisterPostStepAction,id={1}", LocalID, identifier); | 486 | DetailLog("{0},BSPhysObject.RegisterPostStepAction,id={1}", LocalID, identifier); |
474 | } | 487 | } |
475 | 488 | ||
476 | // Unregister a pre step action. Safe to call if the action has not been registered. | 489 | // Unregister a pre step action. Safe to call if the action has not been registered. |
477 | protected void UnRegisterPostStepAction(string op, uint id) | 490 | // Returns 'true' if an action was actually removed. |
491 | protected bool UnRegisterPostStepAction(string op, uint id) | ||
478 | { | 492 | { |
479 | string identifier = op + "-" + id.ToString(); | 493 | string identifier = op + "-" + id.ToString(); |
480 | bool removed = false; | 494 | bool removed = false; |
@@ -488,6 +502,7 @@ public abstract class BSPhysObject : PhysicsActor | |||
488 | } | 502 | } |
489 | } | 503 | } |
490 | DetailLog("{0},BSPhysObject.UnRegisterPostStepAction,id={1},removed={2}", LocalID, identifier, removed); | 504 | DetailLog("{0},BSPhysObject.UnRegisterPostStepAction,id={1},removed={2}", LocalID, identifier, removed); |
505 | return removed; | ||
491 | } | 506 | } |
492 | 507 | ||
493 | protected void UnRegisterAllPostStepActions() | 508 | protected void UnRegisterAllPostStepActions() |