diff options
author | Melanie | 2013-05-06 23:47:19 +0100 |
---|---|---|
committer | Melanie | 2013-05-06 23:47:19 +0100 |
commit | b36e123c7f159b6c97a5ecb03e113c0de8083879 (patch) | |
tree | 5aa79fe958adfc44929b25e86c2a72a46dd49422 | |
parent | Merge branch 'master' into careminster (diff) | |
parent | BulletSim: remove friction calcuation from BSMotor and move linear and (diff) | |
download | opensim-SC-b36e123c7f159b6c97a5ecb03e113c0de8083879.zip opensim-SC-b36e123c7f159b6c97a5ecb03e113c0de8083879.tar.gz opensim-SC-b36e123c7f159b6c97a5ecb03e113c0de8083879.tar.bz2 opensim-SC-b36e123c7f159b6c97a5ecb03e113c0de8083879.tar.xz |
Merge branch 'master' into careminster
12 files changed, 186 insertions, 268 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index c2fa1ed..50d8a73 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -161,6 +161,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
161 | availableMethods["admin_acl_add"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListAdd); | 161 | availableMethods["admin_acl_add"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListAdd); |
162 | availableMethods["admin_acl_remove"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListRemove); | 162 | availableMethods["admin_acl_remove"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListRemove); |
163 | availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList); | 163 | availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList); |
164 | availableMethods["admin_estate_reload"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcEstateReload); | ||
164 | 165 | ||
165 | // Misc | 166 | // Misc |
166 | availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch); | 167 | availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch); |
@@ -1903,6 +1904,22 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1903 | m_log.Info("[RADMIN]: Access List List Request complete"); | 1904 | m_log.Info("[RADMIN]: Access List List Request complete"); |
1904 | } | 1905 | } |
1905 | 1906 | ||
1907 | private void XmlRpcEstateReload(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) | ||
1908 | { | ||
1909 | m_log.Info("[RADMIN]: Received Estate Reload Request"); | ||
1910 | |||
1911 | Hashtable responseData = (Hashtable)response.Value; | ||
1912 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
1913 | |||
1914 | m_application.SceneManager.ForEachScene(s => | ||
1915 | s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false) | ||
1916 | ); | ||
1917 | |||
1918 | responseData["success"] = true; | ||
1919 | |||
1920 | m_log.Info("[RADMIN]: Estate Reload Request complete"); | ||
1921 | } | ||
1922 | |||
1906 | private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) | 1923 | private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) |
1907 | { | 1924 | { |
1908 | Hashtable responseData = (Hashtable)response.Value; | 1925 | Hashtable responseData = (Hashtable)response.Value; |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs index 4e067b5..ac8c30c 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs | |||
@@ -118,7 +118,6 @@ public class BSActorAvatarMove : BSActor | |||
118 | m_velocityMotor = new BSVMotor("BSCharacter.Velocity", | 118 | m_velocityMotor = new BSVMotor("BSCharacter.Velocity", |
119 | 0.2f, // time scale | 119 | 0.2f, // time scale |
120 | BSMotor.Infinite, // decay time scale | 120 | BSMotor.Infinite, // decay time scale |
121 | BSMotor.InfiniteVector, // friction timescale | ||
122 | 1f // efficiency | 121 | 1f // efficiency |
123 | ); | 122 | ); |
124 | // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages. | 123 | // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages. |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs index 3630ca8..8a79809 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorHover.cs | |||
@@ -102,7 +102,6 @@ public class BSActorHover : BSActor | |||
102 | m_hoverMotor = new BSFMotor("BSActorHover", | 102 | m_hoverMotor = new BSFMotor("BSActorHover", |
103 | m_controllingPrim.HoverTau, // timeScale | 103 | m_controllingPrim.HoverTau, // timeScale |
104 | BSMotor.Infinite, // decay time scale | 104 | BSMotor.Infinite, // decay time scale |
105 | BSMotor.Infinite, // friction timescale | ||
106 | 1f // efficiency | 105 | 1f // efficiency |
107 | ); | 106 | ); |
108 | m_hoverMotor.SetTarget(ComputeCurrentHoverHeight()); | 107 | m_hoverMotor.SetTarget(ComputeCurrentHoverHeight()); |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs index 7801d8e..8b0fdeb 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs | |||
@@ -64,9 +64,9 @@ public class BSActorLockAxis : BSActor | |||
64 | public override void Refresh() | 64 | public override void Refresh() |
65 | { | 65 | { |
66 | m_physicsScene.DetailLog("{0},BSActorLockAxis,refresh,lockedAxis={1},enabled={2},pActive={3}", | 66 | m_physicsScene.DetailLog("{0},BSActorLockAxis,refresh,lockedAxis={1},enabled={2},pActive={3}", |
67 | m_controllingPrim.LocalID, m_controllingPrim.LockedAxis, Enabled, m_controllingPrim.IsPhysicallyActive); | 67 | m_controllingPrim.LocalID, m_controllingPrim.LockedAngularAxis, Enabled, m_controllingPrim.IsPhysicallyActive); |
68 | // If all the axis are free, we don't need to exist | 68 | // If all the axis are free, we don't need to exist |
69 | if (m_controllingPrim.LockedAxis == m_controllingPrim.LockedAxisFree) | 69 | if (m_controllingPrim.LockedAngularAxis == m_controllingPrim.LockedAxisFree) |
70 | { | 70 | { |
71 | Enabled = false; | 71 | Enabled = false; |
72 | } | 72 | } |
@@ -123,23 +123,38 @@ public class BSActorLockAxis : BSActor | |||
123 | // Free to move linearly in the region | 123 | // Free to move linearly in the region |
124 | OMV.Vector3 linearLow = OMV.Vector3.Zero; | 124 | OMV.Vector3 linearLow = OMV.Vector3.Zero; |
125 | OMV.Vector3 linearHigh = m_physicsScene.TerrainManager.DefaultRegionSize; | 125 | OMV.Vector3 linearHigh = m_physicsScene.TerrainManager.DefaultRegionSize; |
126 | if (m_controllingPrim.LockedLinearAxis.X != BSPhysObject.FreeAxis) | ||
127 | { | ||
128 | linearLow.X = m_controllingPrim.RawPosition.X; | ||
129 | linearHigh.X = m_controllingPrim.RawPosition.X; | ||
130 | } | ||
131 | if (m_controllingPrim.LockedLinearAxis.Y != BSPhysObject.FreeAxis) | ||
132 | { | ||
133 | linearLow.Y = m_controllingPrim.RawPosition.Y; | ||
134 | linearHigh.Y = m_controllingPrim.RawPosition.Y; | ||
135 | } | ||
136 | if (m_controllingPrim.LockedLinearAxis.Z != BSPhysObject.FreeAxis) | ||
137 | { | ||
138 | linearLow.Z = m_controllingPrim.RawPosition.Z; | ||
139 | linearHigh.Z = m_controllingPrim.RawPosition.Z; | ||
140 | } | ||
126 | axisConstrainer.SetLinearLimits(linearLow, linearHigh); | 141 | axisConstrainer.SetLinearLimits(linearLow, linearHigh); |
127 | 142 | ||
128 | // Angular with some axis locked | 143 | // Angular with some axis locked |
129 | float fPI = (float)Math.PI; | 144 | float fPI = (float)Math.PI; |
130 | OMV.Vector3 angularLow = new OMV.Vector3(-fPI, -fPI, -fPI); | 145 | OMV.Vector3 angularLow = new OMV.Vector3(-fPI, -fPI, -fPI); |
131 | OMV.Vector3 angularHigh = new OMV.Vector3(fPI, fPI, fPI); | 146 | OMV.Vector3 angularHigh = new OMV.Vector3(fPI, fPI, fPI); |
132 | if (m_controllingPrim.LockedAxis.X != 1f) | 147 | if (m_controllingPrim.LockedAngularAxis.X != BSPhysObject.FreeAxis) |
133 | { | 148 | { |
134 | angularLow.X = 0f; | 149 | angularLow.X = 0f; |
135 | angularHigh.X = 0f; | 150 | angularHigh.X = 0f; |
136 | } | 151 | } |
137 | if (m_controllingPrim.LockedAxis.Y != 1f) | 152 | if (m_controllingPrim.LockedAngularAxis.Y != BSPhysObject.FreeAxis) |
138 | { | 153 | { |
139 | angularLow.Y = 0f; | 154 | angularLow.Y = 0f; |
140 | angularHigh.Y = 0f; | 155 | angularHigh.Y = 0f; |
141 | } | 156 | } |
142 | if (m_controllingPrim.LockedAxis.Z != 1f) | 157 | if (m_controllingPrim.LockedAngularAxis.Z != BSPhysObject.FreeAxis) |
143 | { | 158 | { |
144 | angularLow.Z = 0f; | 159 | angularLow.Z = 0f; |
145 | angularHigh.Z = 0f; | 160 | angularHigh.Z = 0f; |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs index 1b598fd..75ff24e 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorMoveToTarget.cs | |||
@@ -105,7 +105,6 @@ public class BSActorMoveToTarget : BSActor | |||
105 | m_targetMotor = new BSVMotor("BSActorMoveToTargget.Activate", | 105 | m_targetMotor = new BSVMotor("BSActorMoveToTargget.Activate", |
106 | m_controllingPrim.MoveToTargetTau, // timeScale | 106 | m_controllingPrim.MoveToTargetTau, // timeScale |
107 | BSMotor.Infinite, // decay time scale | 107 | BSMotor.Infinite, // decay time scale |
108 | BSMotor.InfiniteVector, // friction timescale | ||
109 | 1f // efficiency | 108 | 1f // efficiency |
110 | ); | 109 | ); |
111 | m_targetMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG so motor will output detail log messages. | 110 | m_targetMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG so motor will output detail log messages. |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs index c0f40fd..96fa0b6 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetForce.cs | |||
@@ -101,7 +101,7 @@ public class BSActorSetForce : BSActor | |||
101 | if (m_forceMotor == null) | 101 | if (m_forceMotor == null) |
102 | { | 102 | { |
103 | // A fake motor that might be used someday | 103 | // A fake motor that might be used someday |
104 | m_forceMotor = new BSFMotor("setForce", 1f, 1f, 1f, 1f); | 104 | m_forceMotor = new BSFMotor("setForce", 1f, 1f, 1f); |
105 | 105 | ||
106 | m_physicsScene.BeforeStep += Mover; | 106 | m_physicsScene.BeforeStep += Mover; |
107 | } | 107 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs index b3806e1..65098e1 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorSetTorque.cs | |||
@@ -101,7 +101,7 @@ public class BSActorSetTorque : BSActor | |||
101 | if (m_torqueMotor == null) | 101 | if (m_torqueMotor == null) |
102 | { | 102 | { |
103 | // A fake motor that might be used someday | 103 | // A fake motor that might be used someday |
104 | m_torqueMotor = new BSFMotor("setTorque", 1f, 1f, 1f, 1f); | 104 | m_torqueMotor = new BSFMotor("setTorque", 1f, 1f, 1f); |
105 | 105 | ||
106 | m_physicsScene.BeforeStep += Mover; | 106 | m_physicsScene.BeforeStep += Mover; |
107 | } | 107 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index c5bee6d..272a162 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | |||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
146 | enableAngularVerticalAttraction = true; | 146 | enableAngularVerticalAttraction = true; |
147 | enableAngularDeflection = false; | 147 | enableAngularDeflection = false; |
148 | enableAngularBanking = true; | 148 | enableAngularBanking = true; |
149 | if (BSParam.VehicleDebuggingEnabled) | 149 | if (BSParam.VehicleDebuggingEnable) |
150 | { | 150 | { |
151 | enableAngularVerticalAttraction = true; | 151 | enableAngularVerticalAttraction = true; |
152 | enableAngularDeflection = false; | 152 | enableAngularDeflection = false; |
@@ -235,7 +235,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
235 | // set all of the components to the same value | 235 | // set all of the components to the same value |
236 | case Vehicle.ANGULAR_FRICTION_TIMESCALE: | 236 | case Vehicle.ANGULAR_FRICTION_TIMESCALE: |
237 | m_angularFrictionTimescale = new Vector3(pValue, pValue, pValue); | 237 | m_angularFrictionTimescale = new Vector3(pValue, pValue, pValue); |
238 | m_angularMotor.FrictionTimescale = m_angularFrictionTimescale; | ||
239 | break; | 238 | break; |
240 | case Vehicle.ANGULAR_MOTOR_DIRECTION: | 239 | case Vehicle.ANGULAR_MOTOR_DIRECTION: |
241 | m_angularMotorDirection = new Vector3(pValue, pValue, pValue); | 240 | m_angularMotorDirection = new Vector3(pValue, pValue, pValue); |
@@ -244,7 +243,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
244 | break; | 243 | break; |
245 | case Vehicle.LINEAR_FRICTION_TIMESCALE: | 244 | case Vehicle.LINEAR_FRICTION_TIMESCALE: |
246 | m_linearFrictionTimescale = new Vector3(pValue, pValue, pValue); | 245 | m_linearFrictionTimescale = new Vector3(pValue, pValue, pValue); |
247 | m_linearMotor.FrictionTimescale = m_linearFrictionTimescale; | ||
248 | break; | 246 | break; |
249 | case Vehicle.LINEAR_MOTOR_DIRECTION: | 247 | case Vehicle.LINEAR_MOTOR_DIRECTION: |
250 | m_linearMotorDirection = new Vector3(pValue, pValue, pValue); | 248 | m_linearMotorDirection = new Vector3(pValue, pValue, pValue); |
@@ -265,7 +263,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
265 | { | 263 | { |
266 | case Vehicle.ANGULAR_FRICTION_TIMESCALE: | 264 | case Vehicle.ANGULAR_FRICTION_TIMESCALE: |
267 | m_angularFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z); | 265 | m_angularFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z); |
268 | m_angularMotor.FrictionTimescale = m_angularFrictionTimescale; | ||
269 | break; | 266 | break; |
270 | case Vehicle.ANGULAR_MOTOR_DIRECTION: | 267 | case Vehicle.ANGULAR_MOTOR_DIRECTION: |
271 | // Limit requested angular speed to 2 rps= 4 pi rads/sec | 268 | // Limit requested angular speed to 2 rps= 4 pi rads/sec |
@@ -278,7 +275,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
278 | break; | 275 | break; |
279 | case Vehicle.LINEAR_FRICTION_TIMESCALE: | 276 | case Vehicle.LINEAR_FRICTION_TIMESCALE: |
280 | m_linearFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z); | 277 | m_linearFrictionTimescale = new Vector3(pValue.X, pValue.Y, pValue.Z); |
281 | m_linearMotor.FrictionTimescale = m_linearFrictionTimescale; | ||
282 | break; | 278 | break; |
283 | case Vehicle.LINEAR_MOTOR_DIRECTION: | 279 | case Vehicle.LINEAR_MOTOR_DIRECTION: |
284 | m_linearMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z); | 280 | m_linearMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z); |
@@ -559,14 +555,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
559 | break; | 555 | break; |
560 | } | 556 | } |
561 | 557 | ||
562 | m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, | 558 | m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, m_linearMotorDecayTimescale, 1f); |
563 | m_linearMotorDecayTimescale, m_linearFrictionTimescale, | ||
564 | 1f); | ||
565 | m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging) | 559 | m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging) |
566 | 560 | ||
567 | m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, | 561 | m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, m_angularMotorDecayTimescale, 1f); |
568 | m_angularMotorDecayTimescale, m_angularFrictionTimescale, | ||
569 | 1f); | ||
570 | m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging) | 562 | m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging) |
571 | 563 | ||
572 | /* Not implemented | 564 | /* Not implemented |
@@ -574,7 +566,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
574 | BSMotor.Infinite, BSMotor.InfiniteVector, | 566 | BSMotor.Infinite, BSMotor.InfiniteVector, |
575 | m_verticalAttractionEfficiency); | 567 | m_verticalAttractionEfficiency); |
576 | // Z goes away and we keep X and Y | 568 | // Z goes away and we keep X and Y |
577 | m_verticalAttractionMotor.FrictionTimescale = new Vector3(BSMotor.Infinite, BSMotor.Infinite, 0.1f); | ||
578 | m_verticalAttractionMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG DEBUG (enables detail logging) | 569 | m_verticalAttractionMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG DEBUG (enables detail logging) |
579 | */ | 570 | */ |
580 | 571 | ||
@@ -1050,8 +1041,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1050 | // Add this correction to the velocity to make it faster/slower. | 1041 | // Add this correction to the velocity to make it faster/slower. |
1051 | VehicleVelocity += linearMotorVelocityW; | 1042 | VehicleVelocity += linearMotorVelocityW; |
1052 | 1043 | ||
1053 | VDetailLog("{0}, MoveLinear,velocity,origVelW={1},velV={2},correctV={3},correctW={4},newVelW={5}", | 1044 | // Friction reduces vehicle motion |
1054 | ControllingPrim.LocalID, origVelW, currentVelV, linearMotorCorrectionV, linearMotorVelocityW, VehicleVelocity); | 1045 | Vector3 frictionFactor = ComputeFrictionFactor(m_linearFrictionTimescale, pTimestep); |
1046 | VehicleVelocity -= (VehicleVelocity * frictionFactor); | ||
1047 | |||
1048 | VDetailLog("{0}, MoveLinear,velocity,origVelW={1},velV={2},correctV={3},correctW={4},newVelW={5},fricFact={6}", | ||
1049 | ControllingPrim.LocalID, origVelW, currentVelV, linearMotorCorrectionV, | ||
1050 | linearMotorVelocityW, VehicleVelocity, frictionFactor); | ||
1055 | } | 1051 | } |
1056 | 1052 | ||
1057 | public void ComputeLinearTerrainHeightCorrection(float pTimestep) | 1053 | public void ComputeLinearTerrainHeightCorrection(float pTimestep) |
@@ -1342,6 +1338,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1342 | // } | 1338 | // } |
1343 | 1339 | ||
1344 | VehicleRotationalVelocity += angularMotorContributionV * VehicleOrientation; | 1340 | VehicleRotationalVelocity += angularMotorContributionV * VehicleOrientation; |
1341 | |||
1342 | // Reduce any velocity by friction. | ||
1343 | Vector3 frictionFactor = ComputeFrictionFactor(m_angularFrictionTimescale, pTimestep); | ||
1344 | VehicleRotationalVelocity -= (VehicleRotationalVelocity * frictionFactor); | ||
1345 | |||
1345 | VDetailLog("{0}, MoveAngular,angularTurning,angularMotorContrib={1}", ControllingPrim.LocalID, angularMotorContributionV); | 1346 | VDetailLog("{0}, MoveAngular,angularTurning,angularMotorContrib={1}", ControllingPrim.LocalID, angularMotorContributionV); |
1346 | } | 1347 | } |
1347 | 1348 | ||
@@ -1629,6 +1630,23 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1629 | 1630 | ||
1630 | } | 1631 | } |
1631 | 1632 | ||
1633 | // Given a friction vector (reduction in seconds) and a timestep, return the factor to reduce | ||
1634 | // some value by to apply this friction. | ||
1635 | private Vector3 ComputeFrictionFactor(Vector3 friction, float pTimestep) | ||
1636 | { | ||
1637 | Vector3 frictionFactor = Vector3.Zero; | ||
1638 | if (friction != BSMotor.InfiniteVector) | ||
1639 | { | ||
1640 | // frictionFactor = (Vector3.One / FrictionTimescale) * timeStep; | ||
1641 | // Individual friction components can be 'infinite' so compute each separately. | ||
1642 | frictionFactor.X = (friction.X == BSMotor.Infinite) ? 0f : (1f / friction.X); | ||
1643 | frictionFactor.Y = (friction.Y == BSMotor.Infinite) ? 0f : (1f / friction.Y); | ||
1644 | frictionFactor.Z = (friction.Z == BSMotor.Infinite) ? 0f : (1f / friction.Z); | ||
1645 | frictionFactor *= pTimestep; | ||
1646 | } | ||
1647 | return frictionFactor; | ||
1648 | } | ||
1649 | |||
1632 | private float ClampInRange(float low, float val, float high) | 1650 | private float ClampInRange(float low, float val, float high) |
1633 | { | 1651 | { |
1634 | return Math.Max(low, Math.Min(val, high)); | 1652 | return Math.Max(low, Math.Min(val, high)); |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs index 0128d8d..ef662b5 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSMotors.cs | |||
@@ -65,13 +65,11 @@ public abstract class BSMotor | |||
65 | } | 65 | } |
66 | 66 | ||
67 | // Motor which moves CurrentValue to TargetValue over TimeScale seconds. | 67 | // Motor which moves CurrentValue to TargetValue over TimeScale seconds. |
68 | // The TargetValue decays in TargetValueDecayTimeScale and | 68 | // The TargetValue decays in TargetValueDecayTimeScale. |
69 | // the CurrentValue will be held back by FrictionTimeScale. | ||
70 | // This motor will "zero itself" over time in that the targetValue will | 69 | // This motor will "zero itself" over time in that the targetValue will |
71 | // decay to zero and the currentValue will follow it to that zero. | 70 | // decay to zero and the currentValue will follow it to that zero. |
72 | // The overall effect is for the returned correction value to go from large | 71 | // The overall effect is for the returned correction value to go from large |
73 | // values (the total difference between current and target minus friction) | 72 | // values to small and eventually zero values. |
74 | // to small and eventually zero values. | ||
75 | // TimeScale and TargetDelayTimeScale may be 'infinite' which means no decay. | 73 | // TimeScale and TargetDelayTimeScale may be 'infinite' which means no decay. |
76 | 74 | ||
77 | // For instance, if something is moving at speed X and the desired speed is Y, | 75 | // For instance, if something is moving at speed X and the desired speed is Y, |
@@ -88,7 +86,6 @@ public class BSVMotor : BSMotor | |||
88 | 86 | ||
89 | public virtual float TimeScale { get; set; } | 87 | public virtual float TimeScale { get; set; } |
90 | public virtual float TargetValueDecayTimeScale { get; set; } | 88 | public virtual float TargetValueDecayTimeScale { get; set; } |
91 | public virtual Vector3 FrictionTimescale { get; set; } | ||
92 | public virtual float Efficiency { get; set; } | 89 | public virtual float Efficiency { get; set; } |
93 | 90 | ||
94 | public virtual float ErrorZeroThreshold { get; set; } | 91 | public virtual float ErrorZeroThreshold { get; set; } |
@@ -111,16 +108,14 @@ public class BSVMotor : BSMotor | |||
111 | { | 108 | { |
112 | TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite; | 109 | TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite; |
113 | Efficiency = 1f; | 110 | Efficiency = 1f; |
114 | FrictionTimescale = BSMotor.InfiniteVector; | ||
115 | CurrentValue = TargetValue = Vector3.Zero; | 111 | CurrentValue = TargetValue = Vector3.Zero; |
116 | ErrorZeroThreshold = 0.001f; | 112 | ErrorZeroThreshold = 0.001f; |
117 | } | 113 | } |
118 | public BSVMotor(string useName, float timeScale, float decayTimeScale, Vector3 frictionTimeScale, float efficiency) | 114 | public BSVMotor(string useName, float timeScale, float decayTimeScale, float efficiency) |
119 | : this(useName) | 115 | : this(useName) |
120 | { | 116 | { |
121 | TimeScale = timeScale; | 117 | TimeScale = timeScale; |
122 | TargetValueDecayTimeScale = decayTimeScale; | 118 | TargetValueDecayTimeScale = decayTimeScale; |
123 | FrictionTimescale = frictionTimeScale; | ||
124 | Efficiency = efficiency; | 119 | Efficiency = efficiency; |
125 | CurrentValue = TargetValue = Vector3.Zero; | 120 | CurrentValue = TargetValue = Vector3.Zero; |
126 | } | 121 | } |
@@ -165,26 +160,11 @@ public class BSVMotor : BSMotor | |||
165 | TargetValue *= (1f - decayFactor); | 160 | TargetValue *= (1f - decayFactor); |
166 | } | 161 | } |
167 | 162 | ||
168 | // The amount we can correct the error is reduced by the friction | ||
169 | Vector3 frictionFactor = Vector3.Zero; | ||
170 | if (FrictionTimescale != BSMotor.InfiniteVector) | ||
171 | { | ||
172 | // frictionFactor = (Vector3.One / FrictionTimescale) * timeStep; | ||
173 | // Individual friction components can be 'infinite' so compute each separately. | ||
174 | frictionFactor.X = (FrictionTimescale.X == BSMotor.Infinite) ? 0f : (1f / FrictionTimescale.X); | ||
175 | frictionFactor.Y = (FrictionTimescale.Y == BSMotor.Infinite) ? 0f : (1f / FrictionTimescale.Y); | ||
176 | frictionFactor.Z = (FrictionTimescale.Z == BSMotor.Infinite) ? 0f : (1f / FrictionTimescale.Z); | ||
177 | frictionFactor *= timeStep; | ||
178 | CurrentValue *= (Vector3.One - frictionFactor); | ||
179 | } | ||
180 | |||
181 | MDetailLog("{0}, BSVMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}", | 163 | MDetailLog("{0}, BSVMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}", |
182 | BSScene.DetailLogZero, UseName, origCurrVal, origTarget, | 164 | BSScene.DetailLogZero, UseName, origCurrVal, origTarget, |
183 | timeStep, error, correction); | 165 | timeStep, error, correction); |
184 | MDetailLog("{0}, BSVMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},frictTS={4},frictFact={5},tgt={6},curr={7}", | 166 | MDetailLog("{0}, BSVMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},tgt={4},curr={5}", |
185 | BSScene.DetailLogZero, UseName, | 167 | BSScene.DetailLogZero, UseName, TargetValueDecayTimeScale, decayFactor, TargetValue, CurrentValue); |
186 | TargetValueDecayTimeScale, decayFactor, FrictionTimescale, frictionFactor, | ||
187 | TargetValue, CurrentValue); | ||
188 | } | 168 | } |
189 | else | 169 | else |
190 | { | 170 | { |
@@ -235,9 +215,9 @@ public class BSVMotor : BSMotor | |||
235 | // maximum number of outputs to generate. | 215 | // maximum number of outputs to generate. |
236 | int maxOutput = 50; | 216 | int maxOutput = 50; |
237 | MDetailLog("{0},BSVMotor.Test,{1},===================================== BEGIN Test Output", BSScene.DetailLogZero, UseName); | 217 | MDetailLog("{0},BSVMotor.Test,{1},===================================== BEGIN Test Output", BSScene.DetailLogZero, UseName); |
238 | MDetailLog("{0},BSVMotor.Test,{1},timeScale={2},targDlyTS={3},frictTS={4},eff={5},curr={6},tgt={7}", | 218 | MDetailLog("{0},BSVMotor.Test,{1},timeScale={2},targDlyTS={3},eff={4},curr={5},tgt={6}", |
239 | BSScene.DetailLogZero, UseName, | 219 | BSScene.DetailLogZero, UseName, |
240 | TimeScale, TargetValueDecayTimeScale, FrictionTimescale, Efficiency, | 220 | TimeScale, TargetValueDecayTimeScale, Efficiency, |
241 | CurrentValue, TargetValue); | 221 | CurrentValue, TargetValue); |
242 | 222 | ||
243 | LastError = BSMotor.InfiniteVector; | 223 | LastError = BSMotor.InfiniteVector; |
@@ -254,8 +234,8 @@ public class BSVMotor : BSMotor | |||
254 | 234 | ||
255 | public override string ToString() | 235 | public override string ToString() |
256 | { | 236 | { |
257 | return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4},frictTS={5}>", | 237 | return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4}>", |
258 | UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale, FrictionTimescale); | 238 | UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale); |
259 | } | 239 | } |
260 | } | 240 | } |
261 | 241 | ||
@@ -265,7 +245,6 @@ public class BSFMotor : BSMotor | |||
265 | { | 245 | { |
266 | public virtual float TimeScale { get; set; } | 246 | public virtual float TimeScale { get; set; } |
267 | public virtual float TargetValueDecayTimeScale { get; set; } | 247 | public virtual float TargetValueDecayTimeScale { get; set; } |
268 | public virtual float FrictionTimescale { get; set; } | ||
269 | public virtual float Efficiency { get; set; } | 248 | public virtual float Efficiency { get; set; } |
270 | 249 | ||
271 | public virtual float ErrorZeroThreshold { get; set; } | 250 | public virtual float ErrorZeroThreshold { get; set; } |
@@ -283,12 +262,11 @@ public class BSFMotor : BSMotor | |||
283 | return (err >= -ErrorZeroThreshold && err <= ErrorZeroThreshold); | 262 | return (err >= -ErrorZeroThreshold && err <= ErrorZeroThreshold); |
284 | } | 263 | } |
285 | 264 | ||
286 | public BSFMotor(string useName, float timeScale, float decayTimescale, float friction, float efficiency) | 265 | public BSFMotor(string useName, float timeScale, float decayTimescale, float efficiency) |
287 | : base(useName) | 266 | : base(useName) |
288 | { | 267 | { |
289 | TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite; | 268 | TimeScale = TargetValueDecayTimeScale = BSMotor.Infinite; |
290 | Efficiency = 1f; | 269 | Efficiency = 1f; |
291 | FrictionTimescale = BSMotor.Infinite; | ||
292 | CurrentValue = TargetValue = 0f; | 270 | CurrentValue = TargetValue = 0f; |
293 | ErrorZeroThreshold = 0.01f; | 271 | ErrorZeroThreshold = 0.01f; |
294 | } | 272 | } |
@@ -331,24 +309,11 @@ public class BSFMotor : BSMotor | |||
331 | TargetValue *= (1f - decayFactor); | 309 | TargetValue *= (1f - decayFactor); |
332 | } | 310 | } |
333 | 311 | ||
334 | // The amount we can correct the error is reduced by the friction | ||
335 | float frictionFactor = 0f; | ||
336 | if (FrictionTimescale != BSMotor.Infinite) | ||
337 | { | ||
338 | // frictionFactor = (Vector3.One / FrictionTimescale) * timeStep; | ||
339 | // Individual friction components can be 'infinite' so compute each separately. | ||
340 | frictionFactor = 1f / FrictionTimescale; | ||
341 | frictionFactor *= timeStep; | ||
342 | CurrentValue *= (1f - frictionFactor); | ||
343 | } | ||
344 | |||
345 | MDetailLog("{0}, BSFMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}", | 312 | MDetailLog("{0}, BSFMotor.Step,nonZero,{1},origCurr={2},origTarget={3},timeStep={4},err={5},corr={6}", |
346 | BSScene.DetailLogZero, UseName, origCurrVal, origTarget, | 313 | BSScene.DetailLogZero, UseName, origCurrVal, origTarget, |
347 | timeStep, error, correction); | 314 | timeStep, error, correction); |
348 | MDetailLog("{0}, BSFMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},frictTS={4},frictFact={5},tgt={6},curr={7}", | 315 | MDetailLog("{0}, BSFMotor.Step,nonZero,{1},tgtDecayTS={2},decayFact={3},tgt={4},curr={5}", |
349 | BSScene.DetailLogZero, UseName, | 316 | BSScene.DetailLogZero, UseName, TargetValueDecayTimeScale, decayFactor, TargetValue, CurrentValue); |
350 | TargetValueDecayTimeScale, decayFactor, FrictionTimescale, frictionFactor, | ||
351 | TargetValue, CurrentValue); | ||
352 | } | 317 | } |
353 | else | 318 | else |
354 | { | 319 | { |
@@ -390,8 +355,8 @@ public class BSFMotor : BSMotor | |||
390 | 355 | ||
391 | public override string ToString() | 356 | public override string ToString() |
392 | { | 357 | { |
393 | return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4},frictTS={5}>", | 358 | return String.Format("<{0},curr={1},targ={2},lastErr={3},decayTS={4}>", |
394 | UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale, FrictionTimescale); | 359 | UseName, CurrentValue, TargetValue, LastError, TargetValueDecayTimeScale); |
395 | } | 360 | } |
396 | 361 | ||
397 | } | 362 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 2ac68e3..3ca7e16 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | using System; | 27 | using System; |
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.Reflection; | ||
29 | using System.Text; | 30 | using System.Text; |
30 | 31 | ||
31 | using OpenSim.Region.Physics.Manager; | 32 | using OpenSim.Region.Physics.Manager; |
@@ -144,7 +145,7 @@ public static class BSParam | |||
144 | public static Vector3 VehicleAngularFactor { get; private set; } | 145 | public static Vector3 VehicleAngularFactor { get; private set; } |
145 | public static float VehicleGroundGravityFudge { get; private set; } | 146 | public static float VehicleGroundGravityFudge { get; private set; } |
146 | public static float VehicleAngularBankingTimescaleFudge { get; private set; } | 147 | public static float VehicleAngularBankingTimescaleFudge { get; private set; } |
147 | public static bool VehicleDebuggingEnabled { get; private set; } | 148 | public static bool VehicleDebuggingEnable { get; private set; } |
148 | 149 | ||
149 | // Convex Hulls | 150 | // Convex Hulls |
150 | public static int CSHullMaxDepthSplit { get; private set; } | 151 | public static int CSHullMaxDepthSplit { get; private set; } |
@@ -236,17 +237,41 @@ public static class BSParam | |||
236 | getter = pGetter; | 237 | getter = pGetter; |
237 | objectSet = pObjSetter; | 238 | objectSet = pObjSetter; |
238 | } | 239 | } |
239 | /* Wish I could simplify using this definition but CLR doesn't store references so closure around delegates of references won't work | 240 | // Simple parameter variable where property name is the same as the INI file name |
240 | * TODO: Maybe use reflection and the name of the variable to create a reference for the getter/setter. | 241 | // and the value is only a simple get and set. |
241 | public ParameterDefn(string pName, string pDesc, T pDefault, ref T loc) | 242 | public ParameterDefn(string pName, string pDesc, T pDefault) |
242 | : base(pName, pDesc) | 243 | : base(pName, pDesc) |
243 | { | 244 | { |
244 | defaultValue = pDefault; | 245 | defaultValue = pDefault; |
245 | setter = (s, v) => { loc = v; }; | 246 | setter = (s, v) => { SetValueByName(s, name, v); }; |
246 | getter = (s) => { return loc; }; | 247 | getter = (s) => { return GetValueByName(s, name); }; |
247 | objectSet = null; | 248 | objectSet = null; |
248 | } | 249 | } |
249 | */ | 250 | // Use reflection to find the property named 'pName' in BSParam and assign 'val' to same. |
251 | private void SetValueByName(BSScene s, string pName, T val) | ||
252 | { | ||
253 | PropertyInfo prop = typeof(BSParam).GetProperty(pName, BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); | ||
254 | if (prop == null) | ||
255 | { | ||
256 | // This should only be output when someone adds a new INI parameter and misspells the name. | ||
257 | s.Logger.ErrorFormat("{0} SetValueByName: did not find '{1}'. Verify specified property name is the same as the given INI parameters name.", LogHeader, pName); | ||
258 | } | ||
259 | else | ||
260 | { | ||
261 | prop.SetValue(null, val, null); | ||
262 | } | ||
263 | } | ||
264 | // Use reflection to find the property named 'pName' in BSParam and return the value in same. | ||
265 | private T GetValueByName(BSScene s, string pName) | ||
266 | { | ||
267 | PropertyInfo prop = typeof(BSParam).GetProperty(pName, BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); | ||
268 | if (prop == null) | ||
269 | { | ||
270 | // This should only be output when someone adds a new INI parameter and misspells the name. | ||
271 | s.Logger.ErrorFormat("{0} GetValueByName: did not find '{1}'. Verify specified property name is the same as the given INI parameter name.", LogHeader, pName); | ||
272 | } | ||
273 | return (T)prop.GetValue(null, null); | ||
274 | } | ||
250 | public override void AssignDefault(BSScene s) | 275 | public override void AssignDefault(BSScene s) |
251 | { | 276 | { |
252 | setter(s, defaultValue); | 277 | setter(s, defaultValue); |
@@ -336,26 +361,16 @@ public static class BSParam | |||
336 | (s) => { return ShouldUseHullsForPhysicalObjects; }, | 361 | (s) => { return ShouldUseHullsForPhysicalObjects; }, |
337 | (s,v) => { ShouldUseHullsForPhysicalObjects = v; } ), | 362 | (s,v) => { ShouldUseHullsForPhysicalObjects = v; } ), |
338 | new ParameterDefn<bool>("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes", | 363 | new ParameterDefn<bool>("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes", |
339 | true, | 364 | true ), |
340 | (s) => { return ShouldRemoveZeroWidthTriangles; }, | ||
341 | (s,v) => { ShouldRemoveZeroWidthTriangles = v; } ), | ||
342 | new ParameterDefn<bool>("ShouldUseBulletHACD", "If true, use the Bullet version of HACD", | 365 | new ParameterDefn<bool>("ShouldUseBulletHACD", "If true, use the Bullet version of HACD", |
343 | false, | 366 | false ), |
344 | (s) => { return ShouldUseBulletHACD; }, | ||
345 | (s,v) => { ShouldUseBulletHACD = v; } ), | ||
346 | new ParameterDefn<bool>("ShouldUseSingleConvexHullForPrims", "If true, use a single convex hull shape for physical prims", | 367 | new ParameterDefn<bool>("ShouldUseSingleConvexHullForPrims", "If true, use a single convex hull shape for physical prims", |
347 | true, | 368 | true ), |
348 | (s) => { return ShouldUseSingleConvexHullForPrims; }, | ||
349 | (s,v) => { ShouldUseSingleConvexHullForPrims = v; } ), | ||
350 | 369 | ||
351 | new ParameterDefn<int>("CrossingFailuresBeforeOutOfBounds", "How forgiving we are about getting into adjactent regions", | 370 | new ParameterDefn<int>("CrossingFailuresBeforeOutOfBounds", "How forgiving we are about getting into adjactent regions", |
352 | 5, | 371 | 5 ), |
353 | (s) => { return CrossingFailuresBeforeOutOfBounds; }, | ||
354 | (s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ), | ||
355 | new ParameterDefn<float>("UpdateVelocityChangeThreshold", "Change in updated velocity required before reporting change to simulator", | 372 | new ParameterDefn<float>("UpdateVelocityChangeThreshold", "Change in updated velocity required before reporting change to simulator", |
356 | 0.1f, | 373 | 0.1f ), |
357 | (s) => { return UpdateVelocityChangeThreshold; }, | ||
358 | (s,v) => { UpdateVelocityChangeThreshold = v; } ), | ||
359 | 374 | ||
360 | new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", | 375 | new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", |
361 | 32f, | 376 | 32f, |
@@ -422,18 +437,12 @@ public static class BSParam | |||
422 | (s,v) => { MaxAddForceMagnitude = v; MaxAddForceMagnitudeSquared = v * v; } ), | 437 | (s,v) => { MaxAddForceMagnitude = v; MaxAddForceMagnitudeSquared = v * v; } ), |
423 | // Density is passed around as 100kg/m3. This scales that to 1kg/m3. | 438 | // Density is passed around as 100kg/m3. This scales that to 1kg/m3. |
424 | new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)", | 439 | new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)", |
425 | 0.01f, | 440 | 0.01f ), |
426 | (s) => { return DensityScaleFactor; }, | ||
427 | (s,v) => { DensityScaleFactor = v; } ), | ||
428 | 441 | ||
429 | new ParameterDefn<float>("PID_D", "Derivitive factor for motion smoothing", | 442 | new ParameterDefn<float>("PID_D", "Derivitive factor for motion smoothing", |
430 | 2200f, | 443 | 2200f ), |
431 | (s) => { return (float)PID_D; }, | ||
432 | (s,v) => { PID_D = v; } ), | ||
433 | new ParameterDefn<float>("PID_P", "Parameteric factor for motion smoothing", | 444 | new ParameterDefn<float>("PID_P", "Parameteric factor for motion smoothing", |
434 | 900f, | 445 | 900f ), |
435 | (s) => { return (float)PID_P; }, | ||
436 | (s,v) => { PID_P = v; } ), | ||
437 | 446 | ||
438 | new ParameterDefn<float>("DefaultFriction", "Friction factor used on new objects", | 447 | new ParameterDefn<float>("DefaultFriction", "Friction factor used on new objects", |
439 | 0.2f, | 448 | 0.2f, |
@@ -500,94 +509,50 @@ public static class BSParam | |||
500 | (s,o) => { s.PE.SetContactProcessingThreshold(o.PhysBody, ContactProcessingThreshold); } ), | 509 | (s,o) => { s.PE.SetContactProcessingThreshold(o.PhysBody, ContactProcessingThreshold); } ), |
501 | 510 | ||
502 | new ParameterDefn<float>("TerrainImplementation", "Type of shape to use for terrain (0=heightmap, 1=mesh)", | 511 | new ParameterDefn<float>("TerrainImplementation", "Type of shape to use for terrain (0=heightmap, 1=mesh)", |
503 | (float)BSTerrainPhys.TerrainImplementation.Mesh, | 512 | (float)BSTerrainPhys.TerrainImplementation.Mesh ), |
504 | (s) => { return TerrainImplementation; }, | ||
505 | (s,v) => { TerrainImplementation = v; } ), | ||
506 | new ParameterDefn<int>("TerrainMeshMagnification", "Number of times the 256x256 heightmap is multiplied to create the terrain mesh" , | 513 | new ParameterDefn<int>("TerrainMeshMagnification", "Number of times the 256x256 heightmap is multiplied to create the terrain mesh" , |
507 | 2, | 514 | 2 ), |
508 | (s) => { return TerrainMeshMagnification; }, | ||
509 | (s,v) => { TerrainMeshMagnification = v; } ), | ||
510 | new ParameterDefn<float>("TerrainFriction", "Factor to reduce movement against terrain surface" , | 515 | new ParameterDefn<float>("TerrainFriction", "Factor to reduce movement against terrain surface" , |
511 | 0.3f, | 516 | 0.3f ), |
512 | (s) => { return TerrainFriction; }, | ||
513 | (s,v) => { TerrainFriction = v; /* TODO: set on real terrain */} ), | ||
514 | new ParameterDefn<float>("TerrainHitFraction", "Distance to measure hit collisions" , | 517 | new ParameterDefn<float>("TerrainHitFraction", "Distance to measure hit collisions" , |
515 | 0.8f, | 518 | 0.8f ), |
516 | (s) => { return TerrainHitFraction; }, | ||
517 | (s,v) => { TerrainHitFraction = v; /* TODO: set on real terrain */ } ), | ||
518 | new ParameterDefn<float>("TerrainRestitution", "Bouncyness" , | 519 | new ParameterDefn<float>("TerrainRestitution", "Bouncyness" , |
519 | 0f, | 520 | 0f ), |
520 | (s) => { return TerrainRestitution; }, | ||
521 | (s,v) => { TerrainRestitution = v; /* TODO: set on real terrain */ } ), | ||
522 | new ParameterDefn<float>("TerrainContactProcessingThreshold", "Distance from terrain to stop processing collisions" , | 521 | new ParameterDefn<float>("TerrainContactProcessingThreshold", "Distance from terrain to stop processing collisions" , |
523 | 0.0f, | 522 | 0.0f ), |
524 | (s) => { return TerrainContactProcessingThreshold; }, | ||
525 | (s,v) => { TerrainContactProcessingThreshold = v; /* TODO: set on real terrain */ } ), | ||
526 | new ParameterDefn<float>("TerrainCollisionMargin", "Margin where collision checking starts" , | 523 | new ParameterDefn<float>("TerrainCollisionMargin", "Margin where collision checking starts" , |
527 | 0.08f, | 524 | 0.08f ), |
528 | (s) => { return TerrainCollisionMargin; }, | ||
529 | (s,v) => { TerrainCollisionMargin = v; /* TODO: set on real terrain */ } ), | ||
530 | 525 | ||
531 | new ParameterDefn<float>("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", | 526 | new ParameterDefn<float>("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", |
532 | 0.2f, | 527 | 0.2f ), |
533 | (s) => { return AvatarFriction; }, | ||
534 | (s,v) => { AvatarFriction = v; } ), | ||
535 | new ParameterDefn<float>("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", | 528 | new ParameterDefn<float>("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", |
536 | 0.95f, | 529 | 0.95f ), |
537 | (s) => { return AvatarStandingFriction; }, | ||
538 | (s,v) => { AvatarStandingFriction = v; } ), | ||
539 | new ParameterDefn<float>("AvatarAlwaysRunFactor", "Speed multiplier if avatar is set to always run", | 530 | new ParameterDefn<float>("AvatarAlwaysRunFactor", "Speed multiplier if avatar is set to always run", |
540 | 1.3f, | 531 | 1.3f ), |
541 | (s) => { return AvatarAlwaysRunFactor; }, | ||
542 | (s,v) => { AvatarAlwaysRunFactor = v; } ), | ||
543 | new ParameterDefn<float>("AvatarDensity", "Density of an avatar. Changed on avatar recreation.", | 532 | new ParameterDefn<float>("AvatarDensity", "Density of an avatar. Changed on avatar recreation.", |
544 | 3.5f, | 533 | 3.5f) , |
545 | (s) => { return AvatarDensity; }, | ||
546 | (s,v) => { AvatarDensity = v; } ), | ||
547 | new ParameterDefn<float>("AvatarRestitution", "Bouncyness. Changed on avatar recreation.", | 534 | new ParameterDefn<float>("AvatarRestitution", "Bouncyness. Changed on avatar recreation.", |
548 | 0f, | 535 | 0f ), |
549 | (s) => { return AvatarRestitution; }, | ||
550 | (s,v) => { AvatarRestitution = v; } ), | ||
551 | new ParameterDefn<float>("AvatarCapsuleWidth", "The distance between the sides of the avatar capsule", | 536 | new ParameterDefn<float>("AvatarCapsuleWidth", "The distance between the sides of the avatar capsule", |
552 | 0.6f, | 537 | 0.6f ) , |
553 | (s) => { return AvatarCapsuleWidth; }, | ||
554 | (s,v) => { AvatarCapsuleWidth = v; } ), | ||
555 | new ParameterDefn<float>("AvatarCapsuleDepth", "The distance between the front and back of the avatar capsule", | 538 | new ParameterDefn<float>("AvatarCapsuleDepth", "The distance between the front and back of the avatar capsule", |
556 | 0.45f, | 539 | 0.45f ), |
557 | (s) => { return AvatarCapsuleDepth; }, | ||
558 | (s,v) => { AvatarCapsuleDepth = v; } ), | ||
559 | new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar", | 540 | new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar", |
560 | 1.5f, | 541 | 1.5f ), |
561 | (s) => { return AvatarCapsuleHeight; }, | ||
562 | (s,v) => { AvatarCapsuleHeight = v; } ), | ||
563 | new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", | 542 | new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", |
564 | 0.1f, | 543 | 0.1f ), |
565 | (s) => { return AvatarContactProcessingThreshold; }, | ||
566 | (s,v) => { AvatarContactProcessingThreshold = v; } ), | ||
567 | new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", | 544 | new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", |
568 | 1.0f, | 545 | 1.0f ), |
569 | (s) => { return AvatarBelowGroundUpCorrectionMeters; }, | ||
570 | (s,v) => { AvatarBelowGroundUpCorrectionMeters = v; } ), | ||
571 | new ParameterDefn<float>("AvatarStepHeight", "Height of a step obstacle to consider step correction", | 546 | new ParameterDefn<float>("AvatarStepHeight", "Height of a step obstacle to consider step correction", |
572 | 0.6f, | 547 | 0.6f ) , |
573 | (s) => { return AvatarStepHeight; }, | ||
574 | (s,v) => { AvatarStepHeight = v; } ), | ||
575 | new ParameterDefn<float>("AvatarStepApproachFactor", "Factor to control angle of approach to step (0=straight on)", | 548 | new ParameterDefn<float>("AvatarStepApproachFactor", "Factor to control angle of approach to step (0=straight on)", |
576 | 0.6f, | 549 | 0.6f ), |
577 | (s) => { return AvatarStepApproachFactor; }, | ||
578 | (s,v) => { AvatarStepApproachFactor = v; } ), | ||
579 | new ParameterDefn<float>("AvatarStepForceFactor", "Controls the amount of force up applied to step up onto a step", | 550 | new ParameterDefn<float>("AvatarStepForceFactor", "Controls the amount of force up applied to step up onto a step", |
580 | 1.0f, | 551 | 1.0f ), |
581 | (s) => { return AvatarStepForceFactor; }, | ||
582 | (s,v) => { AvatarStepForceFactor = v; } ), | ||
583 | new ParameterDefn<float>("AvatarStepUpCorrectionFactor", "Multiplied by height of step collision to create up movement at step", | 552 | new ParameterDefn<float>("AvatarStepUpCorrectionFactor", "Multiplied by height of step collision to create up movement at step", |
584 | 1.0f, | 553 | 1.0f ), |
585 | (s) => { return AvatarStepUpCorrectionFactor; }, | ||
586 | (s,v) => { AvatarStepUpCorrectionFactor = v; } ), | ||
587 | new ParameterDefn<int>("AvatarStepSmoothingSteps", "Number of frames after a step collision that we continue walking up stairs", | 554 | new ParameterDefn<int>("AvatarStepSmoothingSteps", "Number of frames after a step collision that we continue walking up stairs", |
588 | 2, | 555 | 2 ), |
589 | (s) => { return AvatarStepSmoothingSteps; }, | ||
590 | (s,v) => { AvatarStepSmoothingSteps = v; } ), | ||
591 | 556 | ||
592 | new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle", | 557 | new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle", |
593 | 1000.0f, | 558 | 1000.0f, |
@@ -598,37 +563,21 @@ public static class BSParam | |||
598 | (s) => { return (float)VehicleMaxAngularVelocity; }, | 563 | (s) => { return (float)VehicleMaxAngularVelocity; }, |
599 | (s,v) => { VehicleMaxAngularVelocity = v; VehicleMaxAngularVelocitySq = v * v; } ), | 564 | (s,v) => { VehicleMaxAngularVelocity = v; VehicleMaxAngularVelocitySq = v * v; } ), |
600 | new ParameterDefn<float>("VehicleAngularDamping", "Factor to damp vehicle angular movement per second (0.0 - 1.0)", | 565 | new ParameterDefn<float>("VehicleAngularDamping", "Factor to damp vehicle angular movement per second (0.0 - 1.0)", |
601 | 0.0f, | 566 | 0.0f ), |
602 | (s) => { return VehicleAngularDamping; }, | ||
603 | (s,v) => { VehicleAngularDamping = v; } ), | ||
604 | new ParameterDefn<Vector3>("VehicleLinearFactor", "Fraction of physical linear changes applied to vehicle (<0,0,0> to <1,1,1>)", | 567 | new ParameterDefn<Vector3>("VehicleLinearFactor", "Fraction of physical linear changes applied to vehicle (<0,0,0> to <1,1,1>)", |
605 | new Vector3(1f, 1f, 1f), | 568 | new Vector3(1f, 1f, 1f) ), |
606 | (s) => { return VehicleLinearFactor; }, | ||
607 | (s,v) => { VehicleLinearFactor = v; } ), | ||
608 | new ParameterDefn<Vector3>("VehicleAngularFactor", "Fraction of physical angular changes applied to vehicle (<0,0,0> to <1,1,1>)", | 569 | new ParameterDefn<Vector3>("VehicleAngularFactor", "Fraction of physical angular changes applied to vehicle (<0,0,0> to <1,1,1>)", |
609 | new Vector3(1f, 1f, 1f), | 570 | new Vector3(1f, 1f, 1f) ), |
610 | (s) => { return VehicleAngularFactor; }, | ||
611 | (s,v) => { VehicleAngularFactor = v; } ), | ||
612 | new ParameterDefn<float>("VehicleFriction", "Friction of vehicle on the ground (0.0 - 1.0)", | 571 | new ParameterDefn<float>("VehicleFriction", "Friction of vehicle on the ground (0.0 - 1.0)", |
613 | 0.0f, | 572 | 0.0f ), |
614 | (s) => { return VehicleFriction; }, | ||
615 | (s,v) => { VehicleFriction = v; } ), | ||
616 | new ParameterDefn<float>("VehicleRestitution", "Bouncyness factor for vehicles (0.0 - 1.0)", | 573 | new ParameterDefn<float>("VehicleRestitution", "Bouncyness factor for vehicles (0.0 - 1.0)", |
617 | 0.0f, | 574 | 0.0f ), |
618 | (s) => { return VehicleRestitution; }, | ||
619 | (s,v) => { VehicleRestitution = v; } ), | ||
620 | new ParameterDefn<float>("VehicleGroundGravityFudge", "Factor to multiply gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", | 575 | new ParameterDefn<float>("VehicleGroundGravityFudge", "Factor to multiply gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", |
621 | 0.2f, | 576 | 0.2f ), |
622 | (s) => { return VehicleGroundGravityFudge; }, | ||
623 | (s,v) => { VehicleGroundGravityFudge = v; } ), | ||
624 | new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.", | 577 | new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.", |
625 | 60.0f, | 578 | 60.0f ), |
626 | (s) => { return VehicleAngularBankingTimescaleFudge; }, | ||
627 | (s,v) => { VehicleAngularBankingTimescaleFudge = v; } ), | ||
628 | new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging", | 579 | new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging", |
629 | false, | 580 | false ), |
630 | (s) => { return VehicleDebuggingEnabled; }, | ||
631 | (s,v) => { VehicleDebuggingEnabled = v; } ), | ||
632 | 581 | ||
633 | new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)", | 582 | new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)", |
634 | 0f, | 583 | 0f, |
@@ -673,99 +622,53 @@ public static class BSParam | |||
673 | (s,v) => { GlobalContactBreakingThreshold = v; s.UnmanagedParams[0].globalContactBreakingThreshold = v; } ), | 622 | (s,v) => { GlobalContactBreakingThreshold = v; s.UnmanagedParams[0].globalContactBreakingThreshold = v; } ), |
674 | 623 | ||
675 | new ParameterDefn<int>("CSHullMaxDepthSplit", "CS impl: max depth to split for hull. 1-10 but > 7 is iffy", | 624 | new ParameterDefn<int>("CSHullMaxDepthSplit", "CS impl: max depth to split for hull. 1-10 but > 7 is iffy", |
676 | 7, | 625 | 7 ), |
677 | (s) => { return CSHullMaxDepthSplit; }, | ||
678 | (s,v) => { CSHullMaxDepthSplit = v; } ), | ||
679 | new ParameterDefn<int>("CSHullMaxDepthSplitForSimpleShapes", "CS impl: max depth setting for simple prim shapes", | 626 | new ParameterDefn<int>("CSHullMaxDepthSplitForSimpleShapes", "CS impl: max depth setting for simple prim shapes", |
680 | 2, | 627 | 2 ), |
681 | (s) => { return CSHullMaxDepthSplitForSimpleShapes; }, | ||
682 | (s,v) => { CSHullMaxDepthSplitForSimpleShapes = v; } ), | ||
683 | new ParameterDefn<float>("CSHullConcavityThresholdPercent", "CS impl: concavity threshold percent (0-20)", | 628 | new ParameterDefn<float>("CSHullConcavityThresholdPercent", "CS impl: concavity threshold percent (0-20)", |
684 | 5f, | 629 | 5f ), |
685 | (s) => { return CSHullConcavityThresholdPercent; }, | ||
686 | (s,v) => { CSHullConcavityThresholdPercent = v; } ), | ||
687 | new ParameterDefn<float>("CSHullVolumeConservationThresholdPercent", "percent volume conservation to collapse hulls (0-30)", | 630 | new ParameterDefn<float>("CSHullVolumeConservationThresholdPercent", "percent volume conservation to collapse hulls (0-30)", |
688 | 5f, | 631 | 5f ), |
689 | (s) => { return CSHullVolumeConservationThresholdPercent; }, | ||
690 | (s,v) => { CSHullVolumeConservationThresholdPercent = v; } ), | ||
691 | new ParameterDefn<int>("CSHullMaxVertices", "CS impl: maximum number of vertices in output hulls. Keep < 50.", | 632 | new ParameterDefn<int>("CSHullMaxVertices", "CS impl: maximum number of vertices in output hulls. Keep < 50.", |
692 | 32, | 633 | 32 ), |
693 | (s) => { return CSHullMaxVertices; }, | ||
694 | (s,v) => { CSHullMaxVertices = v; } ), | ||
695 | new ParameterDefn<float>("CSHullMaxSkinWidth", "CS impl: skin width to apply to output hulls.", | 634 | new ParameterDefn<float>("CSHullMaxSkinWidth", "CS impl: skin width to apply to output hulls.", |
696 | 0f, | 635 | 0f ), |
697 | (s) => { return CSHullMaxSkinWidth; }, | ||
698 | (s,v) => { CSHullMaxSkinWidth = v; } ), | ||
699 | 636 | ||
700 | new ParameterDefn<float>("BHullMaxVerticesPerHull", "Bullet impl: max number of vertices per created hull", | 637 | new ParameterDefn<float>("BHullMaxVerticesPerHull", "Bullet impl: max number of vertices per created hull", |
701 | 100f, | 638 | 100f ), |
702 | (s) => { return BHullMaxVerticesPerHull; }, | ||
703 | (s,v) => { BHullMaxVerticesPerHull = v; } ), | ||
704 | new ParameterDefn<float>("BHullMinClusters", "Bullet impl: minimum number of hulls to create per mesh", | 639 | new ParameterDefn<float>("BHullMinClusters", "Bullet impl: minimum number of hulls to create per mesh", |
705 | 2f, | 640 | 2f ), |
706 | (s) => { return BHullMinClusters; }, | ||
707 | (s,v) => { BHullMinClusters = v; } ), | ||
708 | new ParameterDefn<float>("BHullCompacityWeight", "Bullet impl: weight factor for how compact to make hulls", | 641 | new ParameterDefn<float>("BHullCompacityWeight", "Bullet impl: weight factor for how compact to make hulls", |
709 | 2f, | 642 | 0.1f ), |
710 | (s) => { return BHullCompacityWeight; }, | ||
711 | (s,v) => { BHullCompacityWeight = v; } ), | ||
712 | new ParameterDefn<float>("BHullVolumeWeight", "Bullet impl: weight factor for volume in created hull", | 643 | new ParameterDefn<float>("BHullVolumeWeight", "Bullet impl: weight factor for volume in created hull", |
713 | 0.1f, | 644 | 0f ), |
714 | (s) => { return BHullVolumeWeight; }, | ||
715 | (s,v) => { BHullVolumeWeight = v; } ), | ||
716 | new ParameterDefn<float>("BHullConcavity", "Bullet impl: weight factor for how convex a created hull can be", | 645 | new ParameterDefn<float>("BHullConcavity", "Bullet impl: weight factor for how convex a created hull can be", |
717 | 100f, | 646 | 100f ), |
718 | (s) => { return BHullConcavity; }, | ||
719 | (s,v) => { BHullConcavity = v; } ), | ||
720 | new ParameterDefn<bool>("BHullAddExtraDistPoints", "Bullet impl: whether to add extra vertices for long distance vectors", | 647 | new ParameterDefn<bool>("BHullAddExtraDistPoints", "Bullet impl: whether to add extra vertices for long distance vectors", |
721 | false, | 648 | false ), |
722 | (s) => { return BHullAddExtraDistPoints; }, | ||
723 | (s,v) => { BHullAddExtraDistPoints = v; } ), | ||
724 | new ParameterDefn<bool>("BHullAddNeighboursDistPoints", "Bullet impl: whether to add extra vertices between neighbor hulls", | 649 | new ParameterDefn<bool>("BHullAddNeighboursDistPoints", "Bullet impl: whether to add extra vertices between neighbor hulls", |
725 | false, | 650 | false ), |
726 | (s) => { return BHullAddNeighboursDistPoints; }, | ||
727 | (s,v) => { BHullAddNeighboursDistPoints = v; } ), | ||
728 | new ParameterDefn<bool>("BHullAddFacesPoints", "Bullet impl: whether to add extra vertices to break up hull faces", | 651 | new ParameterDefn<bool>("BHullAddFacesPoints", "Bullet impl: whether to add extra vertices to break up hull faces", |
729 | false, | 652 | false ), |
730 | (s) => { return BHullAddFacesPoints; }, | ||
731 | (s,v) => { BHullAddFacesPoints = v; } ), | ||
732 | new ParameterDefn<bool>("BHullShouldAdjustCollisionMargin", "Bullet impl: whether to shrink resulting hulls to account for collision margin", | 653 | new ParameterDefn<bool>("BHullShouldAdjustCollisionMargin", "Bullet impl: whether to shrink resulting hulls to account for collision margin", |
733 | false, | 654 | false ), |
734 | (s) => { return BHullShouldAdjustCollisionMargin; }, | ||
735 | (s,v) => { BHullShouldAdjustCollisionMargin = v; } ), | ||
736 | 655 | ||
737 | new ParameterDefn<float>("LinksetImplementation", "Type of linkset implementation (0=Constraint, 1=Compound, 2=Manual)", | 656 | new ParameterDefn<float>("LinksetImplementation", "Type of linkset implementation (0=Constraint, 1=Compound, 2=Manual)", |
738 | (float)BSLinkset.LinksetImplementation.Compound, | 657 | (float)BSLinkset.LinksetImplementation.Compound ), |
739 | (s) => { return LinksetImplementation; }, | ||
740 | (s,v) => { LinksetImplementation = v; } ), | ||
741 | new ParameterDefn<bool>("LinkConstraintUseFrameOffset", "For linksets built with constraints, enable frame offsetFor linksets built with constraints, enable frame offset.", | 658 | new ParameterDefn<bool>("LinkConstraintUseFrameOffset", "For linksets built with constraints, enable frame offsetFor linksets built with constraints, enable frame offset.", |
742 | false, | 659 | false ), |
743 | (s) => { return LinkConstraintUseFrameOffset; }, | ||
744 | (s,v) => { LinkConstraintUseFrameOffset = v; } ), | ||
745 | new ParameterDefn<bool>("LinkConstraintEnableTransMotor", "Whether to enable translational motor on linkset constraints", | 660 | new ParameterDefn<bool>("LinkConstraintEnableTransMotor", "Whether to enable translational motor on linkset constraints", |
746 | true, | 661 | true ), |
747 | (s) => { return LinkConstraintEnableTransMotor; }, | ||
748 | (s,v) => { LinkConstraintEnableTransMotor = v; } ), | ||
749 | new ParameterDefn<float>("LinkConstraintTransMotorMaxVel", "Maximum velocity to be applied by translational motor in linkset constraints", | 662 | new ParameterDefn<float>("LinkConstraintTransMotorMaxVel", "Maximum velocity to be applied by translational motor in linkset constraints", |
750 | 5.0f, | 663 | 5.0f ), |
751 | (s) => { return LinkConstraintTransMotorMaxVel; }, | ||
752 | (s,v) => { LinkConstraintTransMotorMaxVel = v; } ), | ||
753 | new ParameterDefn<float>("LinkConstraintTransMotorMaxForce", "Maximum force to be applied by translational motor in linkset constraints", | 664 | new ParameterDefn<float>("LinkConstraintTransMotorMaxForce", "Maximum force to be applied by translational motor in linkset constraints", |
754 | 0.1f, | 665 | 0.1f ), |
755 | (s) => { return LinkConstraintTransMotorMaxForce; }, | ||
756 | (s,v) => { LinkConstraintTransMotorMaxForce = v; } ), | ||
757 | new ParameterDefn<float>("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", | 666 | new ParameterDefn<float>("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", |
758 | 0.1f, | 667 | 0.1f ), |
759 | (s) => { return LinkConstraintCFM; }, | ||
760 | (s,v) => { LinkConstraintCFM = v; } ), | ||
761 | new ParameterDefn<float>("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", | 668 | new ParameterDefn<float>("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", |
762 | 0.1f, | 669 | 0.1f ), |
763 | (s) => { return LinkConstraintERP; }, | ||
764 | (s,v) => { LinkConstraintERP = v; } ), | ||
765 | new ParameterDefn<float>("LinkConstraintSolverIterations", "Number of solver iterations when computing constraint. (0 = Bullet default)", | 670 | new ParameterDefn<float>("LinkConstraintSolverIterations", "Number of solver iterations when computing constraint. (0 = Bullet default)", |
766 | 40, | 671 | 40 ), |
767 | (s) => { return LinkConstraintSolverIterations; }, | ||
768 | (s,v) => { LinkConstraintSolverIterations = v; } ), | ||
769 | 672 | ||
770 | new ParameterDefn<int>("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)", | 673 | new ParameterDefn<int>("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)", |
771 | 0, | 674 | 0, |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs index e796804..cca887a 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs | |||
@@ -108,7 +108,8 @@ public abstract class BSPhysObject : PhysicsActor | |||
108 | CollisionScore = 0; | 108 | CollisionScore = 0; |
109 | 109 | ||
110 | // All axis free. | 110 | // All axis free. |
111 | LockedAxis = LockedAxisFree; | 111 | LockedLinearAxis = LockedAxisFree; |
112 | LockedAngularAxis = LockedAxisFree; | ||
112 | } | 113 | } |
113 | 114 | ||
114 | // Tell the object to clean up. | 115 | // Tell the object to clean up. |
@@ -265,8 +266,10 @@ public abstract class BSPhysObject : PhysicsActor | |||
265 | // Note this is a displacement from the root's coordinates. Zero means use the root prim as center-of-mass. | 266 | // Note this is a displacement from the root's coordinates. Zero means use the root prim as center-of-mass. |
266 | public OMV.Vector3? UserSetCenterOfMassDisplacement { get; set; } | 267 | public OMV.Vector3? UserSetCenterOfMassDisplacement { get; set; } |
267 | 268 | ||
268 | public OMV.Vector3 LockedAxis { get; set; } // zero means locked. one means free. | 269 | public OMV.Vector3 LockedLinearAxis { get; set; } // zero means locked. one means free. |
269 | public readonly OMV.Vector3 LockedAxisFree = new OMV.Vector3(1f, 1f, 1f); // All axis are free | 270 | public OMV.Vector3 LockedAngularAxis { get; set; } // zero means locked. one means free. |
271 | public const float FreeAxis = 1f; | ||
272 | public readonly OMV.Vector3 LockedAxisFree = new OMV.Vector3(FreeAxis, FreeAxis, FreeAxis); // All axis are free | ||
270 | 273 | ||
271 | // Enable physical actions. Bullet will keep sleeping non-moving physical objects so | 274 | // Enable physical actions. Bullet will keep sleeping non-moving physical objects so |
272 | // they need waking up when parameters are changed. | 275 | // they need waking up when parameters are changed. |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index d3f3475..f5b0361 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |||
@@ -256,9 +256,9 @@ public class BSPrim : BSPhysObject | |||
256 | if (axis.X != 1) locking.X = 0f; | 256 | if (axis.X != 1) locking.X = 0f; |
257 | if (axis.Y != 1) locking.Y = 0f; | 257 | if (axis.Y != 1) locking.Y = 0f; |
258 | if (axis.Z != 1) locking.Z = 0f; | 258 | if (axis.Z != 1) locking.Z = 0f; |
259 | LockedAxis = locking; | 259 | LockedAngularAxis = locking; |
260 | 260 | ||
261 | EnableActor(LockedAxis != LockedAxisFree, LockedAxisActorName, delegate() | 261 | EnableActor(LockedAngularAxis != LockedAxisFree, LockedAxisActorName, delegate() |
262 | { | 262 | { |
263 | return new BSActorLockAxis(PhysScene, this, LockedAxisActorName); | 263 | return new BSActorLockAxis(PhysScene, this, LockedAxisActorName); |
264 | }); | 264 | }); |