0
0
Fork 0
mirror of https://github.com/liabru/matter-js.git synced 2025-01-12 16:08:50 -05:00

optimised Collision.collides

This commit is contained in:
liabru 2023-11-14 21:01:43 +00:00
parent 51f49ce9d3
commit 6f8a54b253

View file

@ -100,27 +100,32 @@ var Pair = require('./Pair');
} }
var normal = collision.normal, var normal = collision.normal,
tangent = collision.tangent,
penetration = collision.penetration,
supports = collision.supports, supports = collision.supports,
depth = minOverlap.overlap,
minAxis = minOverlap.axis, minAxis = minOverlap.axis,
minAxisX = minAxis.x, normalX = minAxis.x,
minAxisY = minAxis.y; normalY = minAxis.y,
deltaX = bodyB.position.x - bodyA.position.x,
deltaY = bodyB.position.y - bodyA.position.y;
// ensure normal is facing away from bodyA // ensure normal is facing away from bodyA
if (minAxisX * (bodyB.position.x - bodyA.position.x) + minAxisY * (bodyB.position.y - bodyA.position.y) < 0) { if (normalX * deltaX + normalY * deltaY >= 0) {
normal.x = minAxisX; normalX = -normalX;
normal.y = minAxisY; normalY = -normalY;
} else {
normal.x = -minAxisX;
normal.y = -minAxisY;
} }
collision.tangent.x = -normal.y; normal.x = normalX;
collision.tangent.y = normal.x; normal.y = normalY;
collision.depth = minOverlap.overlap; tangent.x = -normalY;
tangent.y = normalX;
collision.penetration.x = normal.x * collision.depth; penetration.x = normalX * depth;
collision.penetration.y = normal.y * collision.depth; penetration.y = normalY * depth;
collision.depth = depth;
// find support points, there is always either exactly one or two // find support points, there is always either exactly one or two
var supportsB = Collision._findSupports(bodyA, bodyB, normal, 1), var supportsB = Collision._findSupports(bodyA, bodyB, normal, 1),