aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorRobert Adams2012-12-08 09:12:45 -0800
committerRobert Adams2012-12-08 09:14:40 -0800
commit04e64d73dfddf9ef3e3716f6c43752c6f63438cb (patch)
tree4bfc555b52f23d8b65fb3b20242f124eb73b7da5
parentBulletSim: fix small problem with setting size/scale of native shapes which c... (diff)
downloadopensim-SC_OLD-04e64d73dfddf9ef3e3716f6c43752c6f63438cb.zip
opensim-SC_OLD-04e64d73dfddf9ef3e3716f6c43752c6f63438cb.tar.gz
opensim-SC_OLD-04e64d73dfddf9ef3e3716f6c43752c6f63438cb.tar.bz2
opensim-SC_OLD-04e64d73dfddf9ef3e3716f6c43752c6f63438cb.tar.xz
BulletSim: set material properties for static objects. Move Linkset.MakeStatic() after call to ForceActivationState2() since linkset might change activation state. Make BSPrim.CreateGeomAndObject public as linkset rebuilding might need access to it. Only rebuild prim if selection state is actually changes -- OpenSimulator calls PhysObject.Selected() multiple times whenever a prim is selected or deselected.
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs5
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs30
2 files changed, 24 insertions, 11 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
index 492c7b1..1f7c398 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
@@ -257,6 +257,11 @@ public sealed class BSLinksetCompound : BSLinkset
257 BulletSimAPI.AddChildShapeToCompoundShape2(LinksetRoot.PhysShape.ptr, cPrim.PhysShape.ptr, displacementPos, displacementRot); 257 BulletSimAPI.AddChildShapeToCompoundShape2(LinksetRoot.PhysShape.ptr, cPrim.PhysShape.ptr, displacementPos, displacementRot);
258 } 258 }
259 } 259 }
260
261 // TODO: need to phantomize the child prims left behind.
262 // Maybe just destroy the children bodies and shapes and have them rebuild on unlink.
263 // Selection/deselection might cause way too many build/destructions esp. for LARGE linksets.
264
260 return false; // 'false' says to move onto the next child in the list 265 return false; // 'false' says to move onto the next child in the list
261 }); 266 });
262 267
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 62aaf80..4d203ff 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -190,12 +190,15 @@ public sealed class BSPrim : BSPhysObject
190 } 190 }
191 public override bool Selected { 191 public override bool Selected {
192 set { 192 set {
193 _isSelected = value; 193 if (value != _isSelected)
194 PhysicsScene.TaintedObject("BSPrim.setSelected", delegate()
195 { 194 {
196 DetailLog("{0},BSPrim.selected,taint,selected={1}", LocalID, _isSelected); 195 _isSelected = value;
197 SetObjectDynamic(false); 196 PhysicsScene.TaintedObject("BSPrim.setSelected", delegate()
198 }); 197 {
198 DetailLog("{0},BSPrim.selected,taint,selected={1}", LocalID, _isSelected);
199 SetObjectDynamic(false);
200 });
201 }
199 } 202 }
200 } 203 }
201 public override void CrossingFailure() { return; } 204 public override void CrossingFailure() { return; }
@@ -678,8 +681,11 @@ public sealed class BSPrim : BSPhysObject
678 CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_STATIC_OBJECT); 681 CurrentCollisionFlags = BulletSimAPI.AddToCollisionFlags2(PhysBody.ptr, CollisionFlags.CF_STATIC_OBJECT);
679 // Stop all movement 682 // Stop all movement
680 ZeroMotion(true); 683 ZeroMotion(true);
681 // Center of mass is at the center of the object 684
682 // DEBUG DEBUG BulletSimAPI.SetCenterOfMassByPosRot2(Linkset.LinksetRoot.PhysBody.ptr, _position, _orientation); 685 // Set various physical properties so other object interact properly
686 BulletSimAPI.SetFriction2(PhysBody.ptr, PhysicsScene.Params.defaultFriction);
687 BulletSimAPI.SetRestitution2(PhysBody.ptr, PhysicsScene.Params.defaultRestitution);
688
683 // Mass is zero which disables a bunch of physics stuff in Bullet 689 // Mass is zero which disables a bunch of physics stuff in Bullet
684 UpdatePhysicalMassProperties(0f); 690 UpdatePhysicalMassProperties(0f);
685 // Set collision detection parameters 691 // Set collision detection parameters
@@ -688,13 +694,15 @@ public sealed class BSPrim : BSPhysObject
688 BulletSimAPI.SetCcdMotionThreshold2(PhysBody.ptr, PhysicsScene.Params.ccdMotionThreshold); 694 BulletSimAPI.SetCcdMotionThreshold2(PhysBody.ptr, PhysicsScene.Params.ccdMotionThreshold);
689 BulletSimAPI.SetCcdSweptSphereRadius2(PhysBody.ptr, PhysicsScene.Params.ccdSweptSphereRadius); 695 BulletSimAPI.SetCcdSweptSphereRadius2(PhysBody.ptr, PhysicsScene.Params.ccdSweptSphereRadius);
690 } 696 }
691 // There can be special things needed for implementing linksets 697
692 Linkset.MakeStatic(this);
693 // The activation state is 'disabled' so Bullet will not try to act on it. 698 // The activation state is 'disabled' so Bullet will not try to act on it.
694 // BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.DISABLE_SIMULATION); 699 // BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.DISABLE_SIMULATION);
695 // Start it out sleeping and physical actions could wake it up. 700 // Start it out sleeping and physical actions could wake it up.
696 BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.ISLAND_SLEEPING); 701 BulletSimAPI.ForceActivationState2(PhysBody.ptr, ActivationState.ISLAND_SLEEPING);
697 702
703 // There can be special things needed for implementing linksets
704 Linkset.MakeStatic(this);
705
698 PhysBody.collisionGroup = CollisionFilterGroups.StaticObjectGroup; 706 PhysBody.collisionGroup = CollisionFilterGroups.StaticObjectGroup;
699 PhysBody.collisionMask = CollisionFilterGroups.StaticObjectMask; 707 PhysBody.collisionMask = CollisionFilterGroups.StaticObjectMask;
700 } 708 }
@@ -1326,7 +1334,7 @@ public sealed class BSPrim : BSPhysObject
1326 // Rebuild the geometry and object. 1334 // Rebuild the geometry and object.
1327 // This is called when the shape changes so we need to recreate the mesh/hull. 1335 // This is called when the shape changes so we need to recreate the mesh/hull.
1328 // Called at taint-time!!! 1336 // Called at taint-time!!!
1329 private void CreateGeomAndObject(bool forceRebuild) 1337 public void CreateGeomAndObject(bool forceRebuild)
1330 { 1338 {
1331 // If this prim is part of a linkset, we must remove and restore the physical 1339 // If this prim is part of a linkset, we must remove and restore the physical
1332 // links if the body is rebuilt. 1340 // links if the body is rebuilt.
@@ -1341,7 +1349,7 @@ public sealed class BSPrim : BSPhysObject
1341 { 1349 {
1342 // Called if the current prim body is about to be destroyed. 1350 // Called if the current prim body is about to be destroyed.
1343 // Remove all the physical dependencies on the old body. 1351 // Remove all the physical dependencies on the old body.
1344 // (Maybe someday make the changing of BSShape an event handled by BSLinkset.) 1352 // (Maybe someday make the changing of BSShape an event to be subscribed to by BSLinkset, ...)
1345 needToRestoreLinkset = Linkset.RemoveBodyDependencies(this); 1353 needToRestoreLinkset = Linkset.RemoveBodyDependencies(this);
1346 needToRestoreVehicle = _vehicle.RemoveBodyDependencies(this); 1354 needToRestoreVehicle = _vehicle.RemoveBodyDependencies(this);
1347 }); 1355 });