diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs index 27d8ad0..2c8dd23 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs | |||
@@ -290,13 +290,6 @@ public sealed class BSLinksetCompound : BSLinkset | |||
290 | return ret; | 290 | return ret; |
291 | } | 291 | } |
292 | 292 | ||
293 | // Companion to RemoveBodyDependencies(). If RemoveBodyDependencies() returns 'true', | ||
294 | // this routine will restore the removed constraints. | ||
295 | // Called at taint-time!! | ||
296 | public override void RestoreBodyDependencies(BSPrim child) | ||
297 | { | ||
298 | } | ||
299 | |||
300 | // When the linkset is built, the child shape is added to the compound shape relative to the | 293 | // When the linkset is built, the child shape is added to the compound shape relative to the |
301 | // root shape. The linkset then moves around but this does not move the actual child | 294 | // root shape. The linkset then moves around but this does not move the actual child |
302 | // prim. The child prim's location must be recomputed based on the location of the root shape. | 295 | // prim. The child prim's location must be recomputed based on the location of the root shape. |
@@ -384,7 +377,7 @@ public sealed class BSLinksetCompound : BSLinkset | |||
384 | // Constraint linksets are rebuilt every time. | 377 | // Constraint linksets are rebuilt every time. |
385 | // Note that this works for rebuilding just the root after a linkset is taken apart. | 378 | // Note that this works for rebuilding just the root after a linkset is taken apart. |
386 | // Called at taint time!! | 379 | // Called at taint time!! |
387 | private bool disableCOM = true; // disable until we get this debugged | 380 | private bool disableCOM = false; // disable until we get this debugged |
388 | private void RecomputeLinksetCompound() | 381 | private void RecomputeLinksetCompound() |
389 | { | 382 | { |
390 | try | 383 | try |
@@ -407,12 +400,16 @@ public sealed class BSLinksetCompound : BSLinkset | |||
407 | } // DEBUG DEBUG | 400 | } // DEBUG DEBUG |
408 | else | 401 | else |
409 | { | 402 | { |
410 | centerOfMass = ComputeLinksetGeometricCenter(); | 403 | centerOfMass = ComputeLinksetCenterOfMass(); |
411 | centerDisplacement = centerOfMass - LinksetRoot.RawPosition; | 404 | // 'centerDisplacement' is the value to *add* to all the shape offsets |
405 | centerDisplacement = LinksetRoot.RawPosition - centerOfMass; | ||
412 | 406 | ||
413 | // Since we're displacing the center of the shape, we need to move the body in the world | 407 | // Since we're displacing the center of the shape, we need to move the body in the world |
414 | LinksetRoot.PositionDisplacement = centerDisplacement; | 408 | LinksetRoot.PositionDisplacement = centerDisplacement; |
415 | 409 | ||
410 | // This causes the root prim position to be set properly based on the new PositionDisplacement | ||
411 | LinksetRoot.ForcePosition = LinksetRoot.RawPosition; | ||
412 | // Update the local transform for the root child shape so it is offset from the <0,0,0> which is COM | ||
416 | PhysicsScene.PE.UpdateChildTransform(LinksetRoot.PhysShape, 0, -centerDisplacement, OMV.Quaternion.Identity, false); | 413 | PhysicsScene.PE.UpdateChildTransform(LinksetRoot.PhysShape, 0, -centerDisplacement, OMV.Quaternion.Identity, false); |
417 | DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,COM,com={1},rootPos={2},centerDisp={3}", | 414 | DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,COM,com={1},rootPos={2},centerDisp={3}", |
418 | LinksetRoot.LocalID, centerOfMass, LinksetRoot.RawPosition, centerDisplacement); | 415 | LinksetRoot.LocalID, centerOfMass, LinksetRoot.RawPosition, centerDisplacement); |
@@ -444,7 +441,7 @@ public sealed class BSLinksetCompound : BSLinkset | |||
444 | 441 | ||
445 | if (cPrim.PhysShape.isNativeShape) | 442 | if (cPrim.PhysShape.isNativeShape) |
446 | { | 443 | { |
447 | // A native shape is turning into a hull collision shape because native | 444 | // A native shape is turned into a hull collision shape because native |
448 | // shapes are not shared so we have to hullify it so it will be tracked | 445 | // shapes are not shared so we have to hullify it so it will be tracked |
449 | // and freed at the correct time. This also solves the scaling problem | 446 | // and freed at the correct time. This also solves the scaling problem |
450 | // (native shapes scaled but hull/meshes are assumed to not be). | 447 | // (native shapes scaled but hull/meshes are assumed to not be). |