diff options
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r-- | OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | 105 |
1 files changed, 54 insertions, 51 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs index 309cebd..9bf2abe 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | |||
@@ -833,13 +833,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
833 | switch (p2.PhysicsActorType) | 833 | switch (p2.PhysicsActorType) |
834 | { | 834 | { |
835 | case (int)ActorTypes.Agent: | 835 | case (int)ActorTypes.Agent: |
836 | p1.CollidingObj = true; | ||
837 | p2.CollidingObj = true; | ||
838 | break; | ||
839 | |||
840 | case (int)ActorTypes.Prim: | 836 | case (int)ActorTypes.Prim: |
841 | if (p2.Velocity.LengthSquared() > 0.0f) | ||
842 | p2.CollidingObj = true; | ||
843 | break; | 837 | break; |
844 | 838 | ||
845 | default: | 839 | default: |
@@ -850,55 +844,53 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
850 | } | 844 | } |
851 | 845 | ||
852 | case (int)ActorTypes.Prim: | 846 | case (int)ActorTypes.Prim: |
853 | switch (p2.PhysicsActorType) | ||
854 | { | 847 | { |
855 | case (int)ActorTypes.Agent: | 848 | switch (p2.PhysicsActorType) |
856 | 849 | { | |
857 | dop2ava = true; | 850 | case (int)ActorTypes.Agent: |
858 | 851 | dop2ava = true; | |
859 | if (p1.Velocity.LengthSquared() > 0.0f) | 852 | break; |
860 | p1.CollidingObj = true; | ||
861 | break; | ||
862 | 853 | ||
863 | case (int)ActorTypes.Prim: | 854 | case (int)ActorTypes.Prim: |
864 | Vector3 relV = p1.Velocity - p2.Velocity; | 855 | Vector3 relV = p1.Velocity - p2.Velocity; |
865 | float relVlenSQ = relV.LengthSquared(); | 856 | float relVlenSQ = relV.LengthSquared(); |
866 | if (relVlenSQ > 0.0001f) | 857 | if (relVlenSQ > 0.0001f) |
867 | { | 858 | { |
868 | p1.CollidingObj = true; | 859 | p1.CollidingObj = true; |
869 | p2.CollidingObj = true; | 860 | p2.CollidingObj = true; |
870 | } | 861 | } |
871 | p1.getContactData(ref contactdata1); | 862 | p1.getContactData(ref contactdata1); |
872 | p2.getContactData(ref contactdata2); | 863 | p2.getContactData(ref contactdata2); |
873 | bounce = contactdata1.bounce * contactdata2.bounce; | 864 | bounce = contactdata1.bounce * contactdata2.bounce; |
874 | mu = (float)Math.Sqrt(contactdata1.mu * contactdata2.mu); | 865 | mu = (float)Math.Sqrt(contactdata1.mu * contactdata2.mu); |
875 | 866 | ||
876 | if (relVlenSQ > 0.01f) | 867 | if (relVlenSQ > 0.01f) |
877 | mu *= frictionMovementMult; | 868 | mu *= frictionMovementMult; |
878 | 869 | ||
879 | break; | 870 | break; |
880 | |||
881 | case (int)ActorTypes.Ground: | ||
882 | p1.getContactData(ref contactdata1); | ||
883 | bounce = contactdata1.bounce * TerrainBounce; | ||
884 | mu = (float)Math.Sqrt(contactdata1.mu * TerrainFriction); | ||
885 | 871 | ||
886 | if (Math.Abs(p1.Velocity.X) > 0.1f || Math.Abs(p1.Velocity.Y) > 0.1f) | 872 | case (int)ActorTypes.Ground: |
887 | mu *= frictionMovementMult; | 873 | p1.getContactData(ref contactdata1); |
888 | p1.CollidingGround = true; | 874 | bounce = contactdata1.bounce * TerrainBounce; |
889 | /* | 875 | mu = (float)Math.Sqrt(contactdata1.mu * TerrainFriction); |
890 | if (d.GeomGetClass(g1) == d.GeomClassID.TriMeshClass) | 876 | |
891 | { | 877 | if (Math.Abs(p1.Velocity.X) > 0.1f || Math.Abs(p1.Velocity.Y) > 0.1f) |
892 | if (curContact.side1 > 0) | 878 | mu *= frictionMovementMult; |
893 | IgnoreNegSides = true; | 879 | p1.CollidingGround = true; |
894 | } | 880 | /* |
895 | */ | 881 | if (d.GeomGetClass(g1) == d.GeomClassID.TriMeshClass) |
896 | break; | 882 | { |
883 | if (curContact.side1 > 0) | ||
884 | IgnoreNegSides = true; | ||
885 | } | ||
886 | */ | ||
887 | break; | ||
897 | 888 | ||
898 | case (int)ActorTypes.Water: | 889 | case (int)ActorTypes.Water: |
899 | default: | 890 | default: |
900 | ignore = true; | 891 | ignore = true; |
901 | break; | 892 | break; |
893 | } | ||
902 | } | 894 | } |
903 | break; | 895 | break; |
904 | 896 | ||
@@ -950,14 +942,25 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
950 | bool noskip = true; | 942 | bool noskip = true; |
951 | if (dop1ava) | 943 | if (dop1ava) |
952 | { | 944 | { |
953 | if (!(((OdeCharacter)p1).Collide(g1,g2, false, ref curContact, ref FeetCollision))) | 945 | if (!(((OdeCharacter)p1).Collide(g1, g2, false, ref curContact, ref FeetCollision))) |
954 | |||
955 | noskip = false; | 946 | noskip = false; |
947 | else | ||
948 | { | ||
949 | if(p2.PhysicsActorType == (int)ActorTypes.Agent) | ||
950 | { | ||
951 | p1.CollidingObj = true; | ||
952 | p2.CollidingObj = true; | ||
953 | } | ||
954 | else if (p2.Velocity.LengthSquared() > 0.0f) | ||
955 | p2.CollidingObj = true; | ||
956 | } | ||
956 | } | 957 | } |
957 | else if (dop2ava) | 958 | else if (dop2ava) |
958 | { | 959 | { |
959 | if (!(((OdeCharacter)p2).Collide(g2,g1, true, ref curContact, ref FeetCollision))) | 960 | if (!(((OdeCharacter)p2).Collide(g2,g1, true, ref curContact, ref FeetCollision))) |
960 | noskip = false; | 961 | noskip = false; |
962 | else if (p1.Velocity.LengthSquared() > 0.0f) | ||
963 | p1.CollidingObj = true; | ||
961 | } | 964 | } |
962 | 965 | ||
963 | if (noskip) | 966 | if (noskip) |