diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 139 |
1 files changed, 65 insertions, 74 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 5f3f0d1..826261c 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |||
@@ -111,10 +111,7 @@ public sealed class BSPrim : BSPhysObject | |||
111 | 111 | ||
112 | _mass = CalculateMass(); | 112 | _mass = CalculateMass(); |
113 | 113 | ||
114 | // No body or shape yet | 114 | // Cause linkset variables to be initialized (like mass) |
115 | PhysBody = new BulletBody(LocalID); | ||
116 | PhysShape = new BulletShape(); | ||
117 | |||
118 | Linkset.Refresh(this); | 115 | Linkset.Refresh(this); |
119 | 116 | ||
120 | DetailLog("{0},BSPrim.constructor,call", LocalID); | 117 | DetailLog("{0},BSPrim.constructor,call", LocalID); |
@@ -123,7 +120,7 @@ public sealed class BSPrim : BSPhysObject | |||
123 | { | 120 | { |
124 | CreateGeomAndObject(true); | 121 | CreateGeomAndObject(true); |
125 | 122 | ||
126 | CurrentCollisionFlags = BulletSimAPI.GetCollisionFlags2(PhysBody.ptr); | 123 | CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody); |
127 | }); | 124 | }); |
128 | } | 125 | } |
129 | 126 | ||
@@ -256,7 +253,7 @@ public sealed class BSPrim : BSPhysObject | |||
256 | PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ZeroMotion", delegate() | 253 | PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ZeroMotion", delegate() |
257 | { | 254 | { |
258 | if (PhysBody.HasPhysicalBody) | 255 | if (PhysBody.HasPhysicalBody) |
259 | BulletSimAPI.ClearAllForces2(PhysBody.ptr); | 256 | PhysicsScene.PE.ClearAllForces(PhysBody); |
260 | }); | 257 | }); |
261 | } | 258 | } |
262 | public override void ZeroAngularMotion(bool inTaintTime) | 259 | public override void ZeroAngularMotion(bool inTaintTime) |
@@ -268,8 +265,8 @@ public sealed class BSPrim : BSPhysObject | |||
268 | // DetailLog("{0},BSPrim.ZeroAngularMotion,call,rotVel={1}", LocalID, _rotationalVelocity); | 265 | // DetailLog("{0},BSPrim.ZeroAngularMotion,call,rotVel={1}", LocalID, _rotationalVelocity); |
269 | if (PhysBody.HasPhysicalBody) | 266 | if (PhysBody.HasPhysicalBody) |
270 | { | 267 | { |
271 | BulletSimAPI.SetInterpolationAngularVelocity2(PhysBody.ptr, _rotationalVelocity); | 268 | PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity); |
272 | BulletSimAPI.SetAngularVelocity2(PhysBody.ptr, _rotationalVelocity); | 269 | PhysicsScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity); |
273 | } | 270 | } |
274 | }); | 271 | }); |
275 | } | 272 | } |
@@ -295,7 +292,7 @@ public sealed class BSPrim : BSPhysObject | |||
295 | */ | 292 | */ |
296 | 293 | ||
297 | // don't do the GetObjectPosition for root elements because this function is called a zillion times. | 294 | // don't do the GetObjectPosition for root elements because this function is called a zillion times. |
298 | // _position = BulletSimAPI.GetObjectPosition2(PhysicsScene.World.ptr, BSBody.ptr); | 295 | // _position = PhysicsScene.PE.GetObjectPosition2(PhysicsScene.World, BSBody); |
299 | return _position; | 296 | return _position; |
300 | } | 297 | } |
301 | set { | 298 | set { |
@@ -303,7 +300,7 @@ public sealed class BSPrim : BSPhysObject | |||
303 | // All positions are given in world positions. | 300 | // All positions are given in world positions. |
304 | if (_position == value) | 301 | if (_position == value) |
305 | { | 302 | { |
306 | DetailLog("{0},BSPrim.setPosition,taint,positionNotChanging,pos={1},orient={2}", LocalID, _position, _orientation); | 303 | DetailLog("{0},BSPrim.setPosition,call,positionNotChanging,pos={1},orient={2}", LocalID, _position, _orientation); |
307 | return; | 304 | return; |
308 | } | 305 | } |
309 | _position = value; | 306 | _position = value; |
@@ -321,14 +318,14 @@ public sealed class BSPrim : BSPhysObject | |||
321 | } | 318 | } |
322 | public override OMV.Vector3 ForcePosition { | 319 | public override OMV.Vector3 ForcePosition { |
323 | get { | 320 | get { |
324 | _position = BulletSimAPI.GetPosition2(PhysBody.ptr); | 321 | _position = PhysicsScene.PE.GetPosition(PhysBody); |
325 | return _position; | 322 | return _position; |
326 | } | 323 | } |
327 | set { | 324 | set { |
328 | _position = value; | 325 | _position = value; |
329 | if (PhysBody.HasPhysicalBody) | 326 | if (PhysBody.HasPhysicalBody) |
330 | { | 327 | { |
331 | BulletSimAPI.SetTranslation2(PhysBody.ptr, _position, _orientation); | 328 | PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); |
332 | ActivateIfPhysical(false); | 329 | ActivateIfPhysical(false); |
333 | } | 330 | } |
334 | } | 331 | } |
@@ -408,10 +405,10 @@ public sealed class BSPrim : BSPhysObject | |||
408 | { | 405 | { |
409 | if (IsStatic) | 406 | if (IsStatic) |
410 | { | 407 | { |
411 | BulletSimAPI.SetGravity2(PhysBody.ptr, PhysicsScene.DefaultGravity); | 408 | PhysicsScene.PE.SetGravity(PhysBody, PhysicsScene.DefaultGravity); |
412 | Inertia = OMV.Vector3.Zero; | 409 | Inertia = OMV.Vector3.Zero; |
413 | BulletSimAPI.SetMassProps2(PhysBody.ptr, 0f, Inertia); | 410 | PhysicsScene.PE.SetMassProps(PhysBody, 0f, Inertia); |
414 | BulletSimAPI.UpdateInertiaTensor2(PhysBody.ptr); | 411 | PhysicsScene.PE.UpdateInertiaTensor(PhysBody); |
415 | } | 412 | } |
416 | else | 413 | else |
417 | { | 414 | { |
@@ -422,18 +419,18 @@ public sealed class BSPrim : BSPhysObject | |||
422 | // Changing interesting properties doesn't change proxy and collision cache | 419 | // Changing interesting properties doesn't change proxy and collision cache |
423 | // information. The Bullet solution is to re-add the object to the world | 420 | // information. The Bullet solution is to re-add the object to the world |
424 | // after parameters are changed. | 421 | // after parameters are changed. |
425 | BulletSimAPI.RemoveObjectFromWorld2(PhysicsScene.World.ptr, PhysBody.ptr); | 422 | PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, PhysBody); |
426 | } | 423 | } |
427 | 424 | ||
428 | // The computation of mass props requires gravity to be set on the object. | 425 | // The computation of mass props requires gravity to be set on the object. |
429 | BulletSimAPI.SetGravity2(PhysBody.ptr, grav); | 426 | PhysicsScene.PE.SetGravity(PhysBody, grav); |
430 | 427 | ||
431 | Inertia = BulletSimAPI.CalculateLocalInertia2(PhysShape.ptr, physMass); | 428 | Inertia = PhysicsScene.PE.CalculateLocalInertia(PhysShape, physMass); |
432 | BulletSimAPI.SetMassProps2(PhysBody.ptr, physMass, Inertia); | 429 | PhysicsScene.PE.SetMassProps(PhysBody, physMass, Inertia); |
433 | BulletSimAPI.UpdateInertiaTensor2(PhysBody.ptr); | 430 | PhysicsScene.PE.UpdateInertiaTensor(PhysBody); |
434 | 431 | ||
435 | // center of mass is at the zero of the object | 432 | // center of mass is at the zero of the object |
436 | // DEBUG DEBUG BulletSimAPI.SetCenterOfMassByPosRot2(PhysBody.ptr, ForcePosition, ForceOrientation); | 433 | // DEBUG DEBUG PhysicsScene.PE.SetCenterOfMassByPosRot(PhysBody, ForcePosition, ForceOrientation); |
437 | DetailLog("{0},BSPrim.UpdateMassProperties,mass={1},localInertia={2},grav={3},inWorld={4}", LocalID, physMass, Inertia, grav, inWorld); | 434 | DetailLog("{0},BSPrim.UpdateMassProperties,mass={1},localInertia={2},grav={3},inWorld={4}", LocalID, physMass, Inertia, grav, inWorld); |
438 | 435 | ||
439 | if (inWorld) | 436 | if (inWorld) |
@@ -443,7 +440,7 @@ public sealed class BSPrim : BSPhysObject | |||
443 | 440 | ||
444 | // Must set gravity after it has been added to the world because, for unknown reasons, | 441 | // Must set gravity after it has been added to the world because, for unknown reasons, |
445 | // adding the object resets the object's gravity to world gravity | 442 | // adding the object resets the object's gravity to world gravity |
446 | BulletSimAPI.SetGravity2(PhysBody.ptr, grav); | 443 | PhysicsScene.PE.SetGravity(PhysBody, grav); |
447 | 444 | ||
448 | } | 445 | } |
449 | } | 446 | } |
@@ -486,7 +483,7 @@ public sealed class BSPrim : BSPhysObject | |||
486 | DetailLog("{0},BSPrim.setForce,preStep,force={1}", LocalID, _force); | 483 | DetailLog("{0},BSPrim.setForce,preStep,force={1}", LocalID, _force); |
487 | if (PhysBody.HasPhysicalBody) | 484 | if (PhysBody.HasPhysicalBody) |
488 | { | 485 | { |
489 | BulletSimAPI.ApplyCentralForce2(PhysBody.ptr, _force); | 486 | PhysicsScene.PE.ApplyCentralForce(PhysBody, _force); |
490 | ActivateIfPhysical(false); | 487 | ActivateIfPhysical(false); |
491 | } | 488 | } |
492 | } | 489 | } |
@@ -586,7 +583,7 @@ public sealed class BSPrim : BSPhysObject | |||
586 | _velocity = value; | 583 | _velocity = value; |
587 | if (PhysBody.HasPhysicalBody) | 584 | if (PhysBody.HasPhysicalBody) |
588 | { | 585 | { |
589 | BulletSimAPI.SetLinearVelocity2(PhysBody.ptr, _velocity); | 586 | PhysicsScene.PE.SetLinearVelocity(PhysBody, _velocity); |
590 | ActivateIfPhysical(false); | 587 | ActivateIfPhysical(false); |
591 | } | 588 | } |
592 | } | 589 | } |
@@ -652,9 +649,9 @@ public sealed class BSPrim : BSPhysObject | |||
652 | { | 649 | { |
653 | if (PhysBody.HasPhysicalBody) | 650 | if (PhysBody.HasPhysicalBody) |
654 | { | 651 | { |
655 | // _position = BulletSimAPI.GetObjectPosition2(PhysicsScene.World.ptr, BSBody.ptr); | 652 | // _position = PhysicsScene.PE.GetObjectPosition(PhysicsScene.World, BSBody); |
656 | // DetailLog("{0},BSPrim.setOrientation,taint,pos={1},orient={2}", LocalID, _position, _orientation); | 653 | // DetailLog("{0},BSPrim.setOrientation,taint,pos={1},orient={2}", LocalID, _position, _orientation); |
657 | BulletSimAPI.SetTranslation2(PhysBody.ptr, _position, _orientation); | 654 | PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); |
658 | } | 655 | } |
659 | }); | 656 | }); |
660 | } | 657 | } |
@@ -664,13 +661,13 @@ public sealed class BSPrim : BSPhysObject | |||
664 | { | 661 | { |
665 | get | 662 | get |
666 | { | 663 | { |
667 | _orientation = BulletSimAPI.GetOrientation2(PhysBody.ptr); | 664 | _orientation = PhysicsScene.PE.GetOrientation(PhysBody); |
668 | return _orientation; | 665 | return _orientation; |
669 | } | 666 | } |
670 | set | 667 | set |
671 | { | 668 | { |
672 | _orientation = value; | 669 | _orientation = value; |
673 | BulletSimAPI.SetTranslation2(PhysBody.ptr, _position, _orientation); | 670 | PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); |
674 | } | 671 | } |
675 | } | 672 | } |
676 | public override int PhysicsActorType { | 673 | public override int PhysicsActorType { |
@@ -726,7 +723,7 @@ public sealed class BSPrim : BSPhysObject | |||
726 | 723 | ||
727 | // Mangling all the physical properties requires the object not be in the physical world. | 724 | // Mangling all the physical properties requires the object not be in the physical world. |
728 | // This is a NOOP if the object is not in the world (BulletSim and Bullet ignore objects not found). | 725 | // This is a NOOP if the object is not in the world (BulletSim and Bullet ignore objects not found). |
729 | BulletSimAPI.RemoveObjectFromWorld2(PhysicsScene.World.ptr, PhysBody.ptr); | 726 | PhysicsScene.PE.RemoveObjectFromWorld(PhysicsScene.World, PhysBody); |
730 | 727 | ||
731 | // Set up the object physicalness (does gravity and collisions move this object) | 728 | // Set up the object physicalness (does gravity and collisions move this object) |
732 | MakeDynamic(IsStatic); | 729 | MakeDynamic(IsStatic); |
@@ -743,7 +740,7 @@ public sealed class BSPrim : BSPhysObject | |||
743 | AddObjectToPhysicalWorld(); | 740 | AddObjectToPhysicalWorld(); |
744 | 741 | ||
745 | // Rebuild its shape | 742 | // Rebuild its shape |
746 | BulletSimAPI.UpdateSingleAabb2(PhysicsScene.World.ptr, PhysBody.ptr); | 743 | PhysicsScene.PE.UpdateSingleAabb(PhysicsScene.World, PhysBody); |
747 | 744 | ||
748 | // Recompute any linkset parameters. | 745 | // Recompute any linkset parameters. |
749 | // When going from non-physical to physical, this re-enables the constraints that | 746 | // When going from non-physical to physical, this re-enables the constraints that |
@@ -765,28 +762,28 @@ public sealed class BSPrim : BSPhysObject | |||
765 | if (makeStatic) | 762 | if (makeStatic) |
766 | { | 763 | { |
767 | // Become a Bullet 'static' object type | 764 | // Become a Bullet 'static' object type |
768 | CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_STATIC_OBJECT); | 765 | CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_STATIC_OBJECT); |
769 | // Stop all movement | 766 | // Stop all movement |
770 | ZeroMotion(true); | 767 | ZeroMotion(true); |
771 | 768 | ||
772 | // Set various physical properties so other object interact properly | 769 | // Set various physical properties so other object interact properly |
773 | MaterialAttributes matAttrib = BSMaterials.GetAttributes(Material, false); | 770 | MaterialAttributes matAttrib = BSMaterials.GetAttributes(Material, false); |
774 | BulletSimAPI.SetFriction2(PhysBody.ptr, matAttrib.friction); | 771 | PhysicsScene.PE.SetFriction(PhysBody, matAttrib.friction); |
775 | BulletSimAPI.SetRestitution2(PhysBody.ptr, matAttrib.restitution); | 772 | PhysicsScene.PE.SetRestitution(PhysBody, matAttrib.restitution); |
776 | 773 | ||
777 | // Mass is zero which disables a bunch of physics stuff in Bullet | 774 | // Mass is zero which disables a bunch of physics stuff in Bullet |
778 | UpdatePhysicalMassProperties(0f, false); | 775 | UpdatePhysicalMassProperties(0f, false); |
779 | // Set collision detection parameters | 776 | // Set collision detection parameters |
780 | if (BSParam.CcdMotionThreshold > 0f) | 777 | if (BSParam.CcdMotionThreshold > 0f) |
781 | { | 778 | { |
782 | BulletSimAPI.SetCcdMotionThreshold2(PhysBody.ptr, BSParam.CcdMotionThreshold); | 779 | PhysicsScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold); |
783 | BulletSimAPI.SetCcdSweptSphereRadius2(PhysBody.ptr, BSParam.CcdSweptSphereRadius); | 780 | PhysicsScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius); |
784 | } | 781 | } |
785 | 782 | ||
786 | // The activation state is 'disabled' so Bullet will not try to act on it. | 783 | // The activation state is 'disabled' so Bullet will not try to act on it. |
787 | // BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.DISABLE_SIMULATION); | 784 | // PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.DISABLE_SIMULATION); |
788 | // Start it out sleeping and physical actions could wake it up. | 785 | // Start it out sleeping and physical actions could wake it up. |
789 | BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.ISLAND_SLEEPING); | 786 | PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.ISLAND_SLEEPING); |
790 | 787 | ||
791 | // This collides like a static object | 788 | // This collides like a static object |
792 | PhysBody.collisionType = CollisionType.Static; | 789 | PhysBody.collisionType = CollisionType.Static; |
@@ -797,22 +794,22 @@ public sealed class BSPrim : BSPhysObject | |||
797 | else | 794 | else |
798 | { | 795 | { |
799 | // Not a Bullet static object | 796 | // Not a Bullet static object |
800 | CurrentCollisionFlags = BulletSimAPI.RemoveFromCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_STATIC_OBJECT); | 797 | CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.CF_STATIC_OBJECT); |
801 | 798 | ||
802 | // Set various physical properties so other object interact properly | 799 | // Set various physical properties so other object interact properly |
803 | MaterialAttributes matAttrib = BSMaterials.GetAttributes(Material, true); | 800 | MaterialAttributes matAttrib = BSMaterials.GetAttributes(Material, true); |
804 | BulletSimAPI.SetFriction2(PhysBody.ptr, matAttrib.friction); | 801 | PhysicsScene.PE.SetFriction(PhysBody, matAttrib.friction); |
805 | BulletSimAPI.SetRestitution2(PhysBody.ptr, matAttrib.restitution); | 802 | PhysicsScene.PE.SetRestitution(PhysBody, matAttrib.restitution); |
806 | 803 | ||
807 | // per http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=3382 | 804 | // per http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=3382 |
808 | // Since this can be called multiple times, only zero forces when becoming physical | 805 | // Since this can be called multiple times, only zero forces when becoming physical |
809 | // BulletSimAPI.ClearAllForces2(BSBody.ptr); | 806 | // PhysicsScene.PE.ClearAllForces(BSBody); |
810 | 807 | ||
811 | // For good measure, make sure the transform is set through to the motion state | 808 | // For good measure, make sure the transform is set through to the motion state |
812 | BulletSimAPI.SetTranslation2(PhysBody.ptr, _position, _orientation); | 809 | PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); |
813 | 810 | ||
814 | // Center of mass is at the center of the object | 811 | // Center of mass is at the center of the object |
815 | // DEBUG DEBUG BulletSimAPI.SetCenterOfMassByPosRot2(Linkset.LinksetRoot.PhysBody.ptr, _position, _orientation); | 812 | // DEBUG DEBUG PhysicsScene.PE.SetCenterOfMassByPosRot(Linkset.LinksetRoot.PhysBody, _position, _orientation); |
816 | 813 | ||
817 | // A dynamic object has mass | 814 | // A dynamic object has mass |
818 | UpdatePhysicalMassProperties(RawMass, false); | 815 | UpdatePhysicalMassProperties(RawMass, false); |
@@ -820,22 +817,22 @@ public sealed class BSPrim : BSPhysObject | |||
820 | // Set collision detection parameters | 817 | // Set collision detection parameters |
821 | if (BSParam.CcdMotionThreshold > 0f) | 818 | if (BSParam.CcdMotionThreshold > 0f) |
822 | { | 819 | { |
823 | BulletSimAPI.SetCcdMotionThreshold2(PhysBody.ptr, BSParam.CcdMotionThreshold); | 820 | PhysicsScene.PE.SetCcdMotionThreshold(PhysBody, BSParam.CcdMotionThreshold); |
824 | BulletSimAPI.SetCcdSweptSphereRadius2(PhysBody.ptr, BSParam.CcdSweptSphereRadius); | 821 | PhysicsScene.PE.SetCcdSweptSphereRadius(PhysBody, BSParam.CcdSweptSphereRadius); |
825 | } | 822 | } |
826 | 823 | ||
827 | // Various values for simulation limits | 824 | // Various values for simulation limits |
828 | BulletSimAPI.SetDamping2(PhysBody.ptr, BSParam.LinearDamping, BSParam.AngularDamping); | 825 | PhysicsScene.PE.SetDamping(PhysBody, BSParam.LinearDamping, BSParam.AngularDamping); |
829 | BulletSimAPI.SetDeactivationTime2(PhysBody.ptr, BSParam.DeactivationTime); | 826 | PhysicsScene.PE.SetDeactivationTime(PhysBody, BSParam.DeactivationTime); |
830 | BulletSimAPI.SetSleepingThresholds2(PhysBody.ptr, BSParam.LinearSleepingThreshold, BSParam.AngularSleepingThreshold); | 827 | PhysicsScene.PE.SetSleepingThresholds(PhysBody, BSParam.LinearSleepingThreshold, BSParam.AngularSleepingThreshold); |
831 | BulletSimAPI.SetContactProcessingThreshold2(PhysBody.ptr, BSParam.ContactProcessingThreshold); | 828 | PhysicsScene.PE.SetContactProcessingThreshold(PhysBody, BSParam.ContactProcessingThreshold); |
832 | 829 | ||
833 | // This collides like an object. | 830 | // This collides like an object. |
834 | PhysBody.collisionType = CollisionType.Dynamic; | 831 | PhysBody.collisionType = CollisionType.Dynamic; |
835 | 832 | ||
836 | // Force activation of the object so Bullet will act on it. | 833 | // Force activation of the object so Bullet will act on it. |
837 | // Must do the ForceActivationState2() to overcome the DISABLE_SIMULATION from static objects. | 834 | // Must do the ForceActivationState2() to overcome the DISABLE_SIMULATION from static objects. |
838 | BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.ACTIVE_TAG); | 835 | PhysicsScene.PE.ForceActivationState(PhysBody, ActivationState.ACTIVE_TAG); |
839 | 836 | ||
840 | // There might be special things needed for implementing linksets. | 837 | // There might be special things needed for implementing linksets. |
841 | Linkset.MakeDynamic(this); | 838 | Linkset.MakeDynamic(this); |
@@ -848,7 +845,7 @@ public sealed class BSPrim : BSPhysObject | |||
848 | // the functions after this one set up the state of a possibly newly created collision body. | 845 | // the functions after this one set up the state of a possibly newly created collision body. |
849 | private void MakeSolid(bool makeSolid) | 846 | private void MakeSolid(bool makeSolid) |
850 | { | 847 | { |
851 | CollisionObjectTypes bodyType = (CollisionObjectTypes)BulletSimAPI.GetBodyType2(PhysBody.ptr); | 848 | CollisionObjectTypes bodyType = (CollisionObjectTypes)PhysicsScene.PE.GetBodyType(PhysBody); |
852 | if (makeSolid) | 849 | if (makeSolid) |
853 | { | 850 | { |
854 | // Verify the previous code created the correct shape for this type of thing. | 851 | // Verify the previous code created the correct shape for this type of thing. |
@@ -856,7 +853,7 @@ public sealed class BSPrim : BSPhysObject | |||
856 | { | 853 | { |
857 | m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for solidity. id={1}, type={2}", LogHeader, LocalID, bodyType); | 854 | m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for solidity. id={1}, type={2}", LogHeader, LocalID, bodyType); |
858 | } | 855 | } |
859 | CurrentCollisionFlags = BulletSimAPI.RemoveFromCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_NO_CONTACT_RESPONSE); | 856 | CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE); |
860 | } | 857 | } |
861 | else | 858 | else |
862 | { | 859 | { |
@@ -864,7 +861,7 @@ public sealed class BSPrim : BSPhysObject | |||
864 | { | 861 | { |
865 | m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for non-solidness. id={1}, type={2}", LogHeader, LocalID, bodyType); | 862 | m_log.ErrorFormat("{0} MakeSolid: physical body of wrong type for non-solidness. id={1}, type={2}", LogHeader, LocalID, bodyType); |
866 | } | 863 | } |
867 | CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_NO_CONTACT_RESPONSE); | 864 | CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.CF_NO_CONTACT_RESPONSE); |
868 | 865 | ||
869 | // Change collision info from a static object to a ghosty collision object | 866 | // Change collision info from a static object to a ghosty collision object |
870 | PhysBody.collisionType = CollisionType.VolumeDetect; | 867 | PhysBody.collisionType = CollisionType.VolumeDetect; |
@@ -877,7 +874,7 @@ public sealed class BSPrim : BSPhysObject | |||
877 | private void ActivateIfPhysical(bool forceIt) | 874 | private void ActivateIfPhysical(bool forceIt) |
878 | { | 875 | { |
879 | if (IsPhysical && PhysBody.HasPhysicalBody) | 876 | if (IsPhysical && PhysBody.HasPhysicalBody) |
880 | BulletSimAPI.Activate2(PhysBody.ptr, forceIt); | 877 | PhysicsScene.PE.Activate(PhysBody, forceIt); |
881 | } | 878 | } |
882 | 879 | ||
883 | // Turn on or off the flag controlling whether collision events are returned to the simulator. | 880 | // Turn on or off the flag controlling whether collision events are returned to the simulator. |
@@ -885,11 +882,11 @@ public sealed class BSPrim : BSPhysObject | |||
885 | { | 882 | { |
886 | if (wantsCollisionEvents) | 883 | if (wantsCollisionEvents) |
887 | { | 884 | { |
888 | CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); | 885 | CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); |
889 | } | 886 | } |
890 | else | 887 | else |
891 | { | 888 | { |
892 | CurrentCollisionFlags = BulletSimAPI.RemoveFromCollisionFlags2(PhysBody.ptr, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); | 889 | CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); |
893 | } | 890 | } |
894 | } | 891 | } |
895 | 892 | ||
@@ -900,18 +897,12 @@ public sealed class BSPrim : BSPhysObject | |||
900 | { | 897 | { |
901 | if (PhysBody.HasPhysicalBody) | 898 | if (PhysBody.HasPhysicalBody) |
902 | { | 899 | { |
903 | BulletSimAPI.AddObjectToWorld2(PhysicsScene.World.ptr, PhysBody.ptr); | 900 | PhysicsScene.PE.AddObjectToWorld(PhysicsScene.World, PhysBody); |
904 | 901 | } | |
905 | // TODO: Fix this. Total kludge because adding object to world resets its gravity to default. | 902 | else |
906 | // Replace this when the new AddObjectToWorld function is complete. | 903 | { |
907 | BulletSimAPI.SetGravity2(PhysBody.ptr, ComputeGravity()); | 904 | m_log.ErrorFormat("{0} Attempt to add physical object without body. id={1}", LogHeader, LocalID); |
908 | 905 | DetailLog("{0},BSPrim.UpdatePhysicalParameters,addObjectWithoutBody,cType={1}", LocalID, PhysBody.collisionType); | |
909 | // Collision filter can be set only when the object is in the world | ||
910 | if (!PhysBody.ApplyCollisionMask()) | ||
911 | { | ||
912 | m_log.ErrorFormat("{0} Failed setting object collision mask: id={1}", LogHeader, LocalID); | ||
913 | DetailLog("{0},BSPrim.UpdatePhysicalParameters,failedSetMaskGroup,cType={1}", LocalID, PhysBody.collisionType); | ||
914 | } | ||
915 | } | 906 | } |
916 | } | 907 | } |
917 | 908 | ||
@@ -944,9 +935,9 @@ public sealed class BSPrim : BSPhysObject | |||
944 | PhysicsScene.TaintedObject("BSPrim.setFloatOnWater", delegate() | 935 | PhysicsScene.TaintedObject("BSPrim.setFloatOnWater", delegate() |
945 | { | 936 | { |
946 | if (_floatOnWater) | 937 | if (_floatOnWater) |
947 | CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.BS_FLOATS_ON_WATER); | 938 | CurrentCollisionFlags = PhysicsScene.PE.AddToCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER); |
948 | else | 939 | else |
949 | CurrentCollisionFlags = BulletSimAPI.RemoveFromCollisionFlags2(PhysBody.ptr, CollisionFlags.BS_FLOATS_ON_WATER); | 940 | CurrentCollisionFlags = PhysicsScene.PE.RemoveFromCollisionFlags(PhysBody, CollisionFlags.BS_FLOATS_ON_WATER); |
950 | }); | 941 | }); |
951 | } | 942 | } |
952 | } | 943 | } |
@@ -972,7 +963,7 @@ public sealed class BSPrim : BSPhysObject | |||
972 | _rotationalVelocity = value; | 963 | _rotationalVelocity = value; |
973 | if (PhysBody.HasPhysicalBody) | 964 | if (PhysBody.HasPhysicalBody) |
974 | { | 965 | { |
975 | BulletSimAPI.SetAngularVelocity2(PhysBody.ptr, _rotationalVelocity); | 966 | PhysicsScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity); |
976 | ActivateIfPhysical(false); | 967 | ActivateIfPhysical(false); |
977 | } | 968 | } |
978 | } | 969 | } |
@@ -1064,7 +1055,7 @@ public sealed class BSPrim : BSPhysObject | |||
1064 | DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce); | 1055 | DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce); |
1065 | if (PhysBody.HasPhysicalBody) | 1056 | if (PhysBody.HasPhysicalBody) |
1066 | { | 1057 | { |
1067 | BulletSimAPI.ApplyCentralForce2(PhysBody.ptr, addForce); | 1058 | PhysicsScene.PE.ApplyCentralForce(PhysBody, addForce); |
1068 | ActivateIfPhysical(false); | 1059 | ActivateIfPhysical(false); |
1069 | } | 1060 | } |
1070 | }); | 1061 | }); |
@@ -1088,7 +1079,7 @@ public sealed class BSPrim : BSPhysObject | |||
1088 | { | 1079 | { |
1089 | if (PhysBody.HasPhysicalBody) | 1080 | if (PhysBody.HasPhysicalBody) |
1090 | { | 1081 | { |
1091 | BulletSimAPI.ApplyTorque2(PhysBody.ptr, angForce); | 1082 | PhysicsScene.PE.ApplyTorque(PhysBody, angForce); |
1092 | ActivateIfPhysical(false); | 1083 | ActivateIfPhysical(false); |
1093 | } | 1084 | } |
1094 | }); | 1085 | }); |
@@ -1111,7 +1102,7 @@ public sealed class BSPrim : BSPhysObject | |||
1111 | { | 1102 | { |
1112 | if (PhysBody.HasPhysicalBody) | 1103 | if (PhysBody.HasPhysicalBody) |
1113 | { | 1104 | { |
1114 | BulletSimAPI.ApplyTorqueImpulse2(PhysBody.ptr, applyImpulse); | 1105 | PhysicsScene.PE.ApplyTorqueImpulse(PhysBody, applyImpulse); |
1115 | ActivateIfPhysical(false); | 1106 | ActivateIfPhysical(false); |
1116 | } | 1107 | } |
1117 | }); | 1108 | }); |