aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs36
1 files changed, 27 insertions, 9 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 273ee23..33b2e4f 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -40,6 +40,7 @@ namespace OpenSim.Region.Physics.OdePlugin
40 { 40 {
41 private PhysicsVector _position; 41 private PhysicsVector _position;
42 private d.Vector3 _zeroPosition; 42 private d.Vector3 _zeroPosition;
43 private d.Matrix3 m_StandUpRotation;
43 private bool _zeroFlag = false; 44 private bool _zeroFlag = false;
44 private bool m_lastUpdateSent = false; 45 private bool m_lastUpdateSent = false;
45 private PhysicsVector _velocity; 46 private PhysicsVector _velocity;
@@ -86,6 +87,8 @@ namespace OpenSim.Region.Physics.OdePlugin
86 _acceleration = new PhysicsVector(); 87 _acceleration = new PhysicsVector();
87 _parent_scene = parent_scene; 88 _parent_scene = parent_scene;
88 89
90 m_StandUpRotation = new d.Matrix3(0.8184158f, -0.5744568f, -0.0139677f, 0.5744615f, 0.8185215f, -0.004074608f, 0.01377355f, -0.004689182f, 0.9998941f);
91
89 for (int i = 0; i < 11; i++) 92 for (int i = 0; i < 11; i++)
90 { 93 {
91 m_colliderarr[i] = false; 94 m_colliderarr[i] = false;
@@ -100,7 +103,15 @@ namespace OpenSim.Region.Physics.OdePlugin
100 d.BodySetMass(Body, ref ShellMass); 103 d.BodySetMass(Body, ref ShellMass);
101 d.BodySetPosition(Body, pos.X, pos.Y, pos.Z); 104 d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
102 d.GeomSetBody(Shell, Body); 105 d.GeomSetBody(Shell, Body);
103 Amotor = d.JointCreateAMotor(parent_scene.world, IntPtr.Zero); 106
107
108
109
110 d.BodySetRotation(Body, ref m_StandUpRotation);
111
112
113
114 Amotor = d.JointCreateAMotor(parent_scene.world, IntPtr.Zero);
104 d.JointAttach(Amotor, Body, IntPtr.Zero); 115 d.JointAttach(Amotor, Body, IntPtr.Zero);
105 d.JointSetAMotorMode(Amotor, dAMotorEuler); 116 d.JointSetAMotorMode(Amotor, dAMotorEuler);
106 d.JointSetAMotorNumAxes(Amotor, 3); 117 d.JointSetAMotorNumAxes(Amotor, 3);
@@ -117,6 +128,8 @@ namespace OpenSim.Region.Physics.OdePlugin
117 d.JointSetAMotorParam(Amotor, 3, 0); 128 d.JointSetAMotorParam(Amotor, 3, 0);
118 d.JointSetAMotorParam(Amotor, 2, 0); 129 d.JointSetAMotorParam(Amotor, 2, 0);
119 130
131
132
120 } 133 }
121 m_name = avName; 134 m_name = avName;
122 parent_scene.geom_name_map[Shell] = avName; 135 parent_scene.geom_name_map[Shell] = avName;
@@ -381,16 +394,21 @@ namespace OpenSim.Region.Physics.OdePlugin
381 d.BodyAddForce(Body, force.X, force.Y, force.Z); 394 d.BodyAddForce(Body, force.X, force.Y, force.Z);
382 395
383 // ok -- let's stand up straight! 396 // ok -- let's stand up straight!
384 d.Vector3 feet; 397 //d.Matrix3 StandUpRotationalMatrix = new d.Matrix3(0.8184158f, -0.5744568f, -0.0139677f, 0.5744615f, 0.8185215f, -0.004074608f, 0.01377355f, -0.004689182f, 0.9998941f);
385 d.Vector3 head; 398 //d.BodySetRotation(Body, ref StandUpRotationalMatrix);
386 d.BodyGetRelPointPos(Body, 0.0f, 0.0f, -1.0f, out feet); 399 d.BodySetRotation(Body, ref m_StandUpRotation);
387 d.BodyGetRelPointPos(Body, 0.0f, 0.0f, 1.0f, out head); 400 // The above matrix was generated with the amazing standup routine below by danX0r *cheer*
388 float posture = head.Z - feet.Z; 401 //d.Vector3 feet;
402 //d.Vector3 head;
403 //d.BodyGetRelPointPos(Body, 0.0f, 0.0f, -1.0f, out feet);
404 //d.BodyGetRelPointPos(Body, 0.0f, 0.0f, 1.0f, out head);
405 //float posture = head.Z - feet.Z;
389 406
390 // restoring force proportional to lack of posture: 407 // restoring force proportional to lack of posture:
391 float servo = (2.5f - posture) * POSTURE_SERVO; 408 //float servo = (2.5f - posture) * POSTURE_SERVO;
392 d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, servo, 0.0f, 0.0f, 1.0f); 409 //d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, servo, 0.0f, 0.0f, 1.0f);
393 d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, -servo, 0.0f, 0.0f, -1.0f); 410 //d.BodyAddForceAtRelPos(Body, 0.0f, 0.0f, -servo, 0.0f, 0.0f, -1.0f);
411
394 //m_lastUpdateSent = false; 412 //m_lastUpdateSent = false;
395 413
396 } 414 }