diff options
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 37 |
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) |