diff options
author | Robert Adams | 2013-05-03 15:46:35 -0700 |
---|---|---|
committer | Robert Adams | 2013-05-06 13:32:22 -0700 |
commit | f9fb1484aa00f8bfadead06ce71d004502fb564e (patch) | |
tree | a8af22458ad7f191a9736ce0531fbf30c5d4987b /OpenSim/Region/Physics | |
parent | Added new method to Remote Admin for reloading the estate settings. This is m... (diff) | |
download | opensim-SC_OLD-f9fb1484aa00f8bfadead06ce71d004502fb564e.zip opensim-SC_OLD-f9fb1484aa00f8bfadead06ce71d004502fb564e.tar.gz opensim-SC_OLD-f9fb1484aa00f8bfadead06ce71d004502fb564e.tar.bz2 opensim-SC_OLD-f9fb1484aa00f8bfadead06ce71d004502fb564e.tar.xz |
BulletSim: extend BSActorLockAxis to allow locking linear movement in
addition to angular movement. Not enabled by anything yet.
Diffstat (limited to 'OpenSim/Region/Physics')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs | 25 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs | 9 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 4 |
3 files changed, 28 insertions, 10 deletions
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/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 | }); |