Skip to content

Commit a5bd6b2

Browse files
committed
change constraint solve order
1 parent a8d1950 commit a5bd6b2

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

src/constraint/Constraint.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,27 @@ var Common = require('../core/Common');
103103
* @param {number} timeScale
104104
*/
105105
Constraint.solveAll = function(constraints, timeScale) {
106-
for (var i = 0; i < constraints.length; i++) {
106+
// Solve fixed constraints first.
107+
for (var i = 0; i < constraints.length; i += 1) {
108+
var constraint = constraints[i],
109+
fixedA = !constraint.bodyA || (constraint.bodyA && constraint.bodyA.isStatic),
110+
fixedB = !constraint.bodyB || (constraint.bodyB && constraint.bodyB.isStatic);
111+
112+
if (fixedA || fixedB) {
113+
Constraint.solve(constraints[i], timeScale);
114+
}
115+
}
116+
117+
// Solve free constraints last.
118+
for (i = 0; i < constraints.length; i += 1) {
119+
constraint = constraints[i];
120+
fixedA = !constraint.bodyA || (constraint.bodyA && constraint.bodyA.isStatic);
121+
fixedB = !constraint.bodyB || (constraint.bodyB && constraint.bodyB.isStatic);
122+
123+
if (!fixedA && !fixedB) {
107124
Constraint.solve(constraints[i], timeScale);
108125
}
126+
}
109127
};
110128

111129
/**

0 commit comments

Comments
 (0)