aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs37
1 files changed, 19 insertions, 18 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 2fac33f..7df74f3 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -890,29 +890,30 @@ namespace OpenSim.Region.Physics.OdePlugin
890// vec, _target_velocity, movementdivisor, vel); 890// vec, _target_velocity, movementdivisor, vel);
891 } 891 }
892 892
893 if (m_iscolliding && !flying && _target_velocity.Z > 0.0f)
894 {
895 // We're colliding with something and we're not flying but we're moving
896 // This means we're walking or running.
897 d.Vector3 pos = d.BodyGetPosition(Body);
898 vec.Z = (_target_velocity.Z - vel.Z) * PID_D + (_zeroPosition.Z - pos.Z) * PID_P;
899 vec.X = ((_target_velocity.X - vel.X) / 1.2f) * PID_D;
900 vec.Y = ((_target_velocity.Y - vel.Y) / 1.2f) * PID_D;
901 }
902 else if (!m_iscolliding && !flying)
903 {
904 // we're not colliding and we're not flying so that means we're falling!
905 // m_iscolliding includes collisions with the ground.
906
907 vec.X = ((_target_velocity.X - vel.X) / 1.2f) * PID_D;
908 vec.Y = ((_target_velocity.Y - vel.Y) / 1.2f) * PID_D;
909 }
910
911 if (flying) 893 if (flying)
912 { 894 {
913 // This also acts as anti-gravity so that we hover when flying rather than fall. 895 // This also acts as anti-gravity so that we hover when flying rather than fall.
914 vec.Z = (_target_velocity.Z - vel.Z) * (PID_D); 896 vec.Z = (_target_velocity.Z - vel.Z) * (PID_D);
915 } 897 }
898 else
899 {
900 if (m_iscolliding && _target_velocity.Z > 0.0f)
901 {
902 // We're colliding with something and we're not flying but we're moving
903 // This means we're walking or running.
904 d.Vector3 pos = d.BodyGetPosition(Body);
905 vec.Z = (_target_velocity.Z - vel.Z) * PID_D + (_zeroPosition.Z - pos.Z) * PID_P;
906 vec.X = ((_target_velocity.X - vel.X) / 1.2f) * PID_D;
907 vec.Y = ((_target_velocity.Y - vel.Y) / 1.2f) * PID_D;
908 }
909 else if (!m_iscolliding)
910 {
911 // we're not colliding and we're not flying so that means we're falling!
912 // m_iscolliding includes collisions with the ground.
913 vec.X = ((_target_velocity.X - vel.X) / 1.2f) * PID_D;
914 vec.Y = ((_target_velocity.Y - vel.Y) / 1.2f) * PID_D;
915 }
916 }
916 } 917 }
917 918
918 if (flying) 919 if (flying)