aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-10-29 02:30:33 +0100
committerJustin Clark-Casey (justincc)2011-10-29 02:30:33 +0100
commit9fdd1753fa535ea710afc18753529aa3d12a09c6 (patch)
treea21fcfdec05a3ce9cec29d44c9012e02806d6c54
parenttidy up OdeCharacter so that we just use OpenMetaverse.Vector3 assignment dir... (diff)
downloadopensim-SC_OLD-9fdd1753fa535ea710afc18753529aa3d12a09c6.zip
opensim-SC_OLD-9fdd1753fa535ea710afc18753529aa3d12a09c6.tar.gz
opensim-SC_OLD-9fdd1753fa535ea710afc18753529aa3d12a09c6.tar.bz2
opensim-SC_OLD-9fdd1753fa535ea710afc18753529aa3d12a09c6.tar.xz
Add taint target velocity for ODECharacters as is already done for ODECharacter position and position and velocity for ODEPrims.
This is to help stop surprises if the velocity is set in the middle of physics calculations, though this probably isn't a huge problem. It's more for consistency and for the next step of removing some scene locks
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs19
1 files changed, 12 insertions, 7 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 09581c3..f93d7ba 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -74,6 +74,7 @@ namespace OpenSim.Region.Physics.OdePlugin
74 private bool _zeroFlag = false; 74 private bool _zeroFlag = false;
75 private bool m_lastUpdateSent = false; 75 private bool m_lastUpdateSent = false;
76 private Vector3 _velocity; 76 private Vector3 _velocity;
77 private Vector3 m_taintTargetVelocity;
77 private Vector3 _target_velocity; 78 private Vector3 _target_velocity;
78 private Vector3 _acceleration; 79 private Vector3 _acceleration;
79 private Vector3 m_rotationalVelocity; 80 private Vector3 m_rotationalVelocity;
@@ -701,7 +702,7 @@ namespace OpenSim.Region.Physics.OdePlugin
701// d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, servo, 0.0f, 0.0f, 1.0f); 702// d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, servo, 0.0f, 0.0f, 1.0f);
702// d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, -servo, 0.0f, 0.0f, -1.0f); 703// d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, -servo, 0.0f, 0.0f, -1.0f);
703// //d.Matrix3 bodyrotation = d.BodyGetRotation(Body); 704// //d.Matrix3 bodyrotation = d.BodyGetRotation(Body);
704// //m_log.Info("[PHYSICSAV]: Rotation: " + bodyrotation.M00 + " : " + bodyrotation.M01 + " : " + bodyrotation.M02 + " : " + bodyrotation.M10 + " : " + bodyrotation.M11 + " : " + bodyrotation.M12 + " : " + bodyrotation.M20 + " : " + bodyrotation.M21 + " : " + bodyrotation.M22); 705// //m_log.Info("[PHYSICSAV]: Rotation: " + bodyrotation.M00 + " : " + bodyFArotation.M01 + " : " + bodyrotation.M02 + " : " + bodyrotation.M10 + " : " + bodyrotation.M11 + " : " + bodyrotation.M12 + " : " + bodyrotation.M20 + " : " + bodyrotation.M21 + " : " + bodyrotation.M22);
705// } 706// }
706 707
707 public override Vector3 Force 708 public override Vector3 Force
@@ -767,14 +768,15 @@ namespace OpenSim.Region.Physics.OdePlugin
767 if (value.IsFinite()) 768 if (value.IsFinite())
768 { 769 {
769 m_pidControllerActive = true; 770 m_pidControllerActive = true;
770 _target_velocity = value; 771 m_taintTargetVelocity = value;
772 _parent_scene.AddPhysicsActorTaint(this);
771 } 773 }
772 else 774 else
773 { 775 {
774 m_log.Warn("[PHYSICS]: Got a NaN velocity from Scene in a Character"); 776 m_log.Warn("[PHYSICS]: Got a NaN velocity from Scene in a Character");
775 } 777 }
776 778
777// m_log.DebugFormat("[PHYSICS]: Set target velocity of {0}", _target_velocity); 779// m_log.DebugFormat("[PHYSICS]: Set target velocity of {0}", m_taintTargetVelocity);
778 } 780 }
779 } 781 }
780 782
@@ -834,14 +836,14 @@ namespace OpenSim.Region.Physics.OdePlugin
834 // If uncommented, things get pushed off world 836 // If uncommented, things get pushed off world
835 // 837 //
836 // m_log.Debug("Push!"); 838 // m_log.Debug("Push!");
837 // _target_velocity.X += force.X; 839 // m_taintTargetVelocity.X += force.X;
838 // _target_velocity.Y += force.Y; 840 // m_taintTargetVelocity.Y += force.Y;
839 // _target_velocity.Z += force.Z; 841 // m_taintTargetVelocity.Z += force.Z;
840 } 842 }
841 else 843 else
842 { 844 {
843 m_pidControllerActive = true; 845 m_pidControllerActive = true;
844 _target_velocity += force; 846 m_taintTargetVelocity += force;
845 } 847 }
846 } 848 }
847 else 849 else
@@ -1248,6 +1250,9 @@ namespace OpenSim.Region.Physics.OdePlugin
1248 } 1250 }
1249 } 1251 }
1250 1252
1253 if (m_taintTargetVelocity != _target_velocity)
1254 _target_velocity = m_taintTargetVelocity;
1255
1251 if (m_tainted_isPhysical != m_isPhysical) 1256 if (m_tainted_isPhysical != m_isPhysical)
1252 { 1257 {
1253 if (m_tainted_isPhysical) 1258 if (m_tainted_isPhysical)