// stepper is used a lot. Saves allocation to return the same array wrapper. // This is fine and danger-free against mutations because the callsite // immediately destructures it and gets the numbers inside without passing the "use strict"; exports.__esModule = true; exports["default"] = stepper; var reusedTuple = [0, 0]; function stepper(secondPerFrame, x, v, destX, k, b, precision) { // Spring stiffness, in kg / s^2 // for animations, destX is really spring length (spring at rest). initial // position is considered as the stretched/compressed position of a spring var Fspring = -k * (x - destX); // Damping, in kg / s var Fdamper = -b * v; // usually we put mass here, but for animation purposes, specifying mass is a // bit redundant. you could simply adjust k and b accordingly // let a = (Fspring + Fdamper) / mass; var a = Fspring + Fdamper; var newV = v + a * secondPerFrame; var newX = x + newV * secondPerFrame; if (Math.abs(newV) < precision && Math.abs(newX - destX) < precision) { reusedTuple[0] = destX; reusedTuple[1] = 0; return reusedTuple; } reusedTuple[0] = newX; reusedTuple[1] = newV; return reusedTuple; } module.exports = exports["default"]; // array reference around.