diff options
author | Robert Adams | 2012-07-31 09:23:05 -0700 |
---|---|---|
committer | Robert Adams | 2012-07-31 09:23:05 -0700 |
commit | 50dbb9ffe480b08f13f7bebb8259193dc00f88dd (patch) | |
tree | 20a35e254d4ec9180b75af2e0a02e61dec53e028 /OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC-50dbb9ffe480b08f13f7bebb8259193dc00f88dd.zip opensim-SC-50dbb9ffe480b08f13f7bebb8259193dc00f88dd.tar.gz opensim-SC-50dbb9ffe480b08f13f7bebb8259193dc00f88dd.tar.bz2 opensim-SC-50dbb9ffe480b08f13f7bebb8259193dc00f88dd.tar.xz |
BulletSim: add parameters and API calls for setting ERP and CFM.
Set ERP and CFM in linkset constraints.
Reorder rebuilding of object bodies so they are not rebuilt everytime
something is linked and unlinked.
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSScene.cs')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index c6d622b..28d5cb5 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -315,6 +315,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
315 | public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, bool isFlying) | 315 | public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, bool isFlying) |
316 | { | 316 | { |
317 | // m_log.DebugFormat("{0}: AddAvatar: {1}", LogHeader, avName); | 317 | // m_log.DebugFormat("{0}: AddAvatar: {1}", LogHeader, avName); |
318 | |||
319 | if (!m_initialized) return null; | ||
320 | |||
318 | BSCharacter actor = new BSCharacter(localID, avName, this, position, size, isFlying); | 321 | BSCharacter actor = new BSCharacter(localID, avName, this, position, size, isFlying); |
319 | lock (m_avatars) m_avatars.Add(localID, actor); | 322 | lock (m_avatars) m_avatars.Add(localID, actor); |
320 | return actor; | 323 | return actor; |
@@ -323,6 +326,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
323 | public override void RemoveAvatar(PhysicsActor actor) | 326 | public override void RemoveAvatar(PhysicsActor actor) |
324 | { | 327 | { |
325 | // m_log.DebugFormat("{0}: RemoveAvatar", LogHeader); | 328 | // m_log.DebugFormat("{0}: RemoveAvatar", LogHeader); |
329 | |||
330 | if (!m_initialized) return; | ||
331 | |||
326 | BSCharacter bsactor = actor as BSCharacter; | 332 | BSCharacter bsactor = actor as BSCharacter; |
327 | if (bsactor != null) | 333 | if (bsactor != null) |
328 | { | 334 | { |
@@ -341,6 +347,8 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
341 | 347 | ||
342 | public override void RemovePrim(PhysicsActor prim) | 348 | public override void RemovePrim(PhysicsActor prim) |
343 | { | 349 | { |
350 | if (!m_initialized) return; | ||
351 | |||
344 | BSPrim bsprim = prim as BSPrim; | 352 | BSPrim bsprim = prim as BSPrim; |
345 | if (bsprim != null) | 353 | if (bsprim != null) |
346 | { | 354 | { |
@@ -366,6 +374,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
366 | Vector3 size, Quaternion rotation, bool isPhysical, uint localID) | 374 | Vector3 size, Quaternion rotation, bool isPhysical, uint localID) |
367 | { | 375 | { |
368 | // m_log.DebugFormat("{0}: AddPrimShape2: {1}", LogHeader, primName); | 376 | // m_log.DebugFormat("{0}: AddPrimShape2: {1}", LogHeader, primName); |
377 | |||
378 | if (!m_initialized) return null; | ||
379 | |||
369 | BSPrim prim = new BSPrim(localID, primName, this, position, size, rotation, pbs, isPhysical); | 380 | BSPrim prim = new BSPrim(localID, primName, this, position, size, rotation, pbs, isPhysical); |
370 | lock (m_prims) m_prims.Add(localID, prim); | 381 | lock (m_prims) m_prims.Add(localID, prim); |
371 | return prim; | 382 | return prim; |
@@ -807,6 +818,12 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
807 | 818 | ||
808 | // List of all of the externally visible parameters. | 819 | // List of all of the externally visible parameters. |
809 | // For each parameter, this table maps a text name to getter and setters. | 820 | // For each parameter, this table maps a text name to getter and setters. |
821 | // To add a new externally referencable/settable parameter, add the paramter storage | ||
822 | // location somewhere in the program and make an entry in this table with the | ||
823 | // getters and setters. | ||
824 | // To add a new variable, it is easiest to find an existing definition and copy it. | ||
825 | // Parameter values are floats. Booleans are converted to a floating value. | ||
826 | // | ||
810 | // A ParameterDefn() takes the following parameters: | 827 | // A ParameterDefn() takes the following parameters: |
811 | // -- the text name of the parameter. This is used for console input and ini file. | 828 | // -- the text name of the parameter. This is used for console input and ini file. |
812 | // -- a short text description of the parameter. This shows up in the console listing. | 829 | // -- a short text description of the parameter. This shows up in the console listing. |
@@ -815,7 +832,12 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
815 | // -- a delegate for getting the value as a float | 832 | // -- a delegate for getting the value as a float |
816 | // -- a delegate for setting the value from a float | 833 | // -- a delegate for setting the value from a float |
817 | // | 834 | // |
818 | // To add a new variable, it is best to find an existing definition and copy it. | 835 | // The single letter parameters for the delegates are: |
836 | // s = BSScene | ||
837 | // p = string parameter name | ||
838 | // l = localID of referenced object | ||
839 | // v = float value | ||
840 | // cf = parameter configuration class (for fetching values from ini file) | ||
819 | private ParameterDefn[] ParameterDefinitions = | 841 | private ParameterDefn[] ParameterDefinitions = |
820 | { | 842 | { |
821 | new ParameterDefn("MeshSculptedPrim", "Whether to create meshes for sculpties", | 843 | new ParameterDefn("MeshSculptedPrim", "Whether to create meshes for sculpties", |
@@ -1048,6 +1070,16 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
1048 | (s,cf,p,v) => { s.m_params[0].linkConstraintTransMotorMaxForce = cf.GetFloat(p, v); }, | 1070 | (s,cf,p,v) => { s.m_params[0].linkConstraintTransMotorMaxForce = cf.GetFloat(p, v); }, |
1049 | (s) => { return s.m_params[0].linkConstraintTransMotorMaxForce; }, | 1071 | (s) => { return s.m_params[0].linkConstraintTransMotorMaxForce; }, |
1050 | (s,p,l,v) => { s.m_params[0].linkConstraintTransMotorMaxForce = v; } ), | 1072 | (s,p,l,v) => { s.m_params[0].linkConstraintTransMotorMaxForce = v; } ), |
1073 | new ParameterDefn("LinkConstraintCFM", "Amount constraint can be violated. 0=none, 1=all. Default=0", | ||
1074 | 0.0f, | ||
1075 | (s,cf,p,v) => { s.m_params[0].linkConstraintCFM = cf.GetFloat(p, v); }, | ||
1076 | (s) => { return s.m_params[0].linkConstraintCFM; }, | ||
1077 | (s,p,l,v) => { s.m_params[0].linkConstraintCFM = v; } ), | ||
1078 | new ParameterDefn("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", | ||
1079 | 0.2f, | ||
1080 | (s,cf,p,v) => { s.m_params[0].linkConstraintERP = cf.GetFloat(p, v); }, | ||
1081 | (s) => { return s.m_params[0].linkConstraintERP; }, | ||
1082 | (s,p,l,v) => { s.m_params[0].linkConstraintERP = v; } ), | ||
1051 | 1083 | ||
1052 | new ParameterDefn("DetailedStats", "Frames between outputting detailed phys stats. (0 is off)", | 1084 | new ParameterDefn("DetailedStats", "Frames between outputting detailed phys stats. (0 is off)", |
1053 | 0f, | 1085 | 0f, |