55 */
66
77var CONST = require ( './const' ) ;
8+ var FuzzyEqual = require ( '../../math/fuzzy/Equal' ) ;
89var IntersectsRect = require ( './IntersectsRect' ) ;
910
1011var CollisionInfo = {
@@ -39,7 +40,7 @@ var CollisionInfo = {
3940
4041 var leftFace = ( distanceX1 > distanceX2 && prevDistanceX1 > prevDistanceX2 ) ;
4142 var topFace = ( distanceY1 > distanceY2 && prevDistanceY1 > prevDistanceY2 ) ;
42-
43+
4344 var faceX = CONST . FACING_NONE ;
4445 var faceY = CONST . FACING_NONE ;
4546
@@ -181,15 +182,57 @@ var CollisionInfo = {
181182 }
182183 }
183184
184- var face = ( overlapX < overlapY ) ? faceX : faceY ;
185+ var forceX = ( overlapX < overlapY ) ;
186+ var face = ( forceX ) ? faceX : faceY ;
187+
188+ if ( forceX && FuzzyEqual ( overlapX , 0 ) )
189+ {
190+ // Difference is too small to warrant considering
191+ overlapX = 0 ;
192+ shareX1 = 0 ;
193+ shareX2 = 0 ;
194+ intersects = false ;
195+ intersectsX = false ;
196+ }
197+
198+ if ( ! forceX && FuzzyEqual ( overlapY , 0 ) )
199+ {
200+ // Difference is too small to warrant considering
201+ overlapY = 0 ;
202+ shareY1 = 0 ;
203+ shareY2 = 0 ;
204+ intersects = false ;
205+ intersectsY = false ;
206+ }
207+
208+ var dump = function ( )
209+ {
210+ console . log ( 'body1:' , body1 . gameObject . name , 'vs body2:' , body2 . gameObject . name ) ;
211+ console . log ( 'intersects?' , intersects , 'xy' , intersectsX , intersectsY , 'touching?' , touching ) ;
212+
213+ if ( forceX )
214+ {
215+ console . log ( 'body1 overlaps body2 on the ' + ( ( faceX === CONST . FACING_LEFT ) ? 'left' : 'right' ) + ' face' ) ;
216+ }
217+ else
218+ {
219+ console . log ( 'body1 overlaps body2 on the ' + ( ( faceY === CONST . FACING_UP ) ? 'top' : 'bottom' ) + ' face' ) ;
220+ }
221+
222+ console . log ( 'overlapX:' , overlapX , 'overlayY:' , overlapY ) ;
223+ console . log ( 'shareX1:' , shareX1 , 'shareX2:' , shareX2 ) ;
224+ console . log ( 'shareY1:' , shareY1 , 'shareY2:' , shareY2 ) ;
225+ console . log ( 'x compare (CI): ' , body1 . right , 'body2' , body2 . x , '=' , ( body1 . right - body2 . x ) ) ;
226+ } ;
185227
186228 if ( data )
187229 {
188- data . intersects = ( intersectsX || intersectsY ) ;
230+ data . intersects = intersects ;
189231 data . touching = touching ;
190232 data . overlapOnly = overlapOnly ;
191233 data . overlapX = overlapX ;
192234 data . overlapY = overlapY ;
235+ data . forceX = forceX ;
193236 data . face = face ;
194237 data . faceX = faceX ;
195238 data . faceY = faceY ;
@@ -198,6 +241,7 @@ var CollisionInfo = {
198241 data . shareX2 = shareX2 ;
199242 data . shareY1 = shareY1 ;
200243 data . shareY2 = shareY2 ;
244+ data . dump = dump ;
201245
202246 return data ;
203247 }
@@ -206,19 +250,21 @@ var CollisionInfo = {
206250 return {
207251 body1 : body1 ,
208252 body2 : body2 ,
209- intersects : ( intersectsX || intersectsY ) ,
253+ intersects : intersects ,
210254 touching : touching ,
211255 overlapOnly : overlapOnly ,
212256 overlapX : overlapX ,
213257 overlapY : overlapY ,
258+ forceX : forceX ,
214259 face : face ,
215260 faceX : faceX ,
216261 faceY : faceY ,
217262 set : false ,
218263 shareX1 : shareX1 ,
219264 shareX2 : shareX2 ,
220265 shareY1 : shareY1 ,
221- shareY2 : shareY2
266+ shareY2 : shareY2 ,
267+ dump : dump
222268 } ;
223269 }
224270 } ,
0 commit comments