@@ -21,6 +21,12 @@ var CollisionInfo = {
2121 body2 = data . body2 ;
2222 }
2323
24+ var intersects = IntersectsRect ( body1 , body2 , 0 ) ;
25+ var touching = ( intersects ) ? true : IntersectsRect ( body1 , body2 , 1 ) ;
26+
27+ var intersectsX = intersects ;
28+ var intersectsY = intersects ;
29+
2430 var overlapX = 0 ;
2531 var overlapY = 0 ;
2632
@@ -41,14 +47,33 @@ var CollisionInfo = {
4147 var leftFace = ( distanceX1 > distanceX2 && prevDistanceX1 > prevDistanceX2 ) ;
4248 var topFace = ( distanceY1 > distanceY2 && prevDistanceY1 > prevDistanceY2 ) ;
4349
44- var faceX = CONST . FACING_NONE ;
45- var faceY = CONST . FACING_NONE ;
50+ var touchingX = false ;
51+ var touchingY = false ;
4652
47- var intersects = IntersectsRect ( body1 , body2 , 0 ) ;
48- var touching = ( intersects ) ? true : IntersectsRect ( body1 , body2 , 1 ) ;
53+ if ( body1 . x === body2 . right )
54+ {
55+ leftFace = true ;
56+ touchingX = true ;
57+ }
58+ else if ( body1 . right === body2 . x )
59+ {
60+ leftFace = false ;
61+ touchingX = true ;
62+ }
4963
50- var intersectsX = intersects ;
51- var intersectsY = intersects ;
64+ if ( body1 . y === body2 . bottom )
65+ {
66+ topFace = true ;
67+ touchingY = true ;
68+ }
69+ else if ( body1 . bottom === body2 . y )
70+ {
71+ topFace = false ;
72+ touchingY = true ;
73+ }
74+
75+ var faceX = CONST . FACING_NONE ;
76+ var faceY = CONST . FACING_NONE ;
5277
5378 var share = 0 ;
5479 var shareX1 = 0 ;
@@ -182,33 +207,37 @@ var CollisionInfo = {
182207 }
183208 }
184209
185- var forceX = ( overlapX < overlapY ) ;
210+ var forceX = ( touchingX || overlapX < overlapY ) ;
186211 var face = ( forceX ) ? faceX : faceY ;
187212
188213 if ( forceX && FuzzyEqual ( overlapX , 0 ) )
189214 {
190- // Difference is too small to warrant considering
215+ // Difference is too small to warrant considering separation
191216 overlapX = 0 ;
192217 shareX1 = 0 ;
193218 shareX2 = 0 ;
194219 intersects = false ;
195220 intersectsX = false ;
221+ face = faceX ;
196222 }
197223
198224 if ( ! forceX && FuzzyEqual ( overlapY , 0 ) )
199225 {
200- // Difference is too small to warrant considering
226+ // Difference is too small to warrant considering separation
201227 overlapY = 0 ;
202228 shareY1 = 0 ;
203229 shareY2 = 0 ;
204230 intersects = false ;
205231 intersectsY = false ;
232+ face = faceY ;
206233 }
207234
208235 var dump = function ( )
209236 {
210- console . log ( 'body1:' , body1 . gameObject . name , 'vs body2:' , body2 . gameObject . name ) ;
237+ console . log ( 'body1:' , body1 . gameObject . name , 'vs body2:' , body2 . gameObject . name , 'on face' , face , faceX , faceY ) ;
211238 console . log ( 'intersects?' , intersects , 'xy' , intersectsX , intersectsY , 'touching?' , touching ) ;
239+ console . log ( 'body1 x:' , body1 . x , 'right:' , body1 . right , 'body2 x:' , body2 . x , 'right:' , body2 . right ) ;
240+ console . log ( 'body1 y:' , body1 . y , 'bottom:' , body1 . bottom , 'body2 y:' , body2 . y , 'bottom:' , body2 . bottom ) ;
212241
213242 if ( forceX )
214243 {
@@ -219,7 +248,7 @@ var CollisionInfo = {
219248 console . log ( 'body1 overlaps body2 on the ' + ( ( faceY === CONST . FACING_UP ) ? 'top' : 'bottom' ) + ' face' ) ;
220249 }
221250
222- console . log ( 'overlapX:' , overlapX , 'overlayY :' , overlapY ) ;
251+ console . log ( 'overlapX:' , overlapX , 'overlapY :' , overlapY ) ;
223252 console . log ( 'shareX1:' , shareX1 , 'shareX2:' , shareX2 ) ;
224253 console . log ( 'shareY1:' , shareY1 , 'shareY2:' , shareY2 ) ;
225254 console . log ( 'x compare (CI): ' , body1 . right , 'body2' , body2 . x , '=' , ( body1 . right - body2 . x ) ) ;
0 commit comments