aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
diff options
context:
space:
mode:
authorRobert Adams2013-01-17 14:47:35 -0800
committerRobert Adams2013-01-17 14:47:35 -0800
commit75f710f1e70a3c9d3459d549eb4334a445aca834 (patch)
treec41b93551f101cfd10ea39567f10b759bbf3f355 /OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
parentAdd utility function to clamp a vector to a maximum magnitude. (diff)
downloadopensim-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 'OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs33
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