aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin/ODEPrim.cs')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs53
1 files changed, 31 insertions, 22 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index d28e464..312fd9c 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -672,9 +672,11 @@ namespace OpenSim.Region.Physics.OdePlugin
672 } 672 }
673 ode.dlock(_parent_scene.world); 673 ode.dlock(_parent_scene.world);
674 m_disabled = true; 674 m_disabled = true;
675 if (Body != (IntPtr) 0) 675 if (Body != (IntPtr)0)
676 {
676 d.BodyDisable(Body); 677 d.BodyDisable(Body);
677 678 Body = (IntPtr)0;
679 }
678 ode.dunlock(_parent_scene.world); 680 ode.dunlock(_parent_scene.world);
679 681
680 m_taintdisable = false; 682 m_taintdisable = false;
@@ -682,27 +684,30 @@ namespace OpenSim.Region.Physics.OdePlugin
682 684
683 public void changePhysicsStatus(float timestap) 685 public void changePhysicsStatus(float timestap)
684 { 686 {
685 while (ode.lockquery()) 687 lock (ode)
686 { 688 {
687 } 689 while (ode.lockquery())
688 ode.dlock(_parent_scene.world); 690 {
691 }
692 ode.dlock(_parent_scene.world);
689 693
690 if (m_isphysical == true) 694 if (m_isphysical == true)
691 {
692 if (Body == (IntPtr) 0)
693 { 695 {
694 enableBody(); 696 if (Body == (IntPtr)0)
697 {
698 enableBody();
699 }
695 } 700 }
696 } 701 else
697 else
698 {
699 if (Body != (IntPtr) 0)
700 { 702 {
701 disableBody(); 703 if (Body != (IntPtr)0)
704 {
705 disableBody();
706 }
702 } 707 }
703 }
704 708
705 ode.dunlock(_parent_scene.world); 709 ode.dunlock(_parent_scene.world);
710 }
706 711
707 resetCollisionAccounting(); 712 resetCollisionAccounting();
708 m_taintPhysics = m_isphysical; 713 m_taintPhysics = m_isphysical;
@@ -1279,18 +1284,21 @@ namespace OpenSim.Region.Physics.OdePlugin
1279 1284
1280 1285
1281 // kluge to keep things in bounds. ODE lets dead avatars drift away (they should be removed!) 1286 // kluge to keep things in bounds. ODE lets dead avatars drift away (they should be removed!)
1282 //if (vec.X < 0.0f) vec.X = 0.0f; 1287 //if (vec.X < 0.0f) { vec.X = 0.0f; if (Body != (IntPtr)0) d.BodySetAngularVel(Body, 0, 0, 0); }
1283 //if (vec.Y < 0.0f) vec.Y = 0.0f; 1288 //if (vec.Y < 0.0f) { vec.Y = 0.0f; if (Body != (IntPtr)0) d.BodySetAngularVel(Body, 0, 0, 0); }
1284 //if (vec.X > 255.95f) vec.X = 255.95f; 1289 //if (vec.X > 255.95f) { vec.X = 255.95f; if (Body != (IntPtr)0) d.BodySetAngularVel(Body, 0, 0, 0); }
1285 //if (vec.Y > 255.95f) vec.Y = 255.95f; 1290 //if (vec.Y > 255.95f) { vec.Y = 255.95f; if (Body != (IntPtr)0) d.BodySetAngularVel(Body, 0, 0, 0); }
1291
1286 m_lastposition = _position; 1292 m_lastposition = _position;
1287 1293
1288 l_position.X = vec.X; 1294 l_position.X = vec.X;
1289 l_position.Y = vec.Y; 1295 l_position.Y = vec.Y;
1290 l_position.Z = vec.Z; 1296 l_position.Z = vec.Z;
1291 1297
1292 //if (l_position.X > 257f || l_position.X < -1f || l_position.Y > 257f || l_position.Y < -1f) 1298 if (l_position.X > 255.95f || l_position.X < 0f || l_position.Y > 255.95f || l_position.Y < 0f)
1293 //{ 1299 {
1300 base.RaiseOutOfBounds(_position);
1301 }
1294 //if (m_crossingfailures < 5) 1302 //if (m_crossingfailures < 5)
1295 //{ 1303 //{
1296 //base.RequestPhysicsterseUpdate(); 1304 //base.RequestPhysicsterseUpdate();
@@ -1385,6 +1393,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1385 m_lastUpdateSent = false; 1393 m_lastUpdateSent = false;
1386 if (!m_throttleUpdates || throttleCounter > 15) 1394 if (!m_throttleUpdates || throttleCounter > 15)
1387 { 1395 {
1396
1388 base.RequestPhysicsterseUpdate(); 1397 base.RequestPhysicsterseUpdate();
1389 } 1398 }
1390 else 1399 else