BulletSim: add locking of PhysObjects while processing simulation

step updates and collisions. This is an attempt to fix a crash reported
by Justin when doing high velocity teleports.
bullet-2.82
Robert Adams 2014-05-26 20:29:45 -07:00
parent d2877b9cd4
commit fab0389cb1
1 changed files with 20 additions and 14 deletions

View File

@ -639,15 +639,18 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
{
if (collidersCount > 0)
{
for (int ii = 0; ii < collidersCount; ii++)
lock (PhysObjects)
{
uint cA = m_collisionArray[ii].aID;
uint cB = m_collisionArray[ii].bID;
Vector3 point = m_collisionArray[ii].point;
Vector3 normal = m_collisionArray[ii].normal;
float penetration = m_collisionArray[ii].penetration;
SendCollision(cA, cB, point, normal, penetration);
SendCollision(cB, cA, point, -normal, penetration);
for (int ii = 0; ii < collidersCount; ii++)
{
uint cA = m_collisionArray[ii].aID;
uint cB = m_collisionArray[ii].bID;
Vector3 point = m_collisionArray[ii].point;
Vector3 normal = m_collisionArray[ii].normal;
float penetration = m_collisionArray[ii].penetration;
SendCollision(cA, cB, point, normal, penetration);
SendCollision(cB, cA, point, -normal, penetration);
}
}
}
}
@ -658,14 +661,17 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
{
if (updatedEntityCount > 0)
{
for (int ii = 0; ii < updatedEntityCount; ii++)
lock (PhysObjects)
{
EntityProperties entprop = m_updateArray[ii];
BSPhysObject pobj;
if (PhysObjects.TryGetValue(entprop.ID, out pobj))
for (int ii = 0; ii < updatedEntityCount; ii++)
{
if (pobj.IsInitialized)
pobj.UpdateProperties(entprop);
EntityProperties entprop = m_updateArray[ii];
BSPhysObject pobj;
if (PhysObjects.TryGetValue(entprop.ID, out pobj))
{
if (pobj.IsInitialized)
pobj.UpdateProperties(entprop);
}
}
}
}