Never ending debugging ahoy.

This commit is contained in:
Richard Davey 2019-03-18 17:17:59 +00:00
parent 5485c07b32
commit d59617a627
2 changed files with 52 additions and 11 deletions

View file

@ -1144,12 +1144,12 @@ var Body = new Class({
if (newVelocityY > 0 && (newVelocityY < gravityY || FuzzyLessThan(newVelocityY, gravityY, 2))) if (newVelocityY > 0 && (newVelocityY < gravityY || FuzzyLessThan(newVelocityY, gravityY, 2)))
{ {
velocity.y = 0; velocity.y = 0;
console.log('rebound up too small, zeroing', newVelocityY, gravityY); console.log(this.gameObject.name, 'rebound up too small, zeroing', newVelocityY, gravityY);
} }
else else
{ {
velocity.y *= -by; velocity.y *= -by;
console.log('rebounded up', newVelocityY, gravityY); console.log(this.gameObject.name, 'rebounded up', newVelocityY, gravityY);
if (this.onWorldBounds) if (this.onWorldBounds)
{ {
@ -1163,12 +1163,12 @@ var Body = new Class({
if (newVelocityY < 0 && (newVelocityY > gravityY || FuzzyGreaterThan(newVelocityY, gravityY, 2))) if (newVelocityY < 0 && (newVelocityY > gravityY || FuzzyGreaterThan(newVelocityY, gravityY, 2)))
{ {
velocity.y = 0; velocity.y = 0;
console.log('rebound down too small, zeroing', newVelocityY, gravityY); console.log(this.gameObject.name, 'rebound down too small, zeroing', newVelocityY, gravityY);
} }
else else
{ {
velocity.y *= -by; velocity.y *= -by;
console.log('rebounded down', newVelocityY, gravityY); console.log(this.gameObject.name, 'rebounded down', newVelocityY, gravityY);
if (this.onWorldBounds) if (this.onWorldBounds)
{ {

View file

@ -76,10 +76,13 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
var mass1 = body1.mass; var mass1 = body1.mass;
var mass2 = body2.mass; var mass2 = body2.mass;
var nv1 = Math.sqrt((v2 * v2 * mass2) / mass1) * ((v2 > 0) ? 1 : -1); var bnv1 = Math.sqrt((v2 * v2 * mass2) / mass1) * ((v2 > 0) ? 1 : -1);
var nv2 = Math.sqrt((v1 * v1 * mass1) / mass2) * ((v1 > 0) ? 1 : -1); var bnv2 = Math.sqrt((v1 * v1 * mass1) / mass2) * ((v1 > 0) ? 1 : -1);
var avg = (nv1 + nv2) * 0.5; var avg = (bnv1 + bnv2) * 0.5;
var nv1 = bnv1;
var nv2 = bnv2;
nv1 -= avg; nv1 -= avg;
nv2 -= avg; nv2 -= avg;
@ -87,7 +90,21 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
ny1 = avg + nv1 * bounce1.y; ny1 = avg + nv1 * bounce1.y;
ny2 = avg + nv2 * bounce2.y; ny2 = avg + nv2 * bounce2.y;
console.log('*1', ny1, ny2, 'vs', v1, v2, 'avg', avg, 'nv', nv1, nv2, 'bounce', body1.bounce.y, body2.bounce.y, 'delta', body1.deltaY(), body2.deltaY()); // var total = v1 - v2;
// ny1 = (((mass1 - mass2) * v1 + 2 * mass1 * v1) / (mass1 + mass2)) * bounce1.y;
// ny2 = (total + ny1) * bounce2.y;
// console.log('*1', ny1, ny2, 'vs', v1, v2, 'delta', body1.deltaY(), body2.deltaY());
console.log('resolution');
console.log('body1', ny1, 'body2', ny2);
console.log('v1', v1, 'v2', v2);
console.log('avg', avg);
console.log('nv', nv1, nv2);
console.log('sqrt', bnv1, bnv2);
console.log('delta', body1.deltaY(), body2.deltaY());
// console.log('*1', ny1, ny2, 'vs', v1, v2, 'avg', avg, 'nv', nv1, nv2, 'bounce', body1.bounce.y, body2.bounce.y, 'delta', body1.deltaY(), body2.deltaY());
// console.log('*1', ny1, ny2, 'vs', v1, v2, 'avg', avg, 'nv', nv1, nv2, 'bounce', body1.bounce.y, body2.bounce.y, 'delta', body1.deltaY(), body2.deltaY());
} }
else if (body1Immovable) else if (body1Immovable)
{ {
@ -154,10 +171,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked2.up) if (worldBlocked2.up)
{ {
body1.setWorldBlockedUp(body2.bottom); body1.setWorldBlockedUp(body2.bottom);
console.log('ny1 < 0 topface up', body1.y);
} }
else else
{ {
body1.y += totalA; body1.y += totalA;
console.log('ny1 < 0 topface add', body1.y);
} }
} }
else if (bottomFace) else if (bottomFace)
@ -166,10 +185,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked2.down) if (worldBlocked2.down)
{ {
body1.setWorldBlockedDown(body2.y); body1.setWorldBlockedDown(body2.y);
console.log('ny1 < 0 bottomface down', body1.y);
} }
else else
{ {
body1.y += totalA; body1.y += totalA;
console.log('ny1 < 0 bottomface add', body1.y);
} }
} }
@ -177,6 +198,7 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked1.up && body1.sleeping) if (worldBlocked1.up && body1.sleeping)
{ {
ny1 = 0; ny1 = 0;
console.log('ny1 < 0 zero sleep');
} }
} }
else if (ny1 > 0) else if (ny1 > 0)
@ -189,10 +211,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked2.up) if (worldBlocked2.up)
{ {
body1.setWorldBlockedUp(body2.bottom); body1.setWorldBlockedUp(body2.bottom);
console.log('ny1 > 0 topface up', body1.y);
} }
else else
{ {
body1.y += totalA; body1.y += totalA;
console.log('ny1 > 0 topface add', body1.y);
} }
} }
else if (bottomFace) else if (bottomFace)
@ -201,10 +225,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked2.down) if (worldBlocked2.down)
{ {
body1.setWorldBlockedDown(body2.y); body1.setWorldBlockedDown(body2.y);
console.log('ny1 > 0 bottomface down', body1.y);
} }
else else
{ {
body1.y += totalA; body1.y += totalA;
console.log('ny1 > 0 bottomface add', body1.y);
} }
} }
@ -212,15 +238,17 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked1.down && body1.sleeping) if (worldBlocked1.down && body1.sleeping)
{ {
ny1 = 0; ny1 = 0;
console.log('ny1 > 0 zero sleep');
} }
} }
else else
{ {
// Body1 is stationary // Body1 is stationary
body1.y += totalA; body1.y += totalA;
console.log('body1 stationary', body1.y);
} }
if (body2.deltaY() < 0) if (ny2 < 0)
{ {
// Body2 is moving UP // Body2 is moving UP
@ -230,10 +258,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked1.down) if (worldBlocked1.down)
{ {
body2.setWorldBlockedDown(body1.y); body2.setWorldBlockedDown(body1.y);
console.log('ny2 < 0 topface down', body2.y);
} }
else else
{ {
body2.y += totalB; body2.y += totalB;
console.log('ny2 < 0 topface add', body2.y);
} }
} }
else if (bottomFace) else if (bottomFace)
@ -242,10 +272,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked1.up) if (worldBlocked1.up)
{ {
body2.setWorldBlockedUp(body1.bottom); body2.setWorldBlockedUp(body1.bottom);
console.log('ny2 < 0 bottomface down', body2.y);
} }
else else
{ {
body2.y += totalB; body2.y += totalB;
console.log('ny2 < 0 bottomface add', body2.y);
} }
} }
@ -253,9 +285,10 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked2.up && body2.sleeping) if (worldBlocked2.up && body2.sleeping)
{ {
ny2 = 0; ny2 = 0;
console.log('ny2 < 0 zero sleep');
} }
} }
else if (body2.deltaY() > 0) else if (ny2 > 0)
{ {
// Body2 is moving DOWN // Body2 is moving DOWN
@ -265,10 +298,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked1.down) if (worldBlocked1.down)
{ {
body2.setWorldBlockedDown(body1.y); body2.setWorldBlockedDown(body1.y);
console.log('ny2 > 0 topface down', body2.y);
} }
else else
{ {
body2.y += totalB; body2.y += totalB;
console.log('ny2 > 0 topface add', body2.y);
} }
} }
else if (bottomFace) else if (bottomFace)
@ -277,10 +312,12 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked1.up) if (worldBlocked1.up)
{ {
body2.setWorldBlockedUp(body1.bottom); body2.setWorldBlockedUp(body1.bottom);
console.log('ny2 > 0 bottomface up', body2.y);
} }
else else
{ {
body1.y += totalA; body2.y += totalB;
console.log('ny2 > 0 bottomface add', body2.y);
} }
} }
@ -288,12 +325,14 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
if (worldBlocked2.down && body2.sleeping) if (worldBlocked2.down && body2.sleeping)
{ {
ny2 = 0; ny2 = 0;
console.log('ny2 > 0 zero sleep');
} }
} }
else else
{ {
// Body2 is stationary // Body2 is stationary
body2.y += totalB; body2.y += totalB;
console.log('body2 stationary', body2.y);
} }
console.log('postb', worldBlocked1.up, worldBlocked1.down, worldBlocked2.up, worldBlocked2.down); console.log('postb', worldBlocked1.up, worldBlocked1.down, worldBlocked2.up, worldBlocked2.down);
@ -345,6 +384,8 @@ var SeparateY = function (body1, body2, overlapOnly, bias)
// body1.x += body1.getMoveX((body2.deltaX()) * body2.friction.x, true); // body1.x += body1.getMoveX((body2.deltaX()) * body2.friction.x, true);
// } // }
console.log('---', Date.now());
// If we got this far then there WAS overlap, and separation is complete, so return true // If we got this far then there WAS overlap, and separation is complete, so return true
return true; return true;
}; };