BulletSim: Fix linkset problem where delayed manipulations of child objects was using the child shape address at call time rather than the one created at taint time.
parent
b6b505163c
commit
ce97ebdc88
OpenSim/Region/Physics/BulletSPlugin
|
@ -331,21 +331,21 @@ public class BSLinkset
|
|||
m_children.Add(child);
|
||||
|
||||
BSPhysObject rootx = LinksetRoot; // capture the root and body as of now
|
||||
BulletBody rootBodyx = LinksetRoot.BSBody;
|
||||
BSPhysObject childx = child;
|
||||
BulletBody childBodyx = child.BSBody;
|
||||
|
||||
DetailLog("{0},AddChildToLinkset,call,rID={1},rBody={2},cID={3},cBody={4}",
|
||||
rootx.LocalID,
|
||||
rootx.LocalID, rootBodyx.ptr.ToString("X"),
|
||||
childx.LocalID, childBodyx.ptr.ToString("X"));
|
||||
rootx.LocalID, rootx.BSBody.ptr.ToString("X"),
|
||||
childx.LocalID, childx.BSBody.ptr.ToString("X"));
|
||||
|
||||
PhysicsScene.TaintedObject("AddChildToLinkset", delegate()
|
||||
{
|
||||
DetailLog("{0},AddChildToLinkset,taint,child={1}", LinksetRoot.LocalID, child.LocalID);
|
||||
// build the physical binding between me and the child
|
||||
m_taintChildren.Add(childx);
|
||||
PhysicallyLinkAChildToRoot(rootx, rootBodyx, childx, childBodyx);
|
||||
|
||||
// Since this is taint-time, the body and shape could have changed for the child
|
||||
PhysicallyLinkAChildToRoot(rootx, rootx.BSBody, childx, childx.BSBody);
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
@ -369,21 +369,19 @@ public class BSLinkset
|
|||
if (m_children.Remove(child))
|
||||
{
|
||||
BSPhysObject rootx = LinksetRoot; // capture the root and body as of now
|
||||
BulletBody rootBodyx = LinksetRoot.BSBody;
|
||||
BSPhysObject childx = child;
|
||||
BulletBody childBodyx = child.BSBody;
|
||||
|
||||
DetailLog("{0},RemoveChildFromLinkset,call,rID={1},rBody={2},cID={3},cBody={4}",
|
||||
childx.LocalID,
|
||||
rootx.LocalID, rootBodyx.ptr.ToString("X"),
|
||||
childx.LocalID, childBodyx.ptr.ToString("X"));
|
||||
rootx.LocalID, rootx.BSBody.ptr.ToString("X"),
|
||||
childx.LocalID, childx.BSBody.ptr.ToString("X"));
|
||||
|
||||
PhysicsScene.TaintedObject("RemoveChildFromLinkset", delegate()
|
||||
{
|
||||
if (m_taintChildren.Contains(childx))
|
||||
m_taintChildren.Remove(childx);
|
||||
|
||||
PhysicallyUnlinkAChildFromRoot(rootx, rootBodyx, childx, childBodyx);
|
||||
PhysicallyUnlinkAChildFromRoot(rootx, rootx.BSBody, childx, childx.BSBody);
|
||||
RecomputeLinksetConstraintVariables();
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue