@@ -51,9 +51,15 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
5151 var body1Immovable = ( body1 . physicsType === CONST . STATIC_BODY || body1 . immovable ) ;
5252 var body2Immovable = ( body2 . physicsType === CONST . STATIC_BODY || body2 . immovable ) ;
5353
54+ console . log ( '' ) ;
55+ console . log ( 'frame' , body1 . world . _frame ) ;
56+ console . log ( 'body1' , body1 . gameObject . name , 'overlaps body2' , body2 . gameObject . name , 'on the' , ( ( topFace ) ? 'top' : 'bottom' ) ) ;
57+
5458 // Can't separate two immovable bodies, or a body with its own custom separation logic
5559 if ( ! intersects || overlapOnly || ( body1Immovable && body2Immovable ) || body1 . customSeparateY || body2 . customSeparateY )
5660 {
61+ console . log ( 'SeparateY aborted' ) ;
62+
5763 // return true if there was some overlap, otherwise false.
5864 return ( ( intersects && overlap !== 0 ) || ( body1 . embedded && body2 . embedded ) ) ;
5965 }
@@ -65,10 +71,6 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
6571 var ny1 = v1 ;
6672 var ny2 = v2 ;
6773
68- console . log ( '' ) ;
69- console . log ( 'frame' , body1 . world . _frame ) ;
70- console . log ( 'body1' , body1 . gameObject . name , 'overlaps body2' , body2 . gameObject . name , 'on the' , ( ( topFace ) ? 'top' : 'bottom' ) ) ;
71-
7274 // At this point, the velocity from gravity, world rebounds, etc has been factored in.
7375 // The body is moving the direction it wants to, but may be blocked and rebound.
7476
@@ -98,10 +100,8 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
98100 console . log ( 'resolution 1' ) ;
99101 console . log ( 'pre-impact v = body1' , v1 , 'body2' , v2 ) ;
100102 console . log ( 'post-impact v = body1' , ny1 , 'body2' , ny2 ) ;
101-
102- // console.log('pre-impact y = body1', body1.gameObject.y, 'body2', body2.gameObject.y);
103- // console.log('sleeping? = body1', body1.sleeping, 'body2', body2.sleeping);
104- // console.log('wb = body1', body1.worldBlocked.down, 'body2', body2.worldBlocked.down);
103+ console . log ( 'pre-impact y = body1' , body1 . gameObject . y , 'body2' , body2 . gameObject . y ) ;
104+ console . log ( 'wb = body1' , body1 . worldBlocked . down , 'body2' , body2 . worldBlocked . down ) ;
105105
106106 // console.log('avg', avg);
107107 // console.log('nv', nv1, nv2);
@@ -141,8 +141,11 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
141141 console . log ( 'resolution 3' ) ;
142142 console . log ( 'pre-impact v = body1' , v1 , 'body2' , v2 ) ;
143143 console . log ( 'post-impact v = body1' , ny1 , 'body2' , ny2 ) ;
144+ console . log ( 'pre-impact by = body1' , body1 . y , 'body2' , body2 . y ) ;
145+ console . log ( 'pre-impact gy = body1' , body1 . gameObject . y , 'body2' , body2 . gameObject . y ) ;
146+ console . log ( 'wb = body1' , body1 . worldBlocked . down , 'body2' , body2 . worldBlocked . down ) ;
144147 console . log ( 'sleeping? = body1' , body1 . sleeping , 'body2' , body2 . sleeping ) ;
145- }
148+ }
146149 else if ( moving1 && ! moving2 )
147150 {
148151 // Body2 is immovable, so adjust body1 speed
@@ -151,8 +154,10 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
151154 console . log ( 'resolution 4' ) ;
152155 console . log ( 'pre-impact v = body1' , v1 , 'body2' , v2 ) ;
153156 console . log ( 'post-impact v = body1' , ny1 , 'body2' , ny2 ) ;
157+ console . log ( 'pre-impact y = body1' , body1 . gameObject . y , 'body2' , body2 . gameObject . y ) ;
158+ console . log ( 'wb = body1' , body1 . worldBlocked . down , 'body2' , body2 . worldBlocked . down ) ;
154159 console . log ( 'sleeping? = body1' , body1 . sleeping , 'body2' , body2 . sleeping ) ;
155- }
160+ }
156161 else
157162 {
158163 console . log ( 'neither moving, or both immovable' ) ;
@@ -211,6 +216,22 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
211216 return true ;
212217 }
213218
219+ // FLip flop?
220+ var flip1 = ( v1 < 0 && ny1 > 0 ) || ( v1 > 0 && ny1 < 0 ) ;
221+ var flip2 = ( v2 < 0 && ny2 > 0 ) || ( v2 > 0 && ny2 < 0 ) ;
222+
223+ if ( ! body1 . sleeping && flip1 && Math . abs ( ny1 ) < body1 . minVelocity . y )
224+ {
225+ console . log ( 'body1 flip vel too small, zeroing' ) ;
226+ ny1 = 0 ;
227+ }
228+
229+ if ( ! body2 . sleeping && flip2 && Math . abs ( ny2 ) < body2 . minVelocity . y )
230+ {
231+ console . log ( 'body2 flip vel too small, zeroing' ) ;
232+ ny2 = 0 ;
233+ }
234+
214235 // By this stage the bodies have their separation distance calculated (stored in totalA/B)
215236 // and they have their new post-impact velocity. So now we need to work out block state based on direction.
216237
@@ -228,7 +249,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
228249 }
229250 else
230251 {
231- body1 . y += totalA ;
252+ body1 . y += body1 . getMoveY ( totalA ) ;
232253 console . log ( 'ny1 < 0 topface add' , body1 . y ) ;
233254 }
234255 }
@@ -242,7 +263,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
242263 }
243264 else
244265 {
245- body1 . y += totalA ;
266+ body1 . y += body1 . getMoveY ( totalA ) ;
246267 console . log ( 'ny1 < 0 bottomface add' , body1 . y ) ;
247268 }
248269 }
@@ -268,7 +289,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
268289 }
269290 else
270291 {
271- body1 . y += totalA ;
292+ body1 . y += body1 . getMoveY ( totalA ) ;
272293 console . log ( 'ny1 > 0 topface add' , body1 . y ) ;
273294 }
274295 }
@@ -282,7 +303,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
282303 }
283304 else
284305 {
285- body1 . y += totalA ;
306+ body1 . y += body1 . getMoveY ( totalA ) ;
286307 console . log ( 'ny1 > 0 bottomface add' , body1 . y ) ;
287308 }
288309 }
@@ -307,8 +328,8 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
307328 }
308329 else
309330 {
310- body1 . y += totalA ;
311- console . log ( ' body1 stationary topface add' , body1 . y ) ;
331+ console . log ( ' body1 stationary topface add' , body1 . y , 'ta' , totalA , ( body1 . y + totalA ) ) ;
332+ body1 . y += body1 . getMoveY ( totalA ) ;
312333 }
313334 }
314335 else if ( bottomFace )
@@ -321,7 +342,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
321342 }
322343 else
323344 {
324- body1 . y += totalA ;
345+ body1 . y += body1 . getMoveY ( totalA ) ;
325346 console . log ( 'body1 stationary bottomface add' , body1 . y ) ;
326347 }
327348 }
@@ -341,7 +362,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
341362 }
342363 else
343364 {
344- body2 . y += totalB ;
365+ body2 . y += body2 . getMoveY ( totalB ) ;
345366 console . log ( 'ny2 < 0 topface add' , body2 . y ) ;
346367 }
347368 }
@@ -355,7 +376,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
355376 }
356377 else
357378 {
358- body2 . y += totalB ;
379+ body2 . y += body2 . getMoveY ( totalB ) ;
359380 console . log ( 'ny2 < 0 bottomface add' , body2 . y ) ;
360381 }
361382 }
@@ -381,7 +402,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
381402 }
382403 else
383404 {
384- body2 . y += totalB ;
405+ body2 . y += body2 . getMoveY ( totalB ) ;
385406 console . log ( 'ny2 > 0 topface add' , body2 . y ) ;
386407 }
387408 }
@@ -395,7 +416,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
395416 }
396417 else
397418 {
398- body2 . y += totalB ;
419+ body2 . y += body2 . getMoveY ( totalB ) ;
399420 console . log ( 'ny2 > 0 bottomface add' , body2 . y ) ;
400421 }
401422 }
@@ -420,7 +441,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
420441 }
421442 else
422443 {
423- body2 . y += totalB ;
444+ body2 . y += body2 . getMoveY ( totalB ) ;
424445 console . log ( 'body2 stationary topface add' , body2 . y ) ;
425446 }
426447 }
@@ -434,7 +455,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
434455 }
435456 else
436457 {
437- body2 . y += totalB ;
458+ body2 . y += body2 . getMoveY ( totalB ) ;
438459 console . log ( 'body2 stationary bottomface add' , body2 . y ) ;
439460 }
440461 }
0 commit comments