Skip to content

Commit 10e5d0f

Browse files
committed
added compound support to Query.ray
1 parent eb29367 commit 10e5d0f

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

demo/js/Demo.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1285,8 +1285,11 @@
12851285
return Bodies.polygon(x, y, sides, Common.random(20, 50));
12861286
}
12871287
});
1288+
1289+
var vertices = Matter.Vertices.fromPath('164 171,232 233,213 302,273 241,342 305,316 231,364 170,309 188,281 117,240 182'),
1290+
concave = Bodies.fromVertices(200, 200, vertices);
12881291

1289-
World.add(_world, stack);
1292+
World.add(_world, [stack, concave]);
12901293

12911294
_sceneEvents.push(
12921295
Events.on(_engine, 'afterRender', function() {

src/collision/Query.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,19 @@ var Query = {};
2929

3030
for (var i = 0; i < bodies.length; i++) {
3131
var bodyA = bodies[i];
32-
32+
3333
if (Bounds.overlaps(bodyA.bounds, ray.bounds)) {
34-
var collision = SAT.collides(bodyA, ray);
35-
if (collision.collided) {
36-
collision.body = collision.bodyA = collision.bodyB = bodyA;
37-
collisions.push(collision);
34+
for (var j = bodyA.parts.length === 1 ? 0 : 1; j < bodyA.parts.length; j++) {
35+
var part = bodyA.parts[j];
36+
37+
if (Bounds.overlaps(part.bounds, ray.bounds)) {
38+
var collision = SAT.collides(part, ray);
39+
if (collision.collided) {
40+
collision.body = collision.bodyA = collision.bodyB = bodyA;
41+
collisions.push(collision);
42+
break;
43+
}
44+
}
3845
}
3946
}
4047
}

0 commit comments

Comments
 (0)