aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs33
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs3
-rw-r--r--bin/OpenSim.ini.example4
3 files changed, 33 insertions, 7 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index e5e7d07..b832e0a 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -519,7 +519,14 @@ namespace OpenSim.Region.Physics.OdePlugin
519 d.BodySetMass(Body, ref ShellMass); 519 d.BodySetMass(Body, ref ShellMass);
520 d.Matrix3 m_caprot; 520 d.Matrix3 m_caprot;
521 // 90 Stand up on the cap of the capped cyllinder 521 // 90 Stand up on the cap of the capped cyllinder
522 d.RFromAxisAndAngle(out m_caprot, 1, 0, 1, (float)(Math.PI / 2)); 522 if (_parent_scene.IsAvCapsuleTilted)
523 {
524 d.RFromAxisAndAngle(out m_caprot, 1, 0, 1, (float)(Math.PI / 2));
525 }
526 else
527 {
528 d.RFromAxisAndAngle(out m_caprot, 0, 0, 1, (float)(Math.PI / 2));
529 }
523 530
524 531
525 d.GeomSetRotation(Shell, ref m_caprot); 532 d.GeomSetRotation(Shell, ref m_caprot);
@@ -542,12 +549,24 @@ namespace OpenSim.Region.Physics.OdePlugin
542 d.JointSetAMotorAngle(Amotor, 2, 0); 549 d.JointSetAMotorAngle(Amotor, 2, 0);
543 550
544 // These lowstops and high stops are effectively (no wiggle room) 551 // These lowstops and high stops are effectively (no wiggle room)
545 d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f); 552 if (_parent_scene.IsAvCapsuleTilted)
546 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f); 553 {
547 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0.000000000001f); 554 d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f);
548 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f); 555 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f);
549 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f); 556 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0.000000000001f);
550 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f); 557 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f);
558 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f);
559 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f);
560 }
561 else
562 {
563 d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0);
564 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0);
565 d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0);
566 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0);
567 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0);
568 d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0);
569 }
551 570
552 // Fudge factor is 1f by default, we're setting it to 0. We don't want it to Fudge or the 571 // Fudge factor is 1f by default, we're setting it to 0. We don't want it to Fudge or the
553 // capped cyllinder will fall over 572 // capped cyllinder will fall over
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index 0f92358..889afb6 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -199,6 +199,8 @@ namespace OpenSim.Region.Physics.OdePlugin
199 private float avPIDP = 1400f; 199 private float avPIDP = 1400f;
200 private float avCapRadius = 0.37f; 200 private float avCapRadius = 0.37f;
201 private float avStandupTensor = 2000000f; 201 private float avStandupTensor = 2000000f;
202 private bool avCapsuleTilted = true; // true = old compatibility mode with leaning capsule; false = new corrected mode
203 public bool IsAvCapsuleTilted { get { return avCapsuleTilted; } set { avCapsuleTilted = value; } }
202 private float avDensity = 80f; 204 private float avDensity = 80f;
203 private float avHeightFudgeFactor = 0.52f; 205 private float avHeightFudgeFactor = 0.52f;
204 private float avMovementDivisorWalk = 1.3f; 206 private float avMovementDivisorWalk = 1.3f;
@@ -426,6 +428,7 @@ namespace OpenSim.Region.Physics.OdePlugin
426 avMovementDivisorWalk = physicsconfig.GetFloat("av_movement_divisor_walk", 1.3f); 428 avMovementDivisorWalk = physicsconfig.GetFloat("av_movement_divisor_walk", 1.3f);
427 avMovementDivisorRun = physicsconfig.GetFloat("av_movement_divisor_run", 0.8f); 429 avMovementDivisorRun = physicsconfig.GetFloat("av_movement_divisor_run", 0.8f);
428 avCapRadius = physicsconfig.GetFloat("av_capsule_radius", 0.37f); 430 avCapRadius = physicsconfig.GetFloat("av_capsule_radius", 0.37f);
431 avCapsuleTilted = physicsconfig.GetBoolean("av_capsule_tilted", true);
429 432
430 geomContactPointsStartthrottle = physicsconfig.GetInt("geom_contactpoints_start_throttling", 3); 433 geomContactPointsStartthrottle = physicsconfig.GetInt("geom_contactpoints_start_throttling", 3);
431 geomUpdatesPerThrottledUpdate = physicsconfig.GetInt("geom_updates_before_throttled_update", 15); 434 geomUpdatesPerThrottledUpdate = physicsconfig.GetInt("geom_updates_before_throttled_update", 15);
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 2d03731..b311064 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -473,6 +473,10 @@
473 av_capsule_standup_tensor_win = 550000 473 av_capsule_standup_tensor_win = 550000
474 av_capsule_standup_tensor_linux = 550000 474 av_capsule_standup_tensor_linux = 550000
475 475
476 ; specifies if the capsule should be tilted (=true; old compatibility mode)
477 ; or straight up-and-down (=false; better and more consistent physics behavior)
478 av_capsule_tilted = true
479
476 ; used to calculate mass of avatar. 480 ; used to calculate mass of avatar.
477 ; float AVvolume = (float) (Math.PI*Math.Pow(CAPSULE_RADIUS, 2)*CAPSULE_LENGTH); 481 ; float AVvolume = (float) (Math.PI*Math.Pow(CAPSULE_RADIUS, 2)*CAPSULE_LENGTH);
478 ; av_density * AVvolume; 482 ; av_density * AVvolume;