* This update updates ODE to again use the AMotor to keep the avatar upright instead of the 'avatar wobble' This also uses a hack to detect debian and change the force applied by the AMotor to a different value for Debian. The intent of this all is to get the avatar to stand up in Debian with the AMotor.

ThreadPoolClientBranch
Teravus Ovares 2008-01-23 23:57:54 +00:00
parent 09a616e1ea
commit f0811e4800
2 changed files with 38 additions and 34 deletions

View File

@ -280,14 +280,6 @@ namespace OpenSim.Region.Environment.Scenes
m_statsReporter = new SimStatsReporter(regInfo);
m_statsReporter.OnSendStatsResult += SendSimStatsPackets;
MainLog.Instance.Verbose("PLATFORM", System.Environment.OSVersion.Platform.ToString());
MainLog.Instance.Verbose("PLATFORM", System.Environment.OSVersion.ToString());
string etcreturn = Util.ReadEtcIssue();
if (etcreturn.Contains("Debian"))
{
MainLog.Instance.Verbose("PLATFORM", "Found Debian!");
}
}
#endregion

View File

@ -84,6 +84,8 @@ namespace OpenSim.Region.Physics.OdePlugin
private bool m_alwaysRun = false;
private bool m_hackSentFall = false;
private bool m_hackSentFly = false;
private bool m_foundDebian = false;
private string m_name = String.Empty;
private bool[] m_colliderarr = new bool[11];
@ -106,7 +108,17 @@ namespace OpenSim.Region.Physics.OdePlugin
_position = pos;
_acceleration = new PhysicsVector();
_parent_scene = parent_scene;
string etcreturn = Util.ReadEtcIssue();
if (etcreturn.Contains("Debian"))
{
m_foundDebian = true;
m_tensor = 14000000f;
}
else
{
m_tensor = 3800000f;
}
m_StandUpRotation =
new d.Matrix3(0.5f, 0.7071068f, 0.5f, -0.7071068f, 0f, 0.7071068f, 0.5f, -0.7071068f,
0.5f);
@ -326,14 +338,14 @@ namespace OpenSim.Region.Physics.OdePlugin
m_pidControllerActive = true;
lock (OdeScene.OdeLock)
{
//d.JointDestroy(Amotor);
d.JointDestroy(Amotor);
PhysicsVector SetSize = value;
float prevCapsule = CAPSULE_LENGTH;
float capsuleradius = CAPSULE_RADIUS;
//capsuleradius = 0.2f;
CAPSULE_LENGTH = (SetSize.Z - ((SetSize.Z*0.43f))); // subtract 43% of the size
CAPSULE_LENGTH = (SetSize.Z - ((SetSize.Z*0.52f))); // subtract 43% of the size
OpenSim.Framework.Console.MainLog.Instance.Verbose("SIZE", CAPSULE_LENGTH.ToString());
d.BodyDestroy(Body);
d.GeomDestroy(Shell);
@ -364,40 +376,40 @@ namespace OpenSim.Region.Physics.OdePlugin
d.BodySetMass(Body, ref ShellMass);
d.Matrix3 m_caprot;
// 90 Stand up on the cap of the capped cyllinder
//d.RFromAxisAndAngle(out m_caprot, 1, 0, 1, (float)(Math.PI / 2));
d.RFromAxisAndAngle(out m_caprot, 1, 0, 1, (float)(Math.PI / 2));
//d.GeomSetRotation(Shell, ref m_caprot);
//d.BodySetRotation(Body, ref m_caprot);
d.GeomSetRotation(Shell, ref m_caprot);
d.BodySetRotation(Body, ref m_caprot);
d.GeomSetBody(Shell, Body);
// The purpose of the AMotor here is to keep the avatar's physical
// surrogate from rotating while moving
//Amotor = d.JointCreateAMotor(_parent_scene.world, IntPtr.Zero);
//d.JointAttach(Amotor, Body, IntPtr.Zero);
///d.JointSetAMotorMode(Amotor, dAMotorEuler);
//d.JointSetAMotorNumAxes(Amotor, 3);
//d.JointSetAMotorAxis(Amotor, 0, 0, 1, 0, 0);
//d.JointSetAMotorAxis(Amotor, 1, 0, 0, 1, 0);
//d.JointSetAMotorAxis(Amotor, 2, 0, 0, 0, 1);
//d.JointSetAMotorAngle(Amotor, 0, 0);
//d.JointSetAMotorAngle(Amotor, 1, 0);
//d.JointSetAMotorAngle(Amotor, 2, 0);
Amotor = d.JointCreateAMotor(_parent_scene.world, IntPtr.Zero);
d.JointAttach(Amotor, Body, IntPtr.Zero);
d.JointSetAMotorMode(Amotor, dAMotorEuler);
d.JointSetAMotorNumAxes(Amotor, 3);
d.JointSetAMotorAxis(Amotor, 0, 0, 1, 0, 0);
d.JointSetAMotorAxis(Amotor, 1, 0, 0, 1, 0);
d.JointSetAMotorAxis(Amotor, 2, 0, 0, 0, 1);
d.JointSetAMotorAngle(Amotor, 0, 0);
d.JointSetAMotorAngle(Amotor, 1, 0);
d.JointSetAMotorAngle(Amotor, 2, 0);
// These lowstops and high stops are effectively (no wiggle room)
//d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f);
//d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f);
//d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0.000000000001f);
//d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f);
//d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f);
//d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f);
d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f);
d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f);
d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0.000000000001f);
d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f);
d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f);
d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f);
// Fudge factor is 1f by default, we're setting it to 0. We don't want it to Fudge or the
// capped cyllinder will fall over
//d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f);
//d.JointSetAMotorParam(Amotor, (int)dParam.FMax, tensor);
d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f);
d.JointSetAMotorParam(Amotor, (int)dParam.FMax, tensor);
//d.Matrix3 bodyrotation = d.BodyGetRotation(Body);
//d.QfromR(
@ -528,7 +540,7 @@ namespace OpenSim.Region.Physics.OdePlugin
{
d.BodyAddForce(Body, force.X, force.Y, force.Z);
//d.BodySetRotation(Body, ref m_StandUpRotation);
standupStraight();
//standupStraight();
}
}
@ -721,7 +733,7 @@ namespace OpenSim.Region.Physics.OdePlugin
lock (OdeScene.OdeLock)
{
// Kill the Amotor
//d.JointDestroy(Amotor);
d.JointDestroy(Amotor);
//kill the Geometry
d.GeomDestroy(Shell);