diff options
author | Robert Adams | 2012-08-09 15:01:05 -0700 |
---|---|---|
committer | Robert Adams | 2012-08-09 15:01:05 -0700 |
commit | 38e79b80a87d213748d55d66e8b72021999d3945 (patch) | |
tree | f8da528b7cc0038e6df145c1ad70874c142a85e3 /OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs | |
parent | BulletSim: add avatar code to keep avatars from ending up trapped under the t... (diff) | |
download | opensim-SC_OLD-38e79b80a87d213748d55d66e8b72021999d3945.zip opensim-SC_OLD-38e79b80a87d213748d55d66e8b72021999d3945.tar.gz opensim-SC_OLD-38e79b80a87d213748d55d66e8b72021999d3945.tar.bz2 opensim-SC_OLD-38e79b80a87d213748d55d66e8b72021999d3945.tar.xz |
BulletSim: separate out the constraints by type. The linksets use
6dof constraint but eventually others will be exposed so future
features can use all the Bullet capabilities.
Force children to generate a position update when unlinked.
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs | 60 |
1 files changed, 11 insertions, 49 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs index ea3093a..a17efea 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint.cs | |||
@@ -32,30 +32,19 @@ using OpenMetaverse; | |||
32 | namespace OpenSim.Region.Physics.BulletSPlugin | 32 | namespace OpenSim.Region.Physics.BulletSPlugin |
33 | { | 33 | { |
34 | 34 | ||
35 | public class BSConstraint : IDisposable | 35 | public abstract class BSConstraint : IDisposable |
36 | { | 36 | { |
37 | private BulletSim m_world; | 37 | protected BulletSim m_world; |
38 | private BulletBody m_body1; | 38 | protected BulletBody m_body1; |
39 | private BulletBody m_body2; | 39 | protected BulletBody m_body2; |
40 | private BulletConstraint m_constraint; | 40 | protected BulletConstraint m_constraint; |
41 | private bool m_enabled = false; | 41 | protected bool m_enabled = false; |
42 | 42 | ||
43 | public BSConstraint(BulletSim world, BulletBody obj1, BulletBody obj2, | 43 | public BSConstraint() |
44 | Vector3 frame1, Quaternion frame1rot, | ||
45 | Vector3 frame2, Quaternion frame2rot | ||
46 | ) | ||
47 | { | 44 | { |
48 | m_world = world; | ||
49 | m_body1 = obj1; | ||
50 | m_body2 = obj2; | ||
51 | m_constraint = new BulletConstraint(BulletSimAPI.CreateConstraint2(m_world.Ptr, m_body1.Ptr, m_body2.Ptr, | ||
52 | frame1, frame1rot, | ||
53 | frame2, frame2rot, | ||
54 | true /*useLinearReferenceFrameA*/, true /*disableCollisionsBetweenLinkedBodies*/)); | ||
55 | m_enabled = true; | ||
56 | } | 45 | } |
57 | 46 | ||
58 | public void Dispose() | 47 | public virtual void Dispose() |
59 | { | 48 | { |
60 | if (m_enabled) | 49 | if (m_enabled) |
61 | { | 50 | { |
@@ -68,7 +57,7 @@ public class BSConstraint : IDisposable | |||
68 | public BulletBody Body1 { get { return m_body1; } } | 57 | public BulletBody Body1 { get { return m_body1; } } |
69 | public BulletBody Body2 { get { return m_body2; } } | 58 | public BulletBody Body2 { get { return m_body2; } } |
70 | 59 | ||
71 | public bool SetLinearLimits(Vector3 low, Vector3 high) | 60 | public virtual bool SetLinearLimits(Vector3 low, Vector3 high) |
72 | { | 61 | { |
73 | bool ret = false; | 62 | bool ret = false; |
74 | if (m_enabled) | 63 | if (m_enabled) |
@@ -76,7 +65,7 @@ public class BSConstraint : IDisposable | |||
76 | return ret; | 65 | return ret; |
77 | } | 66 | } |
78 | 67 | ||
79 | public bool SetAngularLimits(Vector3 low, Vector3 high) | 68 | public virtual bool SetAngularLimits(Vector3 low, Vector3 high) |
80 | { | 69 | { |
81 | bool ret = false; | 70 | bool ret = false; |
82 | if (m_enabled) | 71 | if (m_enabled) |
@@ -84,34 +73,7 @@ public class BSConstraint : IDisposable | |||
84 | return ret; | 73 | return ret; |
85 | } | 74 | } |
86 | 75 | ||
87 | public bool SetCFMAndERP(float cfm, float erp) | 76 | public virtual bool CalculateTransforms() |
88 | { | ||
89 | bool ret = true; | ||
90 | BulletSimAPI.SetConstraintParam2(m_constraint.Ptr, ConstraintParams.BT_CONSTRAINT_STOP_CFM, cfm, ConstraintParamAxis.AXIS_ALL); | ||
91 | BulletSimAPI.SetConstraintParam2(m_constraint.Ptr, ConstraintParams.BT_CONSTRAINT_STOP_ERP, erp, ConstraintParamAxis.AXIS_ALL); | ||
92 | BulletSimAPI.SetConstraintParam2(m_constraint.Ptr, ConstraintParams.BT_CONSTRAINT_CFM, cfm, ConstraintParamAxis.AXIS_ALL); | ||
93 | return ret; | ||
94 | } | ||
95 | |||
96 | public bool UseFrameOffset(bool useOffset) | ||
97 | { | ||
98 | bool ret = false; | ||
99 | float onOff = useOffset ? ConfigurationParameters.numericTrue : ConfigurationParameters.numericFalse; | ||
100 | if (m_enabled) | ||
101 | ret = BulletSimAPI.UseFrameOffset2(m_constraint.Ptr, onOff); | ||
102 | return ret; | ||
103 | } | ||
104 | |||
105 | public bool TranslationalLimitMotor(bool enable, float targetVelocity, float maxMotorForce) | ||
106 | { | ||
107 | bool ret = false; | ||
108 | float onOff = enable ? ConfigurationParameters.numericTrue : ConfigurationParameters.numericFalse; | ||
109 | if (m_enabled) | ||
110 | ret = BulletSimAPI.TranslationalLimitMotor2(m_constraint.Ptr, onOff, targetVelocity, maxMotorForce); | ||
111 | return ret; | ||
112 | } | ||
113 | |||
114 | public bool CalculateTransforms() | ||
115 | { | 77 | { |
116 | bool ret = false; | 78 | bool ret = false; |
117 | if (m_enabled) | 79 | if (m_enabled) |