Skip to content

Commit

Permalink
Revert "Merge branch 'pr/527'"
Browse files Browse the repository at this point in the history
This reverts commit 4df048d, reversing
changes made to 52f3734.
  • Loading branch information
liabru committed Mar 10, 2020
1 parent 182c84a commit d1f1c19
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 39 deletions.
1 change: 0 additions & 1 deletion src/body/Body.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ var Axes = require('../geometry/Axes');
force: { x: 0, y: 0 },
torque: 0,
positionImpulse: { x: 0, y: 0 },
previousPositionImpulse: { x: 0, y: 0 },
constraintImpulse: { x: 0, y: 0, angle: 0 },
totalContacts: 0,
speed: 0,
Expand Down
68 changes: 31 additions & 37 deletions src/collision/Resolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,33 +48,23 @@ var Bounds = require('../geometry/Bounds');
* Find a solution for pair positions.
* @method solvePosition
* @param {pair[]} pairs
* @param {body[]} bodies
* @param {number} timeScale
*/
Resolver.solvePosition = function(pairs, bodies, timeScale) {
Resolver.solvePosition = function(pairs, timeScale) {
var i,
normalX,
normalY,
pair,
collision,
bodyA,
bodyB,
normal,
separation,
penetration,
positionImpulseA,
positionImpulseB,
bodyBtoA,
contactShare,
bodyBtoAX,
bodyBtoAY,
positionImpulse,
impulseCoefficient = timeScale * Resolver._positionDampen;

for (i = 0; i < bodies.length; i++) {
var body = bodies[i];
body.previousPositionImpulse.x = body.positionImpulse.x;
body.previousPositionImpulse.y = body.positionImpulse.y;
}
contactCount = {},
tempA = Vector._temp[0],
tempB = Vector._temp[1],
tempC = Vector._temp[2],
tempD = Vector._temp[3];

// find impulses required to resolve penetration
for (i = 0; i < pairs.length; i++) {
Expand All @@ -88,35 +78,39 @@ var Bounds = require('../geometry/Bounds');
bodyB = collision.parentB;
normal = collision.normal;

positionImpulseA = bodyA.previousPositionImpulse;
positionImpulseB = bodyB.previousPositionImpulse;

penetration = collision.penetration;
// get current separation between body edges involved in collision
bodyBtoA = Vector.sub(Vector.add(bodyB.positionImpulse, bodyB.position, tempA),
Vector.add(bodyA.positionImpulse,
Vector.sub(bodyB.position, collision.penetration, tempB), tempC), tempD);

bodyBtoAX = positionImpulseB.x - positionImpulseA.x + penetration.x;
bodyBtoAY = positionImpulseB.y - positionImpulseA.y + penetration.y;

normalX = normal.x;
normalY = normal.y;

separation = normalX * bodyBtoAX + normalY * bodyBtoAY;
pair.separation = separation;
pair.separation = Vector.dot(normal, bodyBtoA);
}

for (i = 0; i < pairs.length; i++) {
pair = pairs[i];

positionImpulse = (separation - pair.slop) * impulseCoefficient;
if (!pair.isActive || pair.isSensor)
continue;

collision = pair.collision;
bodyA = collision.parentA;
bodyB = collision.parentB;
normal = collision.normal;
positionImpulse = (pair.separation - pair.slop) * timeScale;

if (bodyA.isStatic || bodyB.isStatic)
positionImpulse *= 2;

if (!(bodyA.isStatic || bodyA.isSleeping)) {
contactShare = positionImpulse / bodyA.totalContacts;
bodyA.positionImpulse.x += normalX * contactShare;
bodyA.positionImpulse.y += normalY * contactShare;
contactShare = Resolver._positionDampen / bodyA.totalContacts;
bodyA.positionImpulse.x += normal.x * positionImpulse * contactShare;
bodyA.positionImpulse.y += normal.y * positionImpulse * contactShare;
}

if (!(bodyB.isStatic || bodyB.isSleeping)) {
contactShare = positionImpulse / bodyB.totalContacts;
bodyB.positionImpulse.x -= normalX * contactShare;
bodyB.positionImpulse.y -= normalY * contactShare;
contactShare = Resolver._positionDampen / bodyB.totalContacts;
bodyB.positionImpulse.x -= normal.x * positionImpulse * contactShare;
bodyB.positionImpulse.y -= normal.y * positionImpulse * contactShare;
}
}
};
Expand Down Expand Up @@ -347,4 +341,4 @@ var Bounds = require('../geometry/Bounds');
}
};

})();
})();
2 changes: 1 addition & 1 deletion src/core/Engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ var Body = require('../body/Body');
// iteratively resolve position between collisions
Resolver.preSolvePosition(pairs.list);
for (i = 0; i < engine.positionIterations; i++) {
Resolver.solvePosition(pairs.list, allBodies, timing.timeScale);
Resolver.solvePosition(pairs.list, timing.timeScale);
}
Resolver.postSolvePosition(allBodies);

Expand Down

0 comments on commit d1f1c19

Please sign in to comment.