* Fixed general avatar bounciness in ODE
* Craggy terrain mishandling by ODE still occasionally causes point bouncinessafrisby
parent
de32006f9a
commit
9f886083ab
|
@ -74,6 +74,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public IntPtr Body;
|
public IntPtr Body;
|
||||||
private OdeScene _parent_scene;
|
private OdeScene _parent_scene;
|
||||||
public IntPtr Shell;
|
public IntPtr Shell;
|
||||||
|
public IntPtr Amotor;
|
||||||
public d.Mass ShellMass;
|
public d.Mass ShellMass;
|
||||||
public bool collidelock = false;
|
public bool collidelock = false;
|
||||||
|
|
||||||
|
@ -92,13 +93,30 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
lock (OdeScene.OdeLock)
|
lock (OdeScene.OdeLock)
|
||||||
{
|
{
|
||||||
|
int dAMotorEuler = 1;
|
||||||
Shell = d.CreateCapsule(parent_scene.space, CAPSULE_RADIUS, CAPSULE_LENGTH);
|
Shell = d.CreateCapsule(parent_scene.space, CAPSULE_RADIUS, CAPSULE_LENGTH);
|
||||||
d.MassSetCapsule(out ShellMass, m_density, 3, CAPSULE_RADIUS, CAPSULE_LENGTH);
|
d.MassSetCapsule(out ShellMass, m_density, 3, CAPSULE_RADIUS, CAPSULE_LENGTH);
|
||||||
Body = d.BodyCreate(parent_scene.world);
|
Body = d.BodyCreate(parent_scene.world);
|
||||||
d.BodySetMass(Body, ref ShellMass);
|
d.BodySetMass(Body, ref ShellMass);
|
||||||
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
d.GeomSetBody(Shell, Body);
|
d.GeomSetBody(Shell, Body);
|
||||||
|
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);
|
||||||
|
d.JointSetAMotorParam(Amotor, 0, -0);
|
||||||
|
d.JointSetAMotorParam(Amotor, 0x200, -0);
|
||||||
|
d.JointSetAMotorParam(Amotor, 0x100, -0);
|
||||||
|
d.JointSetAMotorParam(Amotor, 0, 0);
|
||||||
|
d.JointSetAMotorParam(Amotor, 3, 0);
|
||||||
|
d.JointSetAMotorParam(Amotor, 2, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
m_name = avName;
|
m_name = avName;
|
||||||
parent_scene.geom_name_map[Shell] = avName;
|
parent_scene.geom_name_map[Shell] = avName;
|
||||||
|
@ -547,6 +565,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
lock (OdeScene.OdeLock)
|
lock (OdeScene.OdeLock)
|
||||||
{
|
{
|
||||||
|
d.JointDestroy(Amotor);
|
||||||
d.GeomDestroy(Shell);
|
d.GeomDestroy(Shell);
|
||||||
_parent_scene.geom_name_map.Remove(Shell);
|
_parent_scene.geom_name_map.Remove(Shell);
|
||||||
d.BodyDestroy(Body);
|
d.BodyDestroy(Body);
|
||||||
|
|
Loading…
Reference in New Issue