0
0
Fork 0
mirror of https://github.com/liabru/matter-js.git synced 2025-01-12 16:08:50 -05:00

added second pass for constraint solving

This commit is contained in:
liabru 2017-05-03 21:13:29 +01:00
parent a5bd6b2d55
commit f49d053e1f
2 changed files with 11 additions and 8 deletions

View file

@ -21,10 +21,8 @@ var Common = require('../core/Common');
(function() {
var _zeroVector = { x: 0, y: 0 };
Constraint._warming = 0.4;
Constraint._torqueDampen = 0.8;
Constraint._torqueDampen = 1;
Constraint._minLength = 0.000001;
/**

View file

@ -149,7 +149,7 @@ var Body = require('../body/Body');
// update all body position and rotation by integration
_bodiesUpdate(allBodies, delta, timing.timeScale, correction, world.bounds);
// update all constraints
// update all constraints (first pass)
Constraint.preSolveAll(allBodies);
for (i = 0; i < engine.constraintIterations; i++) {
Constraint.solveAll(allConstraints, timing.timeScale);
@ -158,7 +158,6 @@ var Body = require('../body/Body');
// broadphase pass: find potential collision pairs
if (broadphase.controller) {
// if world is dirty, we must flush the whole grid
if (world.isModified)
broadphase.controller.clear(broadphase);
@ -167,7 +166,6 @@ var Body = require('../body/Body');
broadphase.controller.update(broadphase, allBodies, engine, world.isModified);
broadphasePairs = broadphase.pairsList;
} else {
// if no broadphase set, we just pass all bodies
broadphasePairs = allBodies;
}
@ -201,6 +199,13 @@ var Body = require('../body/Body');
}
Resolver.postSolvePosition(allBodies);
// update all constraints (second pass)
Constraint.preSolveAll(allBodies);
for (i = 0; i < engine.constraintIterations; i++) {
Constraint.solveAll(allConstraints, timing.timeScale);
}
Constraint.postSolveAll(allBodies);
// iteratively resolve velocity between collisions
Resolver.preSolveVelocity(pairs.list);
for (i = 0; i < engine.velocityIterations; i++) {