diff options
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 30 |
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 | }); |