@@ -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