aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-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 });