diff options
Diffstat (limited to 'OpenSim/Region/PhysicsModules/Ode/OdeScene.cs')
-rw-r--r-- | OpenSim/Region/PhysicsModules/Ode/OdeScene.cs | 281 |
1 files changed, 139 insertions, 142 deletions
diff --git a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs index d15568e..e760fa2 100644 --- a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs +++ b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs | |||
@@ -336,9 +336,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
336 | 336 | ||
337 | private bool m_filterCollisions = true; | 337 | private bool m_filterCollisions = true; |
338 | 338 | ||
339 | private d.NearCallback nearCallback; | 339 | private SafeNativeMethods.NearCallback nearCallback; |
340 | public d.TriCallback triCallback; | ||
341 | public d.TriArrayCallback triArrayCallback; | ||
342 | 340 | ||
343 | /// <summary> | 341 | /// <summary> |
344 | /// Avatars in the physics scene. | 342 | /// Avatars in the physics scene. |
@@ -368,7 +366,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
368 | /// <summary> | 366 | /// <summary> |
369 | /// Keep record of contacts in the physics loop so that we can remove duplicates. | 367 | /// Keep record of contacts in the physics loop so that we can remove duplicates. |
370 | /// </summary> | 368 | /// </summary> |
371 | private readonly List<d.ContactGeom> _perloopContact = new List<d.ContactGeom>(); | 369 | private readonly List<SafeNativeMethods.ContactGeom> _perloopContact = new List<SafeNativeMethods.ContactGeom>(); |
372 | 370 | ||
373 | /// <summary> | 371 | /// <summary> |
374 | /// A dictionary of actors that should receive collision events. | 372 | /// A dictionary of actors that should receive collision events. |
@@ -409,7 +407,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
409 | private bool m_NINJA_physics_joints_enabled = false; | 407 | private bool m_NINJA_physics_joints_enabled = false; |
410 | //private Dictionary<String, IntPtr> jointpart_name_map = new Dictionary<String,IntPtr>(); | 408 | //private Dictionary<String, IntPtr> jointpart_name_map = new Dictionary<String,IntPtr>(); |
411 | private readonly Dictionary<String, List<PhysicsJoint>> joints_connecting_actor = new Dictionary<String, List<PhysicsJoint>>(); | 409 | private readonly Dictionary<String, List<PhysicsJoint>> joints_connecting_actor = new Dictionary<String, List<PhysicsJoint>>(); |
412 | private d.ContactGeom[] contacts; | 410 | private SafeNativeMethods.ContactGeom[] contacts; |
413 | 411 | ||
414 | /// <summary> | 412 | /// <summary> |
415 | /// Lock only briefly. accessed by external code (to request new joints) and by OdeScene.Simulate() to move those joints into pending/active | 413 | /// Lock only briefly. accessed by external code (to request new joints) and by OdeScene.Simulate() to move those joints into pending/active |
@@ -437,12 +435,12 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
437 | private readonly DoubleDictionary<Vector3, IntPtr, IntPtr> RegionTerrain = new DoubleDictionary<Vector3, IntPtr, IntPtr>(); | 435 | private readonly DoubleDictionary<Vector3, IntPtr, IntPtr> RegionTerrain = new DoubleDictionary<Vector3, IntPtr, IntPtr>(); |
438 | private readonly Dictionary<IntPtr,float[]> TerrainHeightFieldHeights = new Dictionary<IntPtr, float[]>(); | 436 | private readonly Dictionary<IntPtr,float[]> TerrainHeightFieldHeights = new Dictionary<IntPtr, float[]>(); |
439 | 437 | ||
440 | private d.Contact contact; | 438 | private SafeNativeMethods.Contact contact; |
441 | private d.Contact TerrainContact; | 439 | private SafeNativeMethods.Contact TerrainContact; |
442 | private d.Contact AvatarMovementprimContact; | 440 | private SafeNativeMethods.Contact AvatarMovementprimContact; |
443 | private d.Contact AvatarMovementTerrainContact; | 441 | private SafeNativeMethods.Contact AvatarMovementTerrainContact; |
444 | private d.Contact WaterContact; | 442 | private SafeNativeMethods.Contact WaterContact; |
445 | private d.Contact[,] m_materialContacts; | 443 | private SafeNativeMethods.Contact[,] m_materialContacts; |
446 | 444 | ||
447 | private int m_physicsiterations = 10; | 445 | private int m_physicsiterations = 10; |
448 | private const float m_SkipFramesAtms = 0.40f; // Drop frames gracefully at a 400 ms lag | 446 | private const float m_SkipFramesAtms = 0.40f; // Drop frames gracefully at a 400 ms lag |
@@ -480,8 +478,8 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
480 | private bool avplanted = false; | 478 | private bool avplanted = false; |
481 | private bool av_av_collisions_off = false; | 479 | private bool av_av_collisions_off = false; |
482 | 480 | ||
483 | public d.Vector3 xyz = new d.Vector3(128.1640f, 128.3079f, 25.7600f); | 481 | internal SafeNativeMethods.Vector3 xyz = new SafeNativeMethods.Vector3(128.1640f, 128.3079f, 25.7600f); |
484 | public d.Vector3 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f); | 482 | internal SafeNativeMethods.Vector3 hpr = new SafeNativeMethods.Vector3(125.5000f, -17.0000f, 0.0000f); |
485 | 483 | ||
486 | private volatile int m_global_contactcount = 0; | 484 | private volatile int m_global_contactcount = 0; |
487 | 485 | ||
@@ -544,12 +542,11 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
544 | m_rayCastManager = new ODERayCastRequestManager(this); | 542 | m_rayCastManager = new ODERayCastRequestManager(this); |
545 | 543 | ||
546 | // Create the world and the first space | 544 | // Create the world and the first space |
547 | world = d.WorldCreate(); | 545 | world = SafeNativeMethods.WorldCreate(); |
548 | space = d.HashSpaceCreate(IntPtr.Zero); | 546 | space = SafeNativeMethods.HashSpaceCreate(IntPtr.Zero); |
547 | contactgroup = SafeNativeMethods.JointGroupCreate(0); | ||
549 | 548 | ||
550 | contactgroup = d.JointGroupCreate(0); | 549 | SafeNativeMethods.WorldSetAutoDisableFlag(world, false); |
551 | |||
552 | d.WorldSetAutoDisableFlag(world, false); | ||
553 | } | 550 | } |
554 | 551 | ||
555 | // Initialize from configs | 552 | // Initialize from configs |
@@ -651,7 +648,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
651 | } | 648 | } |
652 | } | 649 | } |
653 | 650 | ||
654 | contacts = new d.ContactGeom[contactsPerCollision]; | 651 | contacts = new SafeNativeMethods.ContactGeom[contactsPerCollision]; |
655 | 652 | ||
656 | spacesPerMeterX = 1.0f / metersInSpace; | 653 | spacesPerMeterX = 1.0f / metersInSpace; |
657 | spacesPerMeterY = 1.0f / metersInSpace; | 654 | spacesPerMeterY = 1.0f / metersInSpace; |
@@ -680,7 +677,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
680 | // Centeral contact friction and bounce | 677 | // Centeral contact friction and bounce |
681 | // ckrinke 11/10/08 Enabling soft_erp but not soft_cfm until I figure out why | 678 | // ckrinke 11/10/08 Enabling soft_erp but not soft_cfm until I figure out why |
682 | // an avatar falls through in Z but not in X or Y when walking on a prim. | 679 | // an avatar falls through in Z but not in X or Y when walking on a prim. |
683 | contact.surface.mode |= d.ContactFlags.SoftERP; | 680 | contact.surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
684 | contact.surface.mu = nmAvatarObjectContactFriction; | 681 | contact.surface.mu = nmAvatarObjectContactFriction; |
685 | contact.surface.bounce = nmAvatarObjectContactBounce; | 682 | contact.surface.bounce = nmAvatarObjectContactBounce; |
686 | contact.surface.soft_cfm = 0.010f; | 683 | contact.surface.soft_cfm = 0.010f; |
@@ -689,12 +686,12 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
689 | // Terrain contact friction and Bounce | 686 | // Terrain contact friction and Bounce |
690 | // This is the *non* moving version. Use this when an avatar | 687 | // This is the *non* moving version. Use this when an avatar |
691 | // isn't moving to keep it in place better | 688 | // isn't moving to keep it in place better |
692 | TerrainContact.surface.mode |= d.ContactFlags.SoftERP; | 689 | TerrainContact.surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
693 | TerrainContact.surface.mu = nmTerrainContactFriction; | 690 | TerrainContact.surface.mu = nmTerrainContactFriction; |
694 | TerrainContact.surface.bounce = nmTerrainContactBounce; | 691 | TerrainContact.surface.bounce = nmTerrainContactBounce; |
695 | TerrainContact.surface.soft_erp = nmTerrainContactERP; | 692 | TerrainContact.surface.soft_erp = nmTerrainContactERP; |
696 | 693 | ||
697 | WaterContact.surface.mode |= (d.ContactFlags.SoftERP | d.ContactFlags.SoftCFM); | 694 | WaterContact.surface.mode |= (SafeNativeMethods.ContactFlags.SoftERP | SafeNativeMethods.ContactFlags.SoftCFM); |
698 | WaterContact.surface.mu = 0f; // No friction | 695 | WaterContact.surface.mu = 0f; // No friction |
699 | WaterContact.surface.bounce = 0.0f; // No bounce | 696 | WaterContact.surface.bounce = 0.0f; // No bounce |
700 | WaterContact.surface.soft_cfm = 0.010f; | 697 | WaterContact.surface.soft_cfm = 0.010f; |
@@ -709,7 +706,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
709 | 706 | ||
710 | // Terrain contact friction bounce and various error correcting calculations | 707 | // Terrain contact friction bounce and various error correcting calculations |
711 | // Use this when an avatar is in contact with the terrain and moving. | 708 | // Use this when an avatar is in contact with the terrain and moving. |
712 | AvatarMovementTerrainContact.surface.mode |= d.ContactFlags.SoftERP; | 709 | AvatarMovementTerrainContact.surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
713 | AvatarMovementTerrainContact.surface.mu = mTerrainContactFriction; | 710 | AvatarMovementTerrainContact.surface.mu = mTerrainContactFriction; |
714 | AvatarMovementTerrainContact.surface.bounce = mTerrainContactBounce; | 711 | AvatarMovementTerrainContact.surface.bounce = mTerrainContactBounce; |
715 | AvatarMovementTerrainContact.surface.soft_erp = mTerrainContactERP; | 712 | AvatarMovementTerrainContact.surface.soft_erp = mTerrainContactERP; |
@@ -731,38 +728,38 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
731 | Rubber = 6 | 728 | Rubber = 6 |
732 | */ | 729 | */ |
733 | 730 | ||
734 | m_materialContacts = new d.Contact[7,2]; | 731 | m_materialContacts = new SafeNativeMethods.Contact[7,2]; |
735 | 732 | ||
736 | m_materialContacts[(int)Material.Stone, 0] = new d.Contact(); | 733 | m_materialContacts[(int)Material.Stone, 0] = new SafeNativeMethods.Contact(); |
737 | m_materialContacts[(int)Material.Stone, 0].surface.mode |= d.ContactFlags.SoftERP; | 734 | m_materialContacts[(int)Material.Stone, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
738 | m_materialContacts[(int)Material.Stone, 0].surface.mu = nmAvatarObjectContactFriction; | 735 | m_materialContacts[(int)Material.Stone, 0].surface.mu = nmAvatarObjectContactFriction; |
739 | m_materialContacts[(int)Material.Stone, 0].surface.bounce = nmAvatarObjectContactBounce; | 736 | m_materialContacts[(int)Material.Stone, 0].surface.bounce = nmAvatarObjectContactBounce; |
740 | m_materialContacts[(int)Material.Stone, 0].surface.soft_cfm = 0.010f; | 737 | m_materialContacts[(int)Material.Stone, 0].surface.soft_cfm = 0.010f; |
741 | m_materialContacts[(int)Material.Stone, 0].surface.soft_erp = 0.010f; | 738 | m_materialContacts[(int)Material.Stone, 0].surface.soft_erp = 0.010f; |
742 | 739 | ||
743 | m_materialContacts[(int)Material.Stone, 1] = new d.Contact(); | 740 | m_materialContacts[(int)Material.Stone, 1] = new SafeNativeMethods.Contact(); |
744 | m_materialContacts[(int)Material.Stone, 1].surface.mode |= d.ContactFlags.SoftERP; | 741 | m_materialContacts[(int)Material.Stone, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
745 | m_materialContacts[(int)Material.Stone, 1].surface.mu = mAvatarObjectContactFriction; | 742 | m_materialContacts[(int)Material.Stone, 1].surface.mu = mAvatarObjectContactFriction; |
746 | m_materialContacts[(int)Material.Stone, 1].surface.bounce = mAvatarObjectContactBounce; | 743 | m_materialContacts[(int)Material.Stone, 1].surface.bounce = mAvatarObjectContactBounce; |
747 | m_materialContacts[(int)Material.Stone, 1].surface.soft_cfm = 0.010f; | 744 | m_materialContacts[(int)Material.Stone, 1].surface.soft_cfm = 0.010f; |
748 | m_materialContacts[(int)Material.Stone, 1].surface.soft_erp = 0.010f; | 745 | m_materialContacts[(int)Material.Stone, 1].surface.soft_erp = 0.010f; |
749 | 746 | ||
750 | m_materialContacts[(int)Material.Metal, 0] = new d.Contact(); | 747 | m_materialContacts[(int)Material.Metal, 0] = new SafeNativeMethods.Contact(); |
751 | m_materialContacts[(int)Material.Metal, 0].surface.mode |= d.ContactFlags.SoftERP; | 748 | m_materialContacts[(int)Material.Metal, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
752 | m_materialContacts[(int)Material.Metal, 0].surface.mu = nmAvatarObjectContactFriction; | 749 | m_materialContacts[(int)Material.Metal, 0].surface.mu = nmAvatarObjectContactFriction; |
753 | m_materialContacts[(int)Material.Metal, 0].surface.bounce = nmAvatarObjectContactBounce; | 750 | m_materialContacts[(int)Material.Metal, 0].surface.bounce = nmAvatarObjectContactBounce; |
754 | m_materialContacts[(int)Material.Metal, 0].surface.soft_cfm = 0.010f; | 751 | m_materialContacts[(int)Material.Metal, 0].surface.soft_cfm = 0.010f; |
755 | m_materialContacts[(int)Material.Metal, 0].surface.soft_erp = 0.010f; | 752 | m_materialContacts[(int)Material.Metal, 0].surface.soft_erp = 0.010f; |
756 | 753 | ||
757 | m_materialContacts[(int)Material.Metal, 1] = new d.Contact(); | 754 | m_materialContacts[(int)Material.Metal, 1] = new SafeNativeMethods.Contact(); |
758 | m_materialContacts[(int)Material.Metal, 1].surface.mode |= d.ContactFlags.SoftERP; | 755 | m_materialContacts[(int)Material.Metal, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
759 | m_materialContacts[(int)Material.Metal, 1].surface.mu = mAvatarObjectContactFriction; | 756 | m_materialContacts[(int)Material.Metal, 1].surface.mu = mAvatarObjectContactFriction; |
760 | m_materialContacts[(int)Material.Metal, 1].surface.bounce = mAvatarObjectContactBounce; | 757 | m_materialContacts[(int)Material.Metal, 1].surface.bounce = mAvatarObjectContactBounce; |
761 | m_materialContacts[(int)Material.Metal, 1].surface.soft_cfm = 0.010f; | 758 | m_materialContacts[(int)Material.Metal, 1].surface.soft_cfm = 0.010f; |
762 | m_materialContacts[(int)Material.Metal, 1].surface.soft_erp = 0.010f; | 759 | m_materialContacts[(int)Material.Metal, 1].surface.soft_erp = 0.010f; |
763 | 760 | ||
764 | m_materialContacts[(int)Material.Glass, 0] = new d.Contact(); | 761 | m_materialContacts[(int)Material.Glass, 0] = new SafeNativeMethods.Contact(); |
765 | m_materialContacts[(int)Material.Glass, 0].surface.mode |= d.ContactFlags.SoftERP; | 762 | m_materialContacts[(int)Material.Glass, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
766 | m_materialContacts[(int)Material.Glass, 0].surface.mu = 1f; | 763 | m_materialContacts[(int)Material.Glass, 0].surface.mu = 1f; |
767 | m_materialContacts[(int)Material.Glass, 0].surface.bounce = 0.5f; | 764 | m_materialContacts[(int)Material.Glass, 0].surface.bounce = 0.5f; |
768 | m_materialContacts[(int)Material.Glass, 0].surface.soft_cfm = 0.010f; | 765 | m_materialContacts[(int)Material.Glass, 0].surface.soft_cfm = 0.010f; |
@@ -775,83 +772,83 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
775 | private float mAvatarObjectContactFriction = 75f; | 772 | private float mAvatarObjectContactFriction = 75f; |
776 | private float mAvatarObjectContactBounce = 0.1f; | 773 | private float mAvatarObjectContactBounce = 0.1f; |
777 | */ | 774 | */ |
778 | m_materialContacts[(int)Material.Glass, 1] = new d.Contact(); | 775 | m_materialContacts[(int)Material.Glass, 1] = new SafeNativeMethods.Contact(); |
779 | m_materialContacts[(int)Material.Glass, 1].surface.mode |= d.ContactFlags.SoftERP; | 776 | m_materialContacts[(int)Material.Glass, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
780 | m_materialContacts[(int)Material.Glass, 1].surface.mu = 1f; | 777 | m_materialContacts[(int)Material.Glass, 1].surface.mu = 1f; |
781 | m_materialContacts[(int)Material.Glass, 1].surface.bounce = 0.5f; | 778 | m_materialContacts[(int)Material.Glass, 1].surface.bounce = 0.5f; |
782 | m_materialContacts[(int)Material.Glass, 1].surface.soft_cfm = 0.010f; | 779 | m_materialContacts[(int)Material.Glass, 1].surface.soft_cfm = 0.010f; |
783 | m_materialContacts[(int)Material.Glass, 1].surface.soft_erp = 0.010f; | 780 | m_materialContacts[(int)Material.Glass, 1].surface.soft_erp = 0.010f; |
784 | 781 | ||
785 | m_materialContacts[(int)Material.Wood, 0] = new d.Contact(); | 782 | m_materialContacts[(int)Material.Wood, 0] = new SafeNativeMethods.Contact(); |
786 | m_materialContacts[(int)Material.Wood, 0].surface.mode |= d.ContactFlags.SoftERP; | 783 | m_materialContacts[(int)Material.Wood, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
787 | m_materialContacts[(int)Material.Wood, 0].surface.mu = nmAvatarObjectContactFriction; | 784 | m_materialContacts[(int)Material.Wood, 0].surface.mu = nmAvatarObjectContactFriction; |
788 | m_materialContacts[(int)Material.Wood, 0].surface.bounce = nmAvatarObjectContactBounce; | 785 | m_materialContacts[(int)Material.Wood, 0].surface.bounce = nmAvatarObjectContactBounce; |
789 | m_materialContacts[(int)Material.Wood, 0].surface.soft_cfm = 0.010f; | 786 | m_materialContacts[(int)Material.Wood, 0].surface.soft_cfm = 0.010f; |
790 | m_materialContacts[(int)Material.Wood, 0].surface.soft_erp = 0.010f; | 787 | m_materialContacts[(int)Material.Wood, 0].surface.soft_erp = 0.010f; |
791 | 788 | ||
792 | m_materialContacts[(int)Material.Wood, 1] = new d.Contact(); | 789 | m_materialContacts[(int)Material.Wood, 1] = new SafeNativeMethods.Contact(); |
793 | m_materialContacts[(int)Material.Wood, 1].surface.mode |= d.ContactFlags.SoftERP; | 790 | m_materialContacts[(int)Material.Wood, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
794 | m_materialContacts[(int)Material.Wood, 1].surface.mu = mAvatarObjectContactFriction; | 791 | m_materialContacts[(int)Material.Wood, 1].surface.mu = mAvatarObjectContactFriction; |
795 | m_materialContacts[(int)Material.Wood, 1].surface.bounce = mAvatarObjectContactBounce; | 792 | m_materialContacts[(int)Material.Wood, 1].surface.bounce = mAvatarObjectContactBounce; |
796 | m_materialContacts[(int)Material.Wood, 1].surface.soft_cfm = 0.010f; | 793 | m_materialContacts[(int)Material.Wood, 1].surface.soft_cfm = 0.010f; |
797 | m_materialContacts[(int)Material.Wood, 1].surface.soft_erp = 0.010f; | 794 | m_materialContacts[(int)Material.Wood, 1].surface.soft_erp = 0.010f; |
798 | 795 | ||
799 | m_materialContacts[(int)Material.Flesh, 0] = new d.Contact(); | 796 | m_materialContacts[(int)Material.Flesh, 0] = new SafeNativeMethods.Contact(); |
800 | m_materialContacts[(int)Material.Flesh, 0].surface.mode |= d.ContactFlags.SoftERP; | 797 | m_materialContacts[(int)Material.Flesh, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
801 | m_materialContacts[(int)Material.Flesh, 0].surface.mu = nmAvatarObjectContactFriction; | 798 | m_materialContacts[(int)Material.Flesh, 0].surface.mu = nmAvatarObjectContactFriction; |
802 | m_materialContacts[(int)Material.Flesh, 0].surface.bounce = nmAvatarObjectContactBounce; | 799 | m_materialContacts[(int)Material.Flesh, 0].surface.bounce = nmAvatarObjectContactBounce; |
803 | m_materialContacts[(int)Material.Flesh, 0].surface.soft_cfm = 0.010f; | 800 | m_materialContacts[(int)Material.Flesh, 0].surface.soft_cfm = 0.010f; |
804 | m_materialContacts[(int)Material.Flesh, 0].surface.soft_erp = 0.010f; | 801 | m_materialContacts[(int)Material.Flesh, 0].surface.soft_erp = 0.010f; |
805 | 802 | ||
806 | m_materialContacts[(int)Material.Flesh, 1] = new d.Contact(); | 803 | m_materialContacts[(int)Material.Flesh, 1] = new SafeNativeMethods.Contact(); |
807 | m_materialContacts[(int)Material.Flesh, 1].surface.mode |= d.ContactFlags.SoftERP; | 804 | m_materialContacts[(int)Material.Flesh, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
808 | m_materialContacts[(int)Material.Flesh, 1].surface.mu = mAvatarObjectContactFriction; | 805 | m_materialContacts[(int)Material.Flesh, 1].surface.mu = mAvatarObjectContactFriction; |
809 | m_materialContacts[(int)Material.Flesh, 1].surface.bounce = mAvatarObjectContactBounce; | 806 | m_materialContacts[(int)Material.Flesh, 1].surface.bounce = mAvatarObjectContactBounce; |
810 | m_materialContacts[(int)Material.Flesh, 1].surface.soft_cfm = 0.010f; | 807 | m_materialContacts[(int)Material.Flesh, 1].surface.soft_cfm = 0.010f; |
811 | m_materialContacts[(int)Material.Flesh, 1].surface.soft_erp = 0.010f; | 808 | m_materialContacts[(int)Material.Flesh, 1].surface.soft_erp = 0.010f; |
812 | 809 | ||
813 | m_materialContacts[(int)Material.Plastic, 0] = new d.Contact(); | 810 | m_materialContacts[(int)Material.Plastic, 0] = new SafeNativeMethods.Contact(); |
814 | m_materialContacts[(int)Material.Plastic, 0].surface.mode |= d.ContactFlags.SoftERP; | 811 | m_materialContacts[(int)Material.Plastic, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
815 | m_materialContacts[(int)Material.Plastic, 0].surface.mu = nmAvatarObjectContactFriction; | 812 | m_materialContacts[(int)Material.Plastic, 0].surface.mu = nmAvatarObjectContactFriction; |
816 | m_materialContacts[(int)Material.Plastic, 0].surface.bounce = nmAvatarObjectContactBounce; | 813 | m_materialContacts[(int)Material.Plastic, 0].surface.bounce = nmAvatarObjectContactBounce; |
817 | m_materialContacts[(int)Material.Plastic, 0].surface.soft_cfm = 0.010f; | 814 | m_materialContacts[(int)Material.Plastic, 0].surface.soft_cfm = 0.010f; |
818 | m_materialContacts[(int)Material.Plastic, 0].surface.soft_erp = 0.010f; | 815 | m_materialContacts[(int)Material.Plastic, 0].surface.soft_erp = 0.010f; |
819 | 816 | ||
820 | m_materialContacts[(int)Material.Plastic, 1] = new d.Contact(); | 817 | m_materialContacts[(int)Material.Plastic, 1] = new SafeNativeMethods.Contact(); |
821 | m_materialContacts[(int)Material.Plastic, 1].surface.mode |= d.ContactFlags.SoftERP; | 818 | m_materialContacts[(int)Material.Plastic, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
822 | m_materialContacts[(int)Material.Plastic, 1].surface.mu = mAvatarObjectContactFriction; | 819 | m_materialContacts[(int)Material.Plastic, 1].surface.mu = mAvatarObjectContactFriction; |
823 | m_materialContacts[(int)Material.Plastic, 1].surface.bounce = mAvatarObjectContactBounce; | 820 | m_materialContacts[(int)Material.Plastic, 1].surface.bounce = mAvatarObjectContactBounce; |
824 | m_materialContacts[(int)Material.Plastic, 1].surface.soft_cfm = 0.010f; | 821 | m_materialContacts[(int)Material.Plastic, 1].surface.soft_cfm = 0.010f; |
825 | m_materialContacts[(int)Material.Plastic, 1].surface.soft_erp = 0.010f; | 822 | m_materialContacts[(int)Material.Plastic, 1].surface.soft_erp = 0.010f; |
826 | 823 | ||
827 | m_materialContacts[(int)Material.Rubber, 0] = new d.Contact(); | 824 | m_materialContacts[(int)Material.Rubber, 0] = new SafeNativeMethods.Contact(); |
828 | m_materialContacts[(int)Material.Rubber, 0].surface.mode |= d.ContactFlags.SoftERP; | 825 | m_materialContacts[(int)Material.Rubber, 0].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
829 | m_materialContacts[(int)Material.Rubber, 0].surface.mu = nmAvatarObjectContactFriction; | 826 | m_materialContacts[(int)Material.Rubber, 0].surface.mu = nmAvatarObjectContactFriction; |
830 | m_materialContacts[(int)Material.Rubber, 0].surface.bounce = nmAvatarObjectContactBounce; | 827 | m_materialContacts[(int)Material.Rubber, 0].surface.bounce = nmAvatarObjectContactBounce; |
831 | m_materialContacts[(int)Material.Rubber, 0].surface.soft_cfm = 0.010f; | 828 | m_materialContacts[(int)Material.Rubber, 0].surface.soft_cfm = 0.010f; |
832 | m_materialContacts[(int)Material.Rubber, 0].surface.soft_erp = 0.010f; | 829 | m_materialContacts[(int)Material.Rubber, 0].surface.soft_erp = 0.010f; |
833 | 830 | ||
834 | m_materialContacts[(int)Material.Rubber, 1] = new d.Contact(); | 831 | m_materialContacts[(int)Material.Rubber, 1] = new SafeNativeMethods.Contact(); |
835 | m_materialContacts[(int)Material.Rubber, 1].surface.mode |= d.ContactFlags.SoftERP; | 832 | m_materialContacts[(int)Material.Rubber, 1].surface.mode |= SafeNativeMethods.ContactFlags.SoftERP; |
836 | m_materialContacts[(int)Material.Rubber, 1].surface.mu = mAvatarObjectContactFriction; | 833 | m_materialContacts[(int)Material.Rubber, 1].surface.mu = mAvatarObjectContactFriction; |
837 | m_materialContacts[(int)Material.Rubber, 1].surface.bounce = mAvatarObjectContactBounce; | 834 | m_materialContacts[(int)Material.Rubber, 1].surface.bounce = mAvatarObjectContactBounce; |
838 | m_materialContacts[(int)Material.Rubber, 1].surface.soft_cfm = 0.010f; | 835 | m_materialContacts[(int)Material.Rubber, 1].surface.soft_cfm = 0.010f; |
839 | m_materialContacts[(int)Material.Rubber, 1].surface.soft_erp = 0.010f; | 836 | m_materialContacts[(int)Material.Rubber, 1].surface.soft_erp = 0.010f; |
840 | 837 | ||
841 | d.HashSpaceSetLevels(space, HashspaceLow, HashspaceHigh); | 838 | SafeNativeMethods.HashSpaceSetLevels(space, HashspaceLow, HashspaceHigh); |
842 | 839 | ||
843 | // Set the gravity,, don't disable things automatically (we set it explicitly on some things) | 840 | // Set the gravity,, don't disable things automatically (we set it explicitly on some things) |
844 | 841 | ||
845 | d.WorldSetGravity(world, gravityx, gravityy, gravityz); | 842 | SafeNativeMethods.WorldSetGravity(world, gravityx, gravityy, gravityz); |
846 | d.WorldSetContactSurfaceLayer(world, contactsurfacelayer); | 843 | SafeNativeMethods.WorldSetContactSurfaceLayer(world, contactsurfacelayer); |
847 | 844 | ||
848 | d.WorldSetLinearDamping(world, 256f); | 845 | SafeNativeMethods.WorldSetLinearDamping(world, 256f); |
849 | d.WorldSetAngularDamping(world, 256f); | 846 | SafeNativeMethods.WorldSetAngularDamping(world, 256f); |
850 | d.WorldSetAngularDampingThreshold(world, 256f); | 847 | SafeNativeMethods.WorldSetAngularDampingThreshold(world, 256f); |
851 | d.WorldSetLinearDampingThreshold(world, 256f); | 848 | SafeNativeMethods.WorldSetLinearDampingThreshold(world, 256f); |
852 | d.WorldSetMaxAngularSpeed(world, 256f); | 849 | SafeNativeMethods.WorldSetMaxAngularSpeed(world, 256f); |
853 | 850 | ||
854 | d.WorldSetQuickStepNumIterations(world, m_physicsiterations); | 851 | SafeNativeMethods.WorldSetQuickStepNumIterations(world, m_physicsiterations); |
855 | //d.WorldSetContactMaxCorrectingVel(world, 1000.0f); | 852 | //d.WorldSetContactMaxCorrectingVel(world, 1000.0f); |
856 | 853 | ||
857 | for (int i = 0; i < staticPrimspace.GetLength(0); i++) | 854 | for (int i = 0; i < staticPrimspace.GetLength(0); i++) |
@@ -877,7 +874,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
877 | /// <param name='contactsArray'></param> | 874 | /// <param name='contactsArray'></param> |
878 | /// <param name='contactGeomSize'></param> | 875 | /// <param name='contactGeomSize'></param> |
879 | private int CollideGeoms( | 876 | private int CollideGeoms( |
880 | IntPtr geom1, IntPtr geom2, int maxContacts, d.ContactGeom[] contactsArray, int contactGeomSize) | 877 | IntPtr geom1, IntPtr geom2, int maxContacts, SafeNativeMethods.ContactGeom[] contactsArray, int contactGeomSize) |
881 | { | 878 | { |
882 | int count; | 879 | int count; |
883 | 880 | ||
@@ -887,7 +884,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
887 | if (CollectStats) | 884 | if (CollectStats) |
888 | m_nativeCollisionStartTick = Util.EnvironmentTickCount(); | 885 | m_nativeCollisionStartTick = Util.EnvironmentTickCount(); |
889 | 886 | ||
890 | count = d.Collide(geom1, geom2, maxContacts, contactsArray, contactGeomSize); | 887 | count = SafeNativeMethods.Collide(geom1, geom2, maxContacts, contactsArray, contactGeomSize); |
891 | } | 888 | } |
892 | 889 | ||
893 | // We do this outside the lock so that any waiting threads aren't held up, though the effect is probably | 890 | // We do this outside the lock so that any waiting threads aren't held up, though the effect is probably |
@@ -913,7 +910,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
913 | m_nativeCollisionStartTick = Util.EnvironmentTickCount(); | 910 | m_nativeCollisionStartTick = Util.EnvironmentTickCount(); |
914 | } | 911 | } |
915 | 912 | ||
916 | d.SpaceCollide2(space1, space2, data, nearCallback); | 913 | SafeNativeMethods.SpaceCollide2(space1, space2, data, nearCallback); |
917 | 914 | ||
918 | if (CollectStats && m_inCollisionTiming) | 915 | if (CollectStats && m_inCollisionTiming) |
919 | { | 916 | { |
@@ -944,7 +941,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
944 | // Test if we're colliding a geom with a space. | 941 | // Test if we're colliding a geom with a space. |
945 | // If so we have to drill down into the space recursively | 942 | // If so we have to drill down into the space recursively |
946 | 943 | ||
947 | if (d.GeomIsSpace(g1) || d.GeomIsSpace(g2)) | 944 | if (SafeNativeMethods.GeomIsSpace(g1) || SafeNativeMethods.GeomIsSpace(g2)) |
948 | { | 945 | { |
949 | if (g1 == IntPtr.Zero || g2 == IntPtr.Zero) | 946 | if (g1 == IntPtr.Zero || g2 == IntPtr.Zero) |
950 | return; | 947 | return; |
@@ -973,8 +970,8 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
973 | if (g1 == IntPtr.Zero || g2 == IntPtr.Zero) | 970 | if (g1 == IntPtr.Zero || g2 == IntPtr.Zero) |
974 | return; | 971 | return; |
975 | 972 | ||
976 | IntPtr b1 = d.GeomGetBody(g1); | 973 | IntPtr b1 = SafeNativeMethods.GeomGetBody(g1); |
977 | IntPtr b2 = d.GeomGetBody(g2); | 974 | IntPtr b2 = SafeNativeMethods.GeomGetBody(g2); |
978 | 975 | ||
979 | // d.GeomClassID id = d.GeomGetClass(g1); | 976 | // d.GeomClassID id = d.GeomGetClass(g1); |
980 | 977 | ||
@@ -1001,10 +998,10 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1001 | if (g1 == g2) | 998 | if (g1 == g2) |
1002 | return; // Can't collide with yourself | 999 | return; // Can't collide with yourself |
1003 | 1000 | ||
1004 | if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact)) | 1001 | if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && SafeNativeMethods.AreConnectedExcluding(b1, b2, SafeNativeMethods.JointType.Contact)) |
1005 | return; | 1002 | return; |
1006 | 1003 | ||
1007 | count = CollideGeoms(g1, g2, contacts.Length, contacts, d.ContactGeom.unmanagedSizeOf); | 1004 | count = CollideGeoms(g1, g2, contacts.Length, contacts, SafeNativeMethods.ContactGeom.unmanagedSizeOf); |
1008 | 1005 | ||
1009 | // All code after this is only relevant if we have any collisions | 1006 | // All code after this is only relevant if we have any collisions |
1010 | if (count <= 0) | 1007 | if (count <= 0) |
@@ -1052,7 +1049,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1052 | 1049 | ||
1053 | for (int i = 0; i < count; i++) | 1050 | for (int i = 0; i < count; i++) |
1054 | { | 1051 | { |
1055 | d.ContactGeom curContact = contacts[i]; | 1052 | SafeNativeMethods.ContactGeom curContact = contacts[i]; |
1056 | 1053 | ||
1057 | if (curContact.depth > maxDepthContact.PenetrationDepth) | 1054 | if (curContact.depth > maxDepthContact.PenetrationDepth) |
1058 | { | 1055 | { |
@@ -1129,7 +1126,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1129 | curContact.depth = 0.00000003f; | 1126 | curContact.depth = 0.00000003f; |
1130 | p2.Velocity = p2.Velocity + new Vector3(0f, 0f, 0.5f); | 1127 | p2.Velocity = p2.Velocity + new Vector3(0f, 0f, 0.5f); |
1131 | curContact.pos = | 1128 | curContact.pos = |
1132 | new d.Vector3(curContact.pos.X + (p1.Size.X/2), | 1129 | new SafeNativeMethods.Vector3(curContact.pos.X + (p1.Size.X/2), |
1133 | curContact.pos.Y + (p1.Size.Y/2), | 1130 | curContact.pos.Y + (p1.Size.Y/2), |
1134 | curContact.pos.Z + (p1.Size.Z/2)); | 1131 | curContact.pos.Z + (p1.Size.Z/2)); |
1135 | character.SetPidStatus(true); | 1132 | character.SetPidStatus(true); |
@@ -1146,7 +1143,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1146 | curContact.depth = 0.00000003f; | 1143 | curContact.depth = 0.00000003f; |
1147 | p1.Velocity = p1.Velocity + new Vector3(0f, 0f, 0.5f); | 1144 | p1.Velocity = p1.Velocity + new Vector3(0f, 0f, 0.5f); |
1148 | curContact.pos = | 1145 | curContact.pos = |
1149 | new d.Vector3(curContact.pos.X + (p1.Size.X/2), | 1146 | new SafeNativeMethods.Vector3(curContact.pos.X + (p1.Size.X/2), |
1150 | curContact.pos.Y + (p1.Size.Y/2), | 1147 | curContact.pos.Y + (p1.Size.Y/2), |
1151 | curContact.pos.Z + (p1.Size.Z/2)); | 1148 | curContact.pos.Z + (p1.Size.Z/2)); |
1152 | character.SetPidStatus(true); | 1149 | character.SetPidStatus(true); |
@@ -1198,7 +1195,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1198 | 1195 | ||
1199 | if (m_global_contactcount < maxContactsbeforedeath) | 1196 | if (m_global_contactcount < maxContactsbeforedeath) |
1200 | { | 1197 | { |
1201 | joint = d.JointCreateContact(world, contactgroup, ref AvatarMovementTerrainContact); | 1198 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref AvatarMovementTerrainContact); |
1202 | m_global_contactcount++; | 1199 | m_global_contactcount++; |
1203 | } | 1200 | } |
1204 | } | 1201 | } |
@@ -1212,7 +1209,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1212 | 1209 | ||
1213 | if (m_global_contactcount < maxContactsbeforedeath) | 1210 | if (m_global_contactcount < maxContactsbeforedeath) |
1214 | { | 1211 | { |
1215 | joint = d.JointCreateContact(world, contactgroup, ref TerrainContact); | 1212 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref TerrainContact); |
1216 | m_global_contactcount++; | 1213 | m_global_contactcount++; |
1217 | } | 1214 | } |
1218 | } | 1215 | } |
@@ -1247,7 +1244,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1247 | 1244 | ||
1248 | if (m_global_contactcount < maxContactsbeforedeath) | 1245 | if (m_global_contactcount < maxContactsbeforedeath) |
1249 | { | 1246 | { |
1250 | joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]); | 1247 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]); |
1251 | m_global_contactcount++; | 1248 | m_global_contactcount++; |
1252 | } | 1249 | } |
1253 | } | 1250 | } |
@@ -1273,7 +1270,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1273 | 1270 | ||
1274 | if (m_global_contactcount < maxContactsbeforedeath) | 1271 | if (m_global_contactcount < maxContactsbeforedeath) |
1275 | { | 1272 | { |
1276 | joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]); | 1273 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]); |
1277 | m_global_contactcount++; | 1274 | m_global_contactcount++; |
1278 | } | 1275 | } |
1279 | } | 1276 | } |
@@ -1307,7 +1304,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1307 | 1304 | ||
1308 | if (m_global_contactcount < maxContactsbeforedeath) | 1305 | if (m_global_contactcount < maxContactsbeforedeath) |
1309 | { | 1306 | { |
1310 | joint = d.JointCreateContact(world, contactgroup, ref WaterContact); | 1307 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref WaterContact); |
1311 | m_global_contactcount++; | 1308 | m_global_contactcount++; |
1312 | } | 1309 | } |
1313 | //m_log.Info("[PHYSICS]: Prim Water Contact" + contact.depth); | 1310 | //m_log.Info("[PHYSICS]: Prim Water Contact" + contact.depth); |
@@ -1324,7 +1321,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1324 | 1321 | ||
1325 | if (m_global_contactcount < maxContactsbeforedeath) | 1322 | if (m_global_contactcount < maxContactsbeforedeath) |
1326 | { | 1323 | { |
1327 | joint = d.JointCreateContact(world, contactgroup, ref AvatarMovementprimContact); | 1324 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref AvatarMovementprimContact); |
1328 | m_global_contactcount++; | 1325 | m_global_contactcount++; |
1329 | } | 1326 | } |
1330 | } | 1327 | } |
@@ -1335,7 +1332,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1335 | 1332 | ||
1336 | if (m_global_contactcount < maxContactsbeforedeath) | 1333 | if (m_global_contactcount < maxContactsbeforedeath) |
1337 | { | 1334 | { |
1338 | joint = d.JointCreateContact(world, contactgroup, ref contact); | 1335 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref contact); |
1339 | m_global_contactcount++; | 1336 | m_global_contactcount++; |
1340 | } | 1337 | } |
1341 | } | 1338 | } |
@@ -1356,7 +1353,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1356 | 1353 | ||
1357 | if (m_global_contactcount < maxContactsbeforedeath) | 1354 | if (m_global_contactcount < maxContactsbeforedeath) |
1358 | { | 1355 | { |
1359 | joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, 0]); | 1356 | joint = SafeNativeMethods.JointCreateContact(world, contactgroup, ref m_materialContacts[material, 0]); |
1360 | m_global_contactcount++; | 1357 | m_global_contactcount++; |
1361 | } | 1358 | } |
1362 | } | 1359 | } |
@@ -1364,7 +1361,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1364 | 1361 | ||
1365 | if (m_global_contactcount < maxContactsbeforedeath && joint != IntPtr.Zero) // stack collide! | 1362 | if (m_global_contactcount < maxContactsbeforedeath && joint != IntPtr.Zero) // stack collide! |
1366 | { | 1363 | { |
1367 | d.JointAttach(joint, b1, b2); | 1364 | SafeNativeMethods.JointAttach(joint, b1, b2); |
1368 | m_global_contactcount++; | 1365 | m_global_contactcount++; |
1369 | } | 1366 | } |
1370 | } | 1367 | } |
@@ -1384,7 +1381,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1384 | } | 1381 | } |
1385 | } | 1382 | } |
1386 | 1383 | ||
1387 | private bool checkDupe(d.ContactGeom contactGeom, int atype) | 1384 | private bool checkDupe(SafeNativeMethods.ContactGeom contactGeom, int atype) |
1388 | { | 1385 | { |
1389 | if (!m_filterCollisions) | 1386 | if (!m_filterCollisions) |
1390 | return false; | 1387 | return false; |
@@ -1393,7 +1390,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1393 | 1390 | ||
1394 | ActorTypes at = (ActorTypes)atype; | 1391 | ActorTypes at = (ActorTypes)atype; |
1395 | 1392 | ||
1396 | foreach (d.ContactGeom contact in _perloopContact) | 1393 | foreach (SafeNativeMethods.ContactGeom contact in _perloopContact) |
1397 | { | 1394 | { |
1398 | //if ((contact.g1 == contactGeom.g1 && contact.g2 == contactGeom.g2)) | 1395 | //if ((contact.g1 == contactGeom.g1 && contact.g2 == contactGeom.g2)) |
1399 | //{ | 1396 | //{ |
@@ -1580,7 +1577,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1580 | List<OdePrim> removeprims = null; | 1577 | List<OdePrim> removeprims = null; |
1581 | foreach (OdePrim chr in _activeprims) | 1578 | foreach (OdePrim chr in _activeprims) |
1582 | { | 1579 | { |
1583 | if (chr.Body != IntPtr.Zero && d.BodyIsEnabled(chr.Body) && (!chr.m_disabled)) | 1580 | if (chr.Body != IntPtr.Zero && SafeNativeMethods.BodyIsEnabled(chr.Body) && (!chr.m_disabled)) |
1584 | { | 1581 | { |
1585 | try | 1582 | try |
1586 | { | 1583 | { |
@@ -1706,7 +1703,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1706 | 1703 | ||
1707 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | 1704 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) |
1708 | { | 1705 | { |
1709 | d.AllocateODEDataForThread(0); | 1706 | SafeNativeMethods.AllocateODEDataForThread(0); |
1710 | 1707 | ||
1711 | OdeCharacter newAv | 1708 | OdeCharacter newAv |
1712 | = new OdeCharacter( | 1709 | = new OdeCharacter( |
@@ -1729,7 +1726,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1729 | 1726 | ||
1730 | lock (OdeLock) | 1727 | lock (OdeLock) |
1731 | { | 1728 | { |
1732 | d.AllocateODEDataForThread(0); | 1729 | SafeNativeMethods.AllocateODEDataForThread(0); |
1733 | 1730 | ||
1734 | ((OdeCharacter) actor).Destroy(); | 1731 | ((OdeCharacter) actor).Destroy(); |
1735 | } | 1732 | } |
@@ -1786,7 +1783,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1786 | OdePrim newPrim; | 1783 | OdePrim newPrim; |
1787 | lock (OdeLock) | 1784 | lock (OdeLock) |
1788 | { | 1785 | { |
1789 | d.AllocateODEDataForThread(0); | 1786 | SafeNativeMethods.AllocateODEDataForThread(0); |
1790 | newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical); | 1787 | newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical); |
1791 | 1788 | ||
1792 | lock (_prims) | 1789 | lock (_prims) |
@@ -1950,7 +1947,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
1950 | DoJointDeactivated(joint); | 1947 | DoJointDeactivated(joint); |
1951 | if (joint.jointID != IntPtr.Zero) | 1948 | if (joint.jointID != IntPtr.Zero) |
1952 | { | 1949 | { |
1953 | d.JointDestroy(joint.jointID); | 1950 | SafeNativeMethods.JointDestroy(joint.jointID); |
1954 | joint.jointID = IntPtr.Zero; | 1951 | joint.jointID = IntPtr.Zero; |
1955 | //DoJointErrorMessage(joint, "successfully destroyed joint " + jointName); | 1952 | //DoJointErrorMessage(joint, "successfully destroyed joint " + jointName); |
1956 | } | 1953 | } |
@@ -2115,7 +2112,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2115 | public override Vector3 GetJointAnchor(PhysicsJoint joint) | 2112 | public override Vector3 GetJointAnchor(PhysicsJoint joint) |
2116 | { | 2113 | { |
2117 | Debug.Assert(joint.IsInPhysicsEngine); | 2114 | Debug.Assert(joint.IsInPhysicsEngine); |
2118 | d.Vector3 pos = new d.Vector3(); | 2115 | SafeNativeMethods.Vector3 pos = new SafeNativeMethods.Vector3(); |
2119 | 2116 | ||
2120 | if (!(joint is OdePhysicsJoint)) | 2117 | if (!(joint is OdePhysicsJoint)) |
2121 | { | 2118 | { |
@@ -2127,10 +2124,10 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2127 | switch (odeJoint.Type) | 2124 | switch (odeJoint.Type) |
2128 | { | 2125 | { |
2129 | case PhysicsJointType.Ball: | 2126 | case PhysicsJointType.Ball: |
2130 | d.JointGetBallAnchor(odeJoint.jointID, out pos); | 2127 | SafeNativeMethods.JointGetBallAnchor(odeJoint.jointID, out pos); |
2131 | break; | 2128 | break; |
2132 | case PhysicsJointType.Hinge: | 2129 | case PhysicsJointType.Hinge: |
2133 | d.JointGetHingeAnchor(odeJoint.jointID, out pos); | 2130 | SafeNativeMethods.JointGetHingeAnchor(odeJoint.jointID, out pos); |
2134 | break; | 2131 | break; |
2135 | } | 2132 | } |
2136 | } | 2133 | } |
@@ -2151,7 +2148,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2151 | public override Vector3 GetJointAxis(PhysicsJoint joint) | 2148 | public override Vector3 GetJointAxis(PhysicsJoint joint) |
2152 | { | 2149 | { |
2153 | Debug.Assert(joint.IsInPhysicsEngine); | 2150 | Debug.Assert(joint.IsInPhysicsEngine); |
2154 | d.Vector3 axis = new d.Vector3(); | 2151 | SafeNativeMethods.Vector3 axis = new SafeNativeMethods.Vector3(); |
2155 | 2152 | ||
2156 | if (!(joint is OdePhysicsJoint)) | 2153 | if (!(joint is OdePhysicsJoint)) |
2157 | { | 2154 | { |
@@ -2166,7 +2163,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2166 | DoJointErrorMessage(joint, "warning - axis requested for ball joint: " + joint.ObjectNameInScene); | 2163 | DoJointErrorMessage(joint, "warning - axis requested for ball joint: " + joint.ObjectNameInScene); |
2167 | break; | 2164 | break; |
2168 | case PhysicsJointType.Hinge: | 2165 | case PhysicsJointType.Hinge: |
2169 | d.JointGetHingeAxis(odeJoint.jointID, out axis); | 2166 | SafeNativeMethods.JointGetHingeAxis(odeJoint.jointID, out axis); |
2170 | break; | 2167 | break; |
2171 | } | 2168 | } |
2172 | } | 2169 | } |
@@ -2299,12 +2296,12 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2299 | //{ | 2296 | //{ |
2300 | //int adfadf = 0; | 2297 | //int adfadf = 0; |
2301 | //} | 2298 | //} |
2302 | if (d.SpaceQuery(currentspace, geom) && currentspace != IntPtr.Zero) | 2299 | if (SafeNativeMethods.SpaceQuery(currentspace, geom) && currentspace != IntPtr.Zero) |
2303 | { | 2300 | { |
2304 | if (d.GeomIsSpace(currentspace)) | 2301 | if (SafeNativeMethods.GeomIsSpace(currentspace)) |
2305 | { | 2302 | { |
2306 | // waitForSpaceUnlock(currentspace); | 2303 | // waitForSpaceUnlock(currentspace); |
2307 | d.SpaceRemove(currentspace, geom); | 2304 | SafeNativeMethods.SpaceRemove(currentspace, geom); |
2308 | } | 2305 | } |
2309 | else | 2306 | else |
2310 | { | 2307 | { |
@@ -2314,13 +2311,13 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2314 | } | 2311 | } |
2315 | else | 2312 | else |
2316 | { | 2313 | { |
2317 | IntPtr sGeomIsIn = d.GeomGetSpace(geom); | 2314 | IntPtr sGeomIsIn = SafeNativeMethods.GeomGetSpace(geom); |
2318 | if (sGeomIsIn != IntPtr.Zero) | 2315 | if (sGeomIsIn != IntPtr.Zero) |
2319 | { | 2316 | { |
2320 | if (d.GeomIsSpace(currentspace)) | 2317 | if (SafeNativeMethods.GeomIsSpace(currentspace)) |
2321 | { | 2318 | { |
2322 | // waitForSpaceUnlock(sGeomIsIn); | 2319 | // waitForSpaceUnlock(sGeomIsIn); |
2323 | d.SpaceRemove(sGeomIsIn, geom); | 2320 | SafeNativeMethods.SpaceRemove(sGeomIsIn, geom); |
2324 | } | 2321 | } |
2325 | else | 2322 | else |
2326 | { | 2323 | { |
@@ -2331,13 +2328,13 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2331 | } | 2328 | } |
2332 | 2329 | ||
2333 | //If there are no more geometries in the sub-space, we don't need it in the main space anymore | 2330 | //If there are no more geometries in the sub-space, we don't need it in the main space anymore |
2334 | if (d.SpaceGetNumGeoms(currentspace) == 0) | 2331 | if (SafeNativeMethods.SpaceGetNumGeoms(currentspace) == 0) |
2335 | { | 2332 | { |
2336 | if (currentspace != IntPtr.Zero) | 2333 | if (currentspace != IntPtr.Zero) |
2337 | { | 2334 | { |
2338 | if (d.GeomIsSpace(currentspace)) | 2335 | if (SafeNativeMethods.GeomIsSpace(currentspace)) |
2339 | { | 2336 | { |
2340 | d.SpaceRemove(space, currentspace); | 2337 | SafeNativeMethods.SpaceRemove(space, currentspace); |
2341 | // free up memory used by the space. | 2338 | // free up memory used by the space. |
2342 | 2339 | ||
2343 | resetSpaceArrayItemToZero(currentspace); | 2340 | resetSpaceArrayItemToZero(currentspace); |
@@ -2355,12 +2352,12 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2355 | // this is a physical object that got disabled. ;.; | 2352 | // this is a physical object that got disabled. ;.; |
2356 | if (currentspace != IntPtr.Zero && geom != IntPtr.Zero) | 2353 | if (currentspace != IntPtr.Zero && geom != IntPtr.Zero) |
2357 | { | 2354 | { |
2358 | if (d.SpaceQuery(currentspace, geom)) | 2355 | if (SafeNativeMethods.SpaceQuery(currentspace, geom)) |
2359 | { | 2356 | { |
2360 | if (d.GeomIsSpace(currentspace)) | 2357 | if (SafeNativeMethods.GeomIsSpace(currentspace)) |
2361 | { | 2358 | { |
2362 | // waitForSpaceUnlock(currentspace); | 2359 | // waitForSpaceUnlock(currentspace); |
2363 | d.SpaceRemove(currentspace, geom); | 2360 | SafeNativeMethods.SpaceRemove(currentspace, geom); |
2364 | } | 2361 | } |
2365 | else | 2362 | else |
2366 | { | 2363 | { |
@@ -2370,13 +2367,13 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2370 | } | 2367 | } |
2371 | else | 2368 | else |
2372 | { | 2369 | { |
2373 | IntPtr sGeomIsIn = d.GeomGetSpace(geom); | 2370 | IntPtr sGeomIsIn = SafeNativeMethods.GeomGetSpace(geom); |
2374 | if (sGeomIsIn != IntPtr.Zero) | 2371 | if (sGeomIsIn != IntPtr.Zero) |
2375 | { | 2372 | { |
2376 | if (d.GeomIsSpace(sGeomIsIn)) | 2373 | if (SafeNativeMethods.GeomIsSpace(sGeomIsIn)) |
2377 | { | 2374 | { |
2378 | // waitForSpaceUnlock(sGeomIsIn); | 2375 | // waitForSpaceUnlock(sGeomIsIn); |
2379 | d.SpaceRemove(sGeomIsIn, geom); | 2376 | SafeNativeMethods.SpaceRemove(sGeomIsIn, geom); |
2380 | } | 2377 | } |
2381 | else | 2378 | else |
2382 | { | 2379 | { |
@@ -2397,7 +2394,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2397 | if (newspace == IntPtr.Zero) | 2394 | if (newspace == IntPtr.Zero) |
2398 | { | 2395 | { |
2399 | newspace = createprimspace(iprimspaceArrItem[0], iprimspaceArrItem[1]); | 2396 | newspace = createprimspace(iprimspaceArrItem[0], iprimspaceArrItem[1]); |
2400 | d.HashSpaceSetLevels(newspace, HashspaceLow, HashspaceHigh); | 2397 | SafeNativeMethods.HashSpaceSetLevels(newspace, HashspaceLow, HashspaceHigh); |
2401 | } | 2398 | } |
2402 | 2399 | ||
2403 | return newspace; | 2400 | return newspace; |
@@ -2412,11 +2409,11 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2412 | internal IntPtr createprimspace(int iprimspaceArrItemX, int iprimspaceArrItemY) | 2409 | internal IntPtr createprimspace(int iprimspaceArrItemX, int iprimspaceArrItemY) |
2413 | { | 2410 | { |
2414 | // creating a new space for prim and inserting it into main space. | 2411 | // creating a new space for prim and inserting it into main space. |
2415 | staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY] = d.HashSpaceCreate(IntPtr.Zero); | 2412 | staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY] = SafeNativeMethods.HashSpaceCreate(IntPtr.Zero); |
2416 | d.GeomSetCategoryBits(staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY], (int)CollisionCategories.Space); | 2413 | SafeNativeMethods.GeomSetCategoryBits(staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY], (int)CollisionCategories.Space); |
2417 | // waitForSpaceUnlock(space); | 2414 | // waitForSpaceUnlock(space); |
2418 | d.SpaceSetSublevel(space, 1); | 2415 | SafeNativeMethods.SpaceSetSublevel(space, 1); |
2419 | d.SpaceAdd(space, staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY]); | 2416 | SafeNativeMethods.SpaceAdd(space, staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY]); |
2420 | 2417 | ||
2421 | return staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY]; | 2418 | return staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY]; |
2422 | } | 2419 | } |
@@ -2636,7 +2633,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2636 | m_log.InfoFormat("[Ode] start processing pending actor operations"); | 2633 | m_log.InfoFormat("[Ode] start processing pending actor operations"); |
2637 | int tstart = Util.EnvironmentTickCount(); | 2634 | int tstart = Util.EnvironmentTickCount(); |
2638 | 2635 | ||
2639 | d.AllocateODEDataForThread(0); | 2636 | SafeNativeMethods.AllocateODEDataForThread(0); |
2640 | 2637 | ||
2641 | lock (_taintedPrims) | 2638 | lock (_taintedPrims) |
2642 | { | 2639 | { |
@@ -2719,7 +2716,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2719 | 2716 | ||
2720 | lock (OdeLock) | 2717 | lock (OdeLock) |
2721 | { | 2718 | { |
2722 | d.AllocateODEDataForThread(~0U); | 2719 | SafeNativeMethods.AllocateODEDataForThread(~0U); |
2723 | 2720 | ||
2724 | while (step_time > HalfOdeStep) | 2721 | while (step_time > HalfOdeStep) |
2725 | { | 2722 | { |
@@ -2871,12 +2868,12 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2871 | } | 2868 | } |
2872 | 2869 | ||
2873 | lock(SimulationLock) | 2870 | lock(SimulationLock) |
2874 | d.WorldQuickStep(world, ODE_STEPSIZE); | 2871 | SafeNativeMethods.WorldQuickStep(world, ODE_STEPSIZE); |
2875 | 2872 | ||
2876 | if (CollectStats) | 2873 | if (CollectStats) |
2877 | m_stats[ODENativeStepFrameMsStatName] += Util.EnvironmentTickCountSubtract(tempTick); | 2874 | m_stats[ODENativeStepFrameMsStatName] += Util.EnvironmentTickCountSubtract(tempTick); |
2878 | 2875 | ||
2879 | d.JointGroupEmpty(contactgroup); | 2876 | SafeNativeMethods.JointGroupEmpty(contactgroup); |
2880 | } | 2877 | } |
2881 | catch (Exception e) | 2878 | catch (Exception e) |
2882 | { | 2879 | { |
@@ -2924,7 +2921,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2924 | 2921 | ||
2925 | foreach (OdePrim prim in _activeprims) | 2922 | foreach (OdePrim prim in _activeprims) |
2926 | { | 2923 | { |
2927 | if (prim.IsPhysical && (d.BodyIsEnabled(prim.Body) || !prim._zeroFlag)) | 2924 | if (prim.IsPhysical && (SafeNativeMethods.BodyIsEnabled(prim.Body) || !prim._zeroFlag)) |
2928 | { | 2925 | { |
2929 | prim.UpdatePositionAndVelocity(); | 2926 | prim.UpdatePositionAndVelocity(); |
2930 | 2927 | ||
@@ -2954,7 +2951,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
2954 | fwriter.Close(); | 2951 | fwriter.Close(); |
2955 | } | 2952 | } |
2956 | 2953 | ||
2957 | d.WorldExportDIF(world, fname, physics_logging_append_existing_logfile, prefix); | 2954 | SafeNativeMethods.WorldExportDIF(world, fname, physics_logging_append_existing_logfile, prefix); |
2958 | } | 2955 | } |
2959 | 2956 | ||
2960 | latertickcount = Util.EnvironmentTickCountSubtract(tickCountFrameRun); | 2957 | latertickcount = Util.EnvironmentTickCountSubtract(tickCountFrameRun); |
@@ -3069,11 +3066,11 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3069 | { | 3066 | { |
3070 | IntPtr odeJoint; | 3067 | IntPtr odeJoint; |
3071 | //DoJointErrorMessage(joint, "ODE creating ball joint "); | 3068 | //DoJointErrorMessage(joint, "ODE creating ball joint "); |
3072 | odeJoint = d.JointCreateBall(world, IntPtr.Zero); | 3069 | odeJoint = SafeNativeMethods.JointCreateBall(world, IntPtr.Zero); |
3073 | //DoJointErrorMessage(joint, "ODE attaching ball joint: " + odeJoint + " with b1:" + jointBodies[0] + " b2:" + jointBodies[1]); | 3070 | //DoJointErrorMessage(joint, "ODE attaching ball joint: " + odeJoint + " with b1:" + jointBodies[0] + " b2:" + jointBodies[1]); |
3074 | d.JointAttach(odeJoint, jointBodies[0], jointBodies[1]); | 3071 | SafeNativeMethods.JointAttach(odeJoint, jointBodies[0], jointBodies[1]); |
3075 | //DoJointErrorMessage(joint, "ODE setting ball anchor: " + odeJoint + " to vec:" + joint.Position); | 3072 | //DoJointErrorMessage(joint, "ODE setting ball anchor: " + odeJoint + " to vec:" + joint.Position); |
3076 | d.JointSetBallAnchor(odeJoint, | 3073 | SafeNativeMethods.JointSetBallAnchor(odeJoint, |
3077 | joint.Position.X, | 3074 | joint.Position.X, |
3078 | joint.Position.Y, | 3075 | joint.Position.Y, |
3079 | joint.Position.Z); | 3076 | joint.Position.Z); |
@@ -3097,11 +3094,11 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3097 | { | 3094 | { |
3098 | IntPtr odeJoint; | 3095 | IntPtr odeJoint; |
3099 | //DoJointErrorMessage(joint, "ODE creating hinge joint "); | 3096 | //DoJointErrorMessage(joint, "ODE creating hinge joint "); |
3100 | odeJoint = d.JointCreateHinge(world, IntPtr.Zero); | 3097 | odeJoint = SafeNativeMethods.JointCreateHinge(world, IntPtr.Zero); |
3101 | //DoJointErrorMessage(joint, "ODE attaching hinge joint: " + odeJoint + " with b1:" + jointBodies[0] + " b2:" + jointBodies[1]); | 3098 | //DoJointErrorMessage(joint, "ODE attaching hinge joint: " + odeJoint + " with b1:" + jointBodies[0] + " b2:" + jointBodies[1]); |
3102 | d.JointAttach(odeJoint, jointBodies[0], jointBodies[1]); | 3099 | SafeNativeMethods.JointAttach(odeJoint, jointBodies[0], jointBodies[1]); |
3103 | //DoJointErrorMessage(joint, "ODE setting hinge anchor: " + odeJoint + " to vec:" + joint.Position); | 3100 | //DoJointErrorMessage(joint, "ODE setting hinge anchor: " + odeJoint + " to vec:" + joint.Position); |
3104 | d.JointSetHingeAnchor(odeJoint, | 3101 | SafeNativeMethods.JointSetHingeAnchor(odeJoint, |
3105 | joint.Position.X, | 3102 | joint.Position.X, |
3106 | joint.Position.Y, | 3103 | joint.Position.Y, |
3107 | joint.Position.Z); | 3104 | joint.Position.Z); |
@@ -3137,7 +3134,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3137 | Vector3 jointAxis = Vector3.Transform(Vector3.UnitX, proxyFrame); | 3134 | Vector3 jointAxis = Vector3.Transform(Vector3.UnitX, proxyFrame); |
3138 | //m_log.Debug("PHY: making axis: hinge joint axis is " + jointAxis); | 3135 | //m_log.Debug("PHY: making axis: hinge joint axis is " + jointAxis); |
3139 | //DoJointErrorMessage(joint, "ODE setting hinge axis: " + odeJoint + " to vec:" + jointAxis); | 3136 | //DoJointErrorMessage(joint, "ODE setting hinge axis: " + odeJoint + " to vec:" + jointAxis); |
3140 | d.JointSetHingeAxis(odeJoint, | 3137 | SafeNativeMethods.JointSetHingeAxis(odeJoint, |
3141 | jointAxis.X, | 3138 | jointAxis.X, |
3142 | jointAxis.Y, | 3139 | jointAxis.Y, |
3143 | jointAxis.Z); | 3140 | jointAxis.Z); |
@@ -3299,7 +3296,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3299 | 3296 | ||
3300 | lock (OdeLock) | 3297 | lock (OdeLock) |
3301 | { | 3298 | { |
3302 | d.AllocateODEDataForThread(~0U); | 3299 | SafeNativeMethods.AllocateODEDataForThread(~0U); |
3303 | 3300 | ||
3304 | IntPtr GroundGeom = IntPtr.Zero; | 3301 | IntPtr GroundGeom = IntPtr.Zero; |
3305 | if (RegionTerrain.TryGetValue(pOffset, out GroundGeom)) | 3302 | if (RegionTerrain.TryGetValue(pOffset, out GroundGeom)) |
@@ -3311,29 +3308,29 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3311 | { | 3308 | { |
3312 | TerrainHeightFieldHeights.Remove(GroundGeom); | 3309 | TerrainHeightFieldHeights.Remove(GroundGeom); |
3313 | } | 3310 | } |
3314 | d.SpaceRemove(space, GroundGeom); | 3311 | SafeNativeMethods.SpaceRemove(space, GroundGeom); |
3315 | d.GeomDestroy(GroundGeom); | 3312 | SafeNativeMethods.GeomDestroy(GroundGeom); |
3316 | } | 3313 | } |
3317 | 3314 | ||
3318 | } | 3315 | } |
3319 | IntPtr HeightmapData = d.GeomHeightfieldDataCreate(); | 3316 | IntPtr HeightmapData = SafeNativeMethods.GeomHeightfieldDataCreate(); |
3320 | d.GeomHeightfieldDataBuildSingle(HeightmapData, _heightmap, 0, | 3317 | SafeNativeMethods.GeomHeightfieldDataBuildSingle(HeightmapData, _heightmap, 0, |
3321 | heightmapWidth, heightmapHeight, | 3318 | heightmapWidth, heightmapHeight, |
3322 | (int)heightmapWidthSamples, | 3319 | (int)heightmapWidthSamples, |
3323 | (int)heightmapHeightSamples, | 3320 | (int)heightmapHeightSamples, |
3324 | scale, offset, thickness, wrap); | 3321 | scale, offset, thickness, wrap); |
3325 | 3322 | ||
3326 | d.GeomHeightfieldDataSetBounds(HeightmapData, hfmin - 1, hfmax + 1); | 3323 | SafeNativeMethods.GeomHeightfieldDataSetBounds(HeightmapData, hfmin - 1, hfmax + 1); |
3327 | GroundGeom = d.CreateHeightfield(space, HeightmapData, 1); | 3324 | GroundGeom = SafeNativeMethods.CreateHeightfield(space, HeightmapData, 1); |
3328 | if (GroundGeom != IntPtr.Zero) | 3325 | if (GroundGeom != IntPtr.Zero) |
3329 | { | 3326 | { |
3330 | d.GeomSetCategoryBits(GroundGeom, (int)(CollisionCategories.Land)); | 3327 | SafeNativeMethods.GeomSetCategoryBits(GroundGeom, (int)(CollisionCategories.Land)); |
3331 | d.GeomSetCollideBits(GroundGeom, (int)(CollisionCategories.Space)); | 3328 | SafeNativeMethods.GeomSetCollideBits(GroundGeom, (int)(CollisionCategories.Space)); |
3332 | 3329 | ||
3333 | } | 3330 | } |
3334 | geom_name_map[GroundGeom] = "Terrain"; | 3331 | geom_name_map[GroundGeom] = "Terrain"; |
3335 | 3332 | ||
3336 | d.Matrix3 R = new d.Matrix3(); | 3333 | SafeNativeMethods.Matrix3 R = new SafeNativeMethods.Matrix3(); |
3337 | 3334 | ||
3338 | Quaternion q1 = Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), 1.5707f); | 3335 | Quaternion q1 = Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), 1.5707f); |
3339 | Quaternion q2 = Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), 1.5707f); | 3336 | Quaternion q2 = Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), 1.5707f); |
@@ -3343,9 +3340,9 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3343 | float angle; | 3340 | float angle; |
3344 | q1.GetAxisAngle(out v3, out angle); | 3341 | q1.GetAxisAngle(out v3, out angle); |
3345 | 3342 | ||
3346 | d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle); | 3343 | SafeNativeMethods.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle); |
3347 | d.GeomSetRotation(GroundGeom, ref R); | 3344 | SafeNativeMethods.GeomSetRotation(GroundGeom, ref R); |
3348 | d.GeomSetPosition(GroundGeom, pOffset.X + regionsizeX * 0.5f, pOffset.Y + regionsizeY * 0.5f, 0.0f); | 3345 | SafeNativeMethods.GeomSetPosition(GroundGeom, pOffset.X + regionsizeX * 0.5f, pOffset.Y + regionsizeY * 0.5f, 0.0f); |
3349 | IntPtr testGround = IntPtr.Zero; | 3346 | IntPtr testGround = IntPtr.Zero; |
3350 | if (RegionTerrain.TryGetValue(pOffset, out testGround)) | 3347 | if (RegionTerrain.TryGetValue(pOffset, out testGround)) |
3351 | { | 3348 | { |
@@ -3384,7 +3381,7 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3384 | 3381 | ||
3385 | _worldInitialized = false; | 3382 | _worldInitialized = false; |
3386 | 3383 | ||
3387 | d.AllocateODEDataForThread(~0U); | 3384 | SafeNativeMethods.AllocateODEDataForThread(~0U); |
3388 | 3385 | ||
3389 | if (m_rayCastManager != null) | 3386 | if (m_rayCastManager != null) |
3390 | { | 3387 | { |
@@ -3412,13 +3409,13 @@ namespace OpenSim.Region.PhysicsModule.ODE | |||
3412 | { | 3409 | { |
3413 | if (TerrainHeightFieldHeights.ContainsKey(GroundGeom)) | 3410 | if (TerrainHeightFieldHeights.ContainsKey(GroundGeom)) |
3414 | TerrainHeightFieldHeights.Remove(GroundGeom); | 3411 | TerrainHeightFieldHeights.Remove(GroundGeom); |
3415 | d.GeomDestroy(GroundGeom); | 3412 | SafeNativeMethods.GeomDestroy(GroundGeom); |
3416 | } | 3413 | } |
3417 | } | 3414 | } |
3418 | 3415 | ||
3419 | try | 3416 | try |
3420 | { | 3417 | { |
3421 | d.WorldDestroy(world); | 3418 | SafeNativeMethods.WorldDestroy(world); |
3422 | world = IntPtr.Zero; | 3419 | world = IntPtr.Zero; |
3423 | } | 3420 | } |
3424 | catch (AccessViolationException e) | 3421 | catch (AccessViolationException e) |