diff options
author | Robert Adams | 2013-01-17 14:47:35 -0800 |
---|---|---|
committer | Robert Adams | 2013-01-17 14:47:35 -0800 |
commit | 75f710f1e70a3c9d3459d549eb4334a445aca834 (patch) | |
tree | c41b93551f101cfd10ea39567f10b759bbf3f355 /OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |
parent | Add utility function to clamp a vector to a maximum magnitude. (diff) | |
download | opensim-SC-75f710f1e70a3c9d3459d549eb4334a445aca834.zip opensim-SC-75f710f1e70a3c9d3459d549eb4334a445aca834.tar.gz opensim-SC-75f710f1e70a3c9d3459d549eb4334a445aca834.tar.bz2 opensim-SC-75f710f1e70a3c9d3459d549eb4334a445aca834.tar.xz |
BulletSim: Add one function that all actors who act on the physical
can use to know if the object is currently active.
Code cleaning including use of Util.ClampV function.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 79fe632..7aa2d92 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |||
@@ -132,8 +132,8 @@ public sealed class BSPrim : BSPhysObject | |||
132 | base.Destroy(); | 132 | base.Destroy(); |
133 | 133 | ||
134 | // Undo any links between me and any other object | 134 | // Undo any links between me and any other object |
135 | BSPhysObject parentBefore = Linkset.LinksetRoot; | 135 | BSPhysObject parentBefore = Linkset.LinksetRoot; // DEBUG DEBUG |
136 | int childrenBefore = Linkset.NumberOfChildren; | 136 | int childrenBefore = Linkset.NumberOfChildren; // DEBUG DEBUG |
137 | 137 | ||
138 | Linkset = Linkset.RemoveMeFromLinkset(this); | 138 | Linkset = Linkset.RemoveMeFromLinkset(this); |
139 | 139 | ||
@@ -727,6 +727,12 @@ public sealed class BSPrim : BSPhysObject | |||
727 | get { return !IsPhantom && !_isVolumeDetect; } | 727 | get { return !IsPhantom && !_isVolumeDetect; } |
728 | } | 728 | } |
729 | 729 | ||
730 | // The object is moving and is actively being dynamic in the physical world | ||
731 | public override bool IsPhysicallyActive | ||
732 | { | ||
733 | get { return !_isSelected && IsPhysical; } | ||
734 | } | ||
735 | |||
730 | // Make gravity work if the object is physical and not selected | 736 | // Make gravity work if the object is physical and not selected |
731 | // Called at taint-time!! | 737 | // Called at taint-time!! |
732 | private void SetObjectDynamic(bool forceRebuild) | 738 | private void SetObjectDynamic(bool forceRebuild) |
@@ -1174,18 +1180,11 @@ public sealed class BSPrim : BSPhysObject | |||
1174 | // This added force will only last the next simulation tick. | 1180 | // This added force will only last the next simulation tick. |
1175 | public void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { | 1181 | public void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { |
1176 | // for an object, doesn't matter if force is a pushforce or not | 1182 | // for an object, doesn't matter if force is a pushforce or not |
1177 | if (!IsStatic) | 1183 | if (IsPhysicallyActive) |
1178 | { | 1184 | { |
1179 | if (force.IsFinite()) | 1185 | if (force.IsFinite()) |
1180 | { | 1186 | { |
1181 | float magnitude = force.Length(); | 1187 | OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); |
1182 | if (magnitude > BSParam.MaxAddForceMagnitude) | ||
1183 | { | ||
1184 | // Force has a limit | ||
1185 | force = force / magnitude * BSParam.MaxAddForceMagnitude; | ||
1186 | } | ||
1187 | |||
1188 | OMV.Vector3 addForce = force; | ||
1189 | // DetailLog("{0},BSPrim.addForce,call,force={1}", LocalID, addForce); | 1188 | // DetailLog("{0},BSPrim.addForce,call,force={1}", LocalID, addForce); |
1190 | 1189 | ||
1191 | PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate() | 1190 | PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate() |
@@ -1209,19 +1208,13 @@ public sealed class BSPrim : BSPhysObject | |||
1209 | 1208 | ||
1210 | public void AddForceImpulse(OMV.Vector3 impulse, bool pushforce, bool inTaintTime) { | 1209 | public void AddForceImpulse(OMV.Vector3 impulse, bool pushforce, bool inTaintTime) { |
1211 | // for an object, doesn't matter if force is a pushforce or not | 1210 | // for an object, doesn't matter if force is a pushforce or not |
1212 | if (!IsStatic) | 1211 | if (!IsPhysicallyActive) |
1213 | { | 1212 | { |
1214 | if (impulse.IsFinite()) | 1213 | if (impulse.IsFinite()) |
1215 | { | 1214 | { |
1216 | float magnitude = impulse.Length(); | 1215 | OMV.Vector3 addImpulse = Util.ClampV(impulse, BSParam.MaxAddForceMagnitude); |
1217 | if (magnitude > BSParam.MaxAddForceMagnitude) | ||
1218 | { | ||
1219 | // Force has a limit | ||
1220 | impulse = impulse / magnitude * BSParam.MaxAddForceMagnitude; | ||
1221 | } | ||
1222 | |||
1223 | // DetailLog("{0},BSPrim.addForceImpulse,call,impulse={1}", LocalID, impulse); | 1216 | // DetailLog("{0},BSPrim.addForceImpulse,call,impulse={1}", LocalID, impulse); |
1224 | OMV.Vector3 addImpulse = impulse; | 1217 | |
1225 | PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddImpulse", delegate() | 1218 | PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddImpulse", delegate() |
1226 | { | 1219 | { |
1227 | // Bullet adds this impulse immediately to the velocity | 1220 | // Bullet adds this impulse immediately to the velocity |