diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs')
-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 |