mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-27 09:50:52 -05:00
fixed collision detection issue, closes #12
This commit is contained in:
parent
810bd2695a
commit
3e48825088
1 changed files with 24 additions and 15 deletions
|
@ -104,24 +104,33 @@ var SAT = {};
|
||||||
|
|
||||||
// find support points, there is always either exactly one or two
|
// find support points, there is always either exactly one or two
|
||||||
var verticesB = _findSupports(bodyA, bodyB, collision.normal),
|
var verticesB = _findSupports(bodyA, bodyB, collision.normal),
|
||||||
|
supports = collision.supports || [];
|
||||||
|
supports.length = 0;
|
||||||
|
|
||||||
|
// find the supports from bodyB that are inside bodyA
|
||||||
|
if (Vertices.contains(bodyA.vertices, verticesB[0]))
|
||||||
|
supports.push(verticesB[0]);
|
||||||
|
|
||||||
|
if (Vertices.contains(bodyA.vertices, verticesB[1]))
|
||||||
|
supports.push(verticesB[1]);
|
||||||
|
|
||||||
|
// find the supports from bodyA that are inside bodyB
|
||||||
|
if (supports.length < 2) {
|
||||||
|
var verticesA = _findSupports(bodyB, bodyA, Vector.neg(collision.normal));
|
||||||
|
|
||||||
|
if (Vertices.contains(bodyB.vertices, verticesA[0]))
|
||||||
|
supports.push(verticesA[0]);
|
||||||
|
|
||||||
|
if (supports.length < 2 && Vertices.contains(bodyB.vertices, verticesA[1]))
|
||||||
|
supports.push(verticesA[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// account for the edge case of overlapping but no vertex containment
|
||||||
|
if (supports.length < 2)
|
||||||
supports = [verticesB[0]];
|
supports = [verticesB[0]];
|
||||||
|
|
||||||
if (Vertices.contains(bodyA.vertices, verticesB[1])) {
|
|
||||||
supports.push(verticesB[1]);
|
|
||||||
} else {
|
|
||||||
var verticesA = _findSupports(bodyB, bodyA, Vector.neg(collision.normal));
|
|
||||||
|
|
||||||
if (Vertices.contains(bodyB.vertices, verticesA[0])) {
|
|
||||||
supports.push(verticesA[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supports.length < 2 && Vertices.contains(bodyB.vertices, verticesA[1])) {
|
|
||||||
supports.push(verticesA[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
collision.supports = supports;
|
collision.supports = supports;
|
||||||
collision.supportCorrected = Vector.sub(verticesB[0], collision.penetration);
|
collision.supportCorrected = Vector.sub(supports[0], collision.penetration);
|
||||||
|
|
||||||
return collision;
|
return collision;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue