aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs5
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs28
2 files changed, 29 insertions, 4 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 9525a11..19de1e5 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -304,17 +304,21 @@ public abstract class BSPhysObject : PhysicsActor
304 string identifier = op + "-" + id.ToString(); 304 string identifier = op + "-" + id.ToString();
305 RegisteredActions[identifier] = actn; 305 RegisteredActions[identifier] = actn;
306 PhysicsScene.BeforeStep += actn; 306 PhysicsScene.BeforeStep += actn;
307 DetailLog("{0},BSPhysObject.RegisterPreStepAction,id={1}", LocalID, identifier);
307 } 308 }
308 309
309 // Unregister a pre step action. Safe to call if the action has not been registered. 310 // Unregister a pre step action. Safe to call if the action has not been registered.
310 protected void UnRegisterPreStepAction(string op, uint id) 311 protected void UnRegisterPreStepAction(string op, uint id)
311 { 312 {
312 string identifier = op + "-" + id.ToString(); 313 string identifier = op + "-" + id.ToString();
314 bool removed = false;
313 if (RegisteredActions.ContainsKey(identifier)) 315 if (RegisteredActions.ContainsKey(identifier))
314 { 316 {
315 PhysicsScene.BeforeStep -= RegisteredActions[identifier]; 317 PhysicsScene.BeforeStep -= RegisteredActions[identifier];
316 RegisteredActions.Remove(identifier); 318 RegisteredActions.Remove(identifier);
319 removed = true;
317 } 320 }
321 DetailLog("{0},BSPhysObject.UnRegisterPreStepAction,id={1},removed={2}", LocalID, identifier, removed);
318 } 322 }
319 323
320 protected void UnRegisterAllPreStepActions() 324 protected void UnRegisterAllPreStepActions()
@@ -324,6 +328,7 @@ public abstract class BSPhysObject : PhysicsActor
324 PhysicsScene.BeforeStep -= kvp.Value; 328 PhysicsScene.BeforeStep -= kvp.Value;
325 } 329 }
326 RegisteredActions.Clear(); 330 RegisteredActions.Clear();
331 DetailLog("{0},BSPhysObject.UnRegisterAllPreStepActions,", LocalID);
327 } 332 }
328 333
329 334
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index e6aeebb..d137b2a 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -442,8 +442,12 @@ public sealed class BSPrim : BSPhysObject
442 RegisterPreStepAction("BSPrim.setForce", LocalID, 442 RegisterPreStepAction("BSPrim.setForce", LocalID,
443 delegate(float timeStep) 443 delegate(float timeStep)
444 { 444 {
445 DetailLog("{0},BSPrim.setForce,preStep,force={1}", LocalID, _force);
445 if (PhysBody.HasPhysicalBody) 446 if (PhysBody.HasPhysicalBody)
447 {
446 BulletSimAPI.ApplyCentralForce2(PhysBody.ptr, _force); 448 BulletSimAPI.ApplyCentralForce2(PhysBody.ptr, _force);
449 ActivateIfPhysical(false);
450 }
447 } 451 }
448 ); 452 );
449 } 453 }
@@ -554,7 +558,10 @@ public sealed class BSPrim : BSPhysObject
554 558
555 _velocity = value; 559 _velocity = value;
556 if (PhysBody.HasPhysicalBody) 560 if (PhysBody.HasPhysicalBody)
561 {
557 BulletSimAPI.SetLinearVelocity2(PhysBody.ptr, _velocity); 562 BulletSimAPI.SetLinearVelocity2(PhysBody.ptr, _velocity);
563 ActivateIfPhysical(false);
564 }
558 } 565 }
559 } 566 }
560 public override OMV.Vector3 Torque { 567 public override OMV.Vector3 Torque {
@@ -845,7 +852,7 @@ public sealed class BSPrim : BSPhysObject
845 // Called in taint-time!! 852 // Called in taint-time!!
846 private void ActivateIfPhysical(bool forceIt) 853 private void ActivateIfPhysical(bool forceIt)
847 { 854 {
848 if (IsPhysical) 855 if (IsPhysical && PhysBody.HasPhysicalBody)
849 BulletSimAPI.Activate2(PhysBody.ptr, forceIt); 856 BulletSimAPI.Activate2(PhysBody.ptr, forceIt);
850 } 857 }
851 858
@@ -919,8 +926,7 @@ public sealed class BSPrim : BSPhysObject
919 PhysicsScene.TaintedObject("BSPrim.setRotationalVelocity", delegate() 926 PhysicsScene.TaintedObject("BSPrim.setRotationalVelocity", delegate()
920 { 927 {
921 DetailLog("{0},BSPrim.SetRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity); 928 DetailLog("{0},BSPrim.SetRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity);
922 if (PhysBody.HasPhysicalBody) 929 ForceRotationalVelocity = _rotationalVelocity;
923 BulletSimAPI.SetAngularVelocity2(PhysBody.ptr, _rotationalVelocity);
924 }); 930 });
925 } 931 }
926 } 932 }
@@ -930,7 +936,11 @@ public sealed class BSPrim : BSPhysObject
930 } 936 }
931 set { 937 set {
932 _rotationalVelocity = value; 938 _rotationalVelocity = value;
933 BulletSimAPI.SetAngularVelocity2(PhysBody.ptr, _rotationalVelocity); 939 if (PhysBody.HasPhysicalBody)
940 {
941 BulletSimAPI.SetAngularVelocity2(PhysBody.ptr, _rotationalVelocity);
942 ActivateIfPhysical(false);
943 }
934 } 944 }
935 } 945 }
936 public override bool Kinematic { 946 public override bool Kinematic {
@@ -959,6 +969,7 @@ public sealed class BSPrim : BSPhysObject
959 { 969 {
960 float grav = PhysicsScene.Params.gravity * (1f - _buoyancy); 970 float grav = PhysicsScene.Params.gravity * (1f - _buoyancy);
961 BulletSimAPI.SetGravity2(PhysBody.ptr, new OMV.Vector3(0f, 0f, grav)); 971 BulletSimAPI.SetGravity2(PhysBody.ptr, new OMV.Vector3(0f, 0f, grav));
972 ActivateIfPhysical(false);
962 } 973 }
963 } 974 }
964 } 975 }
@@ -1011,7 +1022,10 @@ public sealed class BSPrim : BSPhysObject
1011 // Bullet adds this central force to the total force for this tick 1022 // Bullet adds this central force to the total force for this tick
1012 DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce); 1023 DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce);
1013 if (PhysBody.HasPhysicalBody) 1024 if (PhysBody.HasPhysicalBody)
1025 {
1014 BulletSimAPI.ApplyCentralForce2(PhysBody.ptr, addForce); 1026 BulletSimAPI.ApplyCentralForce2(PhysBody.ptr, addForce);
1027 ActivateIfPhysical(false);
1028 }
1015 }); 1029 });
1016 } 1030 }
1017 else 1031 else
@@ -1032,7 +1046,10 @@ public sealed class BSPrim : BSPhysObject
1032 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddAngularForce", delegate() 1046 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddAngularForce", delegate()
1033 { 1047 {
1034 if (PhysBody.HasPhysicalBody) 1048 if (PhysBody.HasPhysicalBody)
1049 {
1035 BulletSimAPI.ApplyTorque2(PhysBody.ptr, angForce); 1050 BulletSimAPI.ApplyTorque2(PhysBody.ptr, angForce);
1051 ActivateIfPhysical(false);
1052 }
1036 }); 1053 });
1037 } 1054 }
1038 else 1055 else
@@ -1052,7 +1069,10 @@ public sealed class BSPrim : BSPhysObject
1052 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ApplyTorqueImpulse", delegate() 1069 PhysicsScene.TaintedObject(inTaintTime, "BSPrim.ApplyTorqueImpulse", delegate()
1053 { 1070 {
1054 if (PhysBody.HasPhysicalBody) 1071 if (PhysBody.HasPhysicalBody)
1072 {
1055 BulletSimAPI.ApplyTorqueImpulse2(PhysBody.ptr, applyImpulse); 1073 BulletSimAPI.ApplyTorqueImpulse2(PhysBody.ptr, applyImpulse);
1074 ActivateIfPhysical(false);
1075 }
1056 }); 1076 });
1057 } 1077 }
1058 1078