aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs44
1 files changed, 38 insertions, 6 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 819d823..5cdbb77 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Region.Physics.OdePlugin
49 private Quaternion _orientation; 49 private Quaternion _orientation;
50 private PhysicsVector m_taintposition; 50 private PhysicsVector m_taintposition;
51 private PhysicsVector m_taintsize; 51 private PhysicsVector m_taintsize;
52 private PhysicsVector m_taintVelocity = PhysicsVector.Zero;
52 private Quaternion m_taintrot; 53 private Quaternion m_taintrot;
53 private bool m_taintshape = false; 54 private bool m_taintshape = false;
54 private bool m_taintPhysics = false; 55 private bool m_taintPhysics = false;
@@ -455,8 +456,13 @@ namespace OpenSim.Region.Physics.OdePlugin
455 456
456 if (m_taintdisable) 457 if (m_taintdisable)
457 changedisable(timestep); 458 changedisable(timestep);
459
460 if (m_taintVelocity != PhysicsVector.Zero)
461 changevelocity(timestep);
458 } 462 }
459 463
464
465
460 public void Move(float timestep) 466 public void Move(float timestep)
461 { 467 {
462 if (m_isphysical) 468 if (m_isphysical)
@@ -743,7 +749,18 @@ namespace OpenSim.Region.Physics.OdePlugin
743 m_taintforce = false; 749 m_taintforce = false;
744 750
745 } 751 }
746 752 private void changevelocity(float timestep)
753 {
754 System.Threading.Thread.Sleep(20);
755 if (IsPhysical)
756 {
757 if (Body != (IntPtr)0)
758 {
759 d.BodySetLinearVel(Body, m_taintVelocity.X, m_taintVelocity.Y, m_taintVelocity.Z);
760 }
761 }
762 m_taintVelocity = PhysicsVector.Zero;
763 }
747 public override bool IsPhysical 764 public override bool IsPhysical
748 { 765 {
749 get { return m_isphysical; } 766 get { return m_isphysical; }
@@ -838,7 +855,14 @@ namespace OpenSim.Region.Physics.OdePlugin
838 returnVelocity.Z = (m_lastVelocity.Z + _velocity.Z)/2; 855 returnVelocity.Z = (m_lastVelocity.Z + _velocity.Z)/2;
839 return returnVelocity; 856 return returnVelocity;
840 } 857 }
841 set { _velocity = value; } 858 set {
859 _velocity = value;
860
861 m_taintVelocity = value;
862 _parent_scene.AddPhysicsActorTaint(this);
863
864
865 }
842 } 866 }
843 867
844 public override bool Kinematic 868 public override bool Kinematic
@@ -898,16 +922,24 @@ namespace OpenSim.Region.Physics.OdePlugin
898 d.Vector3 rotvel = d.BodyGetAngularVel(Body); 922 d.Vector3 rotvel = d.BodyGetAngularVel(Body);
899 923
900 PhysicsVector l_position = new PhysicsVector(); 924 PhysicsVector l_position = new PhysicsVector();
925
926
901 // kluge to keep things in bounds. ODE lets dead avatars drift away (they should be removed!) 927 // kluge to keep things in bounds. ODE lets dead avatars drift away (they should be removed!)
902 if (vec.X < 0.0f) vec.X = 0.0f; 928 //if (vec.X < 0.0f) vec.X = 0.0f;
903 if (vec.Y < 0.0f) vec.Y = 0.0f; 929 //if (vec.Y < 0.0f) vec.Y = 0.0f;
904 if (vec.X > 255.95f) vec.X = 255.95f; 930 //if (vec.X > 255.95f) vec.X = 255.95f;
905 if (vec.Y > 255.95f) vec.Y = 255.95f; 931 //if (vec.Y > 255.95f) vec.Y = 255.95f;
906 m_lastposition = _position; 932 m_lastposition = _position;
907 933
908 l_position.X = vec.X; 934 l_position.X = vec.X;
909 l_position.Y = vec.Y; 935 l_position.Y = vec.Y;
910 l_position.Z = vec.Z; 936 l_position.Z = vec.Z;
937
938 if (l_position.X > 257f || l_position.X < -1f || l_position.Y > 257f || l_position.Y < -1f)
939 {
940 base.RequestPhysicsterseUpdate();
941 }
942
911 if (l_position.Z < 0) 943 if (l_position.Z < 0)
912 { 944 {
913 // This is so prim that get lost underground don't fall forever and suck up 945 // This is so prim that get lost underground don't fall forever and suck up