diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 31 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | 7 |
2 files changed, 22 insertions, 16 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index d347159..38596fa 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | |||
@@ -143,7 +143,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
143 | { | 143 | { |
144 | enableAngularVerticalAttraction = true; | 144 | enableAngularVerticalAttraction = true; |
145 | enableAngularDeflection = false; | 145 | enableAngularDeflection = false; |
146 | enableAngularBanking = false; | 146 | enableAngularBanking = true; |
147 | if (BSParam.VehicleDebuggingEnabled) | 147 | if (BSParam.VehicleDebuggingEnabled) |
148 | { | 148 | { |
149 | enableAngularVerticalAttraction = true; | 149 | enableAngularVerticalAttraction = true; |
@@ -1280,11 +1280,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1280 | // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement | 1280 | // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement |
1281 | // TODO: This is here because this is where ODE put it but documentation says it | 1281 | // TODO: This is here because this is where ODE put it but documentation says it |
1282 | // is a linear effect. Where should this check go? | 1282 | // is a linear effect. Where should this check go? |
1283 | if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0) | 1283 | //if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0) |
1284 | { | 1284 | // { |
1285 | angularMotorContributionV.X = 0f; | 1285 | // angularMotorContributionV.X = 0f; |
1286 | angularMotorContributionV.Y = 0f; | 1286 | // angularMotorContributionV.Y = 0f; |
1287 | } | 1287 | // } |
1288 | 1288 | ||
1289 | VehicleRotationalVelocity += angularMotorContributionV * VehicleOrientation; | 1289 | VehicleRotationalVelocity += angularMotorContributionV * VehicleOrientation; |
1290 | VDetailLog("{0}, MoveAngular,angularTurning,angularMotorContrib={1}", Prim.LocalID, angularMotorContributionV); | 1290 | VDetailLog("{0}, MoveAngular,angularTurning,angularMotorContrib={1}", Prim.LocalID, angularMotorContributionV); |
@@ -1437,24 +1437,25 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1437 | // As the vehicle rolls to the right or left, the Y value will increase from | 1437 | // As the vehicle rolls to the right or left, the Y value will increase from |
1438 | // zero (straight up) to 1 or -1 (full tilt right or left) | 1438 | // zero (straight up) to 1 or -1 (full tilt right or left) |
1439 | Vector3 rollComponents = Vector3.UnitZ * VehicleOrientation; | 1439 | Vector3 rollComponents = Vector3.UnitZ * VehicleOrientation; |
1440 | |||
1441 | // Figure out the yaw value for this much roll. | ||
1442 | // Squared because that seems to give a good value | ||
1443 | float yawAngle = (float)Math.Asin(rollComponents.Y * rollComponents.Y) * m_bankingEfficiency; | ||
1444 | 1440 | ||
1441 | // Figure out the yaw value for this much roll. | ||
1442 | float yawAngle = m_angularMotorDirection.X * m_bankingEfficiency; | ||
1445 | // actual error = static turn error + dynamic turn error | 1443 | // actual error = static turn error + dynamic turn error |
1446 | float mixedYawAngle = yawAngle * (1f - m_bankingMix) + yawAngle * m_bankingMix * VehicleForwardSpeed; | 1444 | float mixedYawAngle =(yawAngle * (1f - m_bankingMix)) + ((yawAngle * m_bankingMix) * VehicleForwardSpeed); |
1447 | 1445 | ||
1448 | // TODO: the banking effect should not go to infinity but what to limit it to? | 1446 | // TODO: the banking effect should not go to infinity but what to limit it to? |
1449 | mixedYawAngle = ClampInRange(-20f, mixedYawAngle, 20f); | 1447 | // And what should happen when this is being added to a user defined yaw that is already PI*4? |
1448 | mixedYawAngle = ClampInRange(-12, mixedYawAngle, 12); | ||
1450 | 1449 | ||
1451 | // Build the force vector to change rotation from what it is to what it should be | 1450 | // Build the force vector to change rotation from what it is to what it should be |
1452 | bankingContributionV.Z = -mixedYawAngle; | 1451 | bankingContributionV.Z = -mixedYawAngle; |
1453 | 1452 | ||
1454 | // Don't do it all at once. | 1453 | // Don't do it all at once. Fudge because 1 second is too fast with most user defined roll as PI*4. |
1455 | bankingContributionV /= m_bankingTimescale; | 1454 | bankingContributionV /= m_bankingTimescale * BSParam.VehicleAngularBankingTimescaleFudge; |
1456 | 1455 | ||
1457 | VehicleRotationalVelocity += bankingContributionV * VehicleOrientation; | 1456 | //VehicleRotationalVelocity += bankingContributionV * VehicleOrientation; |
1457 | VehicleRotationalVelocity += bankingContributionV; | ||
1458 | |||
1458 | 1459 | ||
1459 | VDetailLog("{0}, MoveAngular,Banking,rollComp={1},speed={2},rollComp={3},yAng={4},mYAng={5},ret={6}", | 1460 | VDetailLog("{0}, MoveAngular,Banking,rollComp={1},speed={2},rollComp={3},yAng={4},mYAng={5},ret={6}", |
1460 | Prim.LocalID, rollComponents, VehicleForwardSpeed, rollComponents, yawAngle, mixedYawAngle, bankingContributionV); | 1461 | Prim.LocalID, rollComponents, VehicleForwardSpeed, rollComponents, yawAngle, mixedYawAngle, bankingContributionV); |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 2af8468..77bdacb 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | |||
@@ -123,6 +123,7 @@ public static class BSParam | |||
123 | public static Vector3 VehicleLinearFactor { get; private set; } | 123 | public static Vector3 VehicleLinearFactor { get; private set; } |
124 | public static Vector3 VehicleAngularFactor { get; private set; } | 124 | public static Vector3 VehicleAngularFactor { get; private set; } |
125 | public static float VehicleGroundGravityFudge { get; private set; } | 125 | public static float VehicleGroundGravityFudge { get; private set; } |
126 | public static float VehicleAngularBankingTimescaleFudge { get; private set; } | ||
126 | public static bool VehicleDebuggingEnabled { get; private set; } | 127 | public static bool VehicleDebuggingEnabled { get; private set; } |
127 | 128 | ||
128 | // Linkset implementation parameters | 129 | // Linkset implementation parameters |
@@ -543,10 +544,14 @@ public static class BSParam | |||
543 | 0.0f, | 544 | 0.0f, |
544 | (s) => { return VehicleRestitution; }, | 545 | (s) => { return VehicleRestitution; }, |
545 | (s,v) => { VehicleRestitution = v; } ), | 546 | (s,v) => { VehicleRestitution = v; } ), |
546 | new ParameterDefn<float>("VehicleGroundGravityFudge", "Factor to multiple gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", | 547 | new ParameterDefn<float>("VehicleGroundGravityFudge", "Factor to multiply gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", |
547 | 0.2f, | 548 | 0.2f, |
548 | (s) => { return VehicleGroundGravityFudge; }, | 549 | (s) => { return VehicleGroundGravityFudge; }, |
549 | (s,v) => { VehicleGroundGravityFudge = v; } ), | 550 | (s,v) => { VehicleGroundGravityFudge = v; } ), |
551 | new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.", | ||
552 | 60.0f, | ||
553 | (s) => { return VehicleAngularBankingTimescaleFudge; }, | ||
554 | (s,v) => { VehicleAngularBankingTimescaleFudge = v; } ), | ||
550 | new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging", | 555 | new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging", |
551 | false, | 556 | false, |
552 | (s) => { return VehicleDebuggingEnabled; }, | 557 | (s) => { return VehicleDebuggingEnabled; }, |