Skip to content

Commit e976721

Browse files
committed
Start of the update to make it work across both axis
1 parent d3460ba commit e976721

1 file changed

Lines changed: 31 additions & 16 deletions

File tree

src/physics/arcade/CollisionInfo.js

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,41 @@ var CollisionInfo = {
2424
var overlapY = 0;
2525

2626
// var maxOverlap = body1.deltaAbsY() + body2.deltaAbsY() + bias;
27-
28-
// Work out the vertical overlap first
2927

30-
var distance1 = body1.bottom - body2.y;
31-
var distance2 = body2.bottom - body1.y;
28+
var distanceX1 = body1.right - body2.x;
29+
var distanceX2 = body2.right - body1.x;
3230

33-
var prevDistance1 = (body1.prev.y + body1.height) - body2.prev.y;
34-
var prevDistance2 = (body2.prev.y + body2.height) - body1.prev.y;
35-
36-
var topFace = (distance1 > distance2 && prevDistance1 > prevDistance2);
31+
var prevDistanceX1 = (body1.prev.x + body1.width) - body2.prev.x;
32+
var prevDistanceX2 = (body2.prev.x + body2.width) - body1.prev.x;
33+
34+
var distanceY1 = body1.bottom - body2.y;
35+
var distanceY2 = body2.bottom - body1.y;
3736

38-
var intersects = IntersectsRect(body1, body2, 0);
39-
var touching = (intersects) ? true : IntersectsRect(body1, body2, 1);
37+
var prevDistanceY1 = (body1.prev.y + body1.height) - body2.prev.y;
38+
var prevDistanceY2 = (body2.prev.y + body2.height) - body1.prev.y;
39+
40+
var leftFace = (distanceX1 > distanceX2 && prevDistanceX1 > prevDistanceX2);
41+
var topFace = (distanceY1 > distanceY2 && prevDistanceY1 > prevDistanceY2);
4042

43+
var testX = ((leftFace && (!body1.checkCollision.left || !body2.checkCollision.right)) || (!leftFace && (!body1.checkCollision.right || !body2.checkCollision.left)));
44+
var testY = ((topFace && (!body1.checkCollision.up || !body2.checkCollision.down)) || (!topFace && (!body1.checkCollision.down || !body2.checkCollision.up)));
45+
4146
var face = CONST.FACING_NONE;
47+
var intersects = false;
48+
var touching = false;
49+
50+
if (testX || testY)
51+
{
52+
intersects = IntersectsRect(body1, body2, 0);
53+
touching = (intersects) ? true : IntersectsRect(body1, body2, 1);
54+
55+
// Try and give 50% separation to each body (this could be improved to give a speed ratio amount to each body)
56+
var share = 0;
57+
var share1 = 0;
58+
var share2 = 0;
59+
}
60+
4261

43-
// Try and give 50% separation to each body (this could be improved to give a speed ratio amount to each body)
44-
var share = 0;
45-
var share1 = 0;
46-
var share2 = 0;
4762

4863
if (topFace)
4964
{
@@ -52,7 +67,7 @@ var CollisionInfo = {
5267
// body1 top is touching body2 bottom
5368
if (intersects && body1.checkCollision.up && body2.checkCollision.down)
5469
{
55-
overlapY = distance2;
70+
overlapY = distanceY2;
5671

5772
share = overlapY * 0.5;
5873

@@ -83,7 +98,7 @@ var CollisionInfo = {
8398
// body1 bottom is touching body2 top
8499
if (intersects && body1.checkCollision.down && body2.checkCollision.up)
85100
{
86-
overlapY = distance1;
101+
overlapY = distanceY1;
87102

88103
share = overlapY * 0.5;
89104

0 commit comments

Comments
 (0)