1 line
9.4 KiB
Plaintext
1 line
9.4 KiB
Plaintext
{"version":3,"sources":["spring.js"],"names":["MAX_STEPS_MS","spring","clock","state","config","lastTime","time","deltaTime","c","damping","m","mass","k","stiffness","v0","velocity","x0","toValue","position","zeta","omega0","omega1","t","sin1","cos1","underDampedEnvelope","underDampedFrag1","underDampedPosition","underDampedVelocity","criticallyDampedEnvelope","criticallyDampedPosition","criticallyDampedVelocity","prevPosition","AnimatedValue","isOvershooting","overshootClamping","isVelocity","restSpeedThreshold","isDisplacement","restDisplacementThreshold","finished","procSpring"],"mappings":"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","sourcesContent":["import {\n cond,\n sub,\n divide,\n multiply,\n sqrt,\n add,\n block,\n set,\n exp,\n sin,\n cos,\n eq,\n or,\n neq,\n and,\n lessThan,\n greaterThan,\n proc,\n min,\n abs,\n} from '../base';\nimport AnimatedValue from '../core/InternalAnimatedValue';\n\nconst MAX_STEPS_MS = 64;\n\nfunction spring(clock, state, config) {\n const lastTime = cond(state.time, state.time, clock);\n\n const deltaTime = min(sub(clock, lastTime), MAX_STEPS_MS);\n\n const c = config.damping;\n const m = config.mass;\n const k = config.stiffness;\n\n const v0 = multiply(-1, state.velocity);\n const x0 = sub(config.toValue, state.position);\n\n const zeta = divide(c, multiply(2, sqrt(multiply(k, m)))); // damping ratio\n const omega0 = sqrt(divide(k, m)); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = multiply(omega0, sqrt(sub(1, multiply(zeta, zeta)))); // exponential decay\n\n const t = divide(deltaTime, 1000); // in seconds\n\n const sin1 = sin(multiply(omega1, t));\n const cos1 = cos(multiply(omega1, t));\n\n // under damped\n const underDampedEnvelope = exp(multiply(-1, zeta, omega0, t));\n const underDampedFrag1 = multiply(\n underDampedEnvelope,\n add(\n multiply(sin1, divide(add(v0, multiply(zeta, omega0, x0)), omega1)),\n multiply(x0, cos1)\n )\n );\n const underDampedPosition = sub(config.toValue, underDampedFrag1);\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity = sub(\n multiply(zeta, omega0, underDampedFrag1),\n multiply(\n underDampedEnvelope,\n sub(\n multiply(cos1, add(v0, multiply(zeta, omega0, x0))),\n multiply(omega1, x0, sin1)\n )\n )\n );\n\n // critically damped\n const criticallyDampedEnvelope = exp(multiply(-1, omega0, t));\n const criticallyDampedPosition = sub(\n config.toValue,\n multiply(\n criticallyDampedEnvelope,\n add(x0, multiply(add(v0, multiply(omega0, x0)), t))\n )\n );\n const criticallyDampedVelocity = multiply(\n criticallyDampedEnvelope,\n add(\n multiply(v0, sub(multiply(t, omega0), 1)),\n multiply(t, x0, omega0, omega0)\n )\n );\n\n // conditions for stopping the spring animations\n const prevPosition = state.prevPosition\n ? state.prevPosition\n : new AnimatedValue(0);\n\n const isOvershooting = cond(\n and(config.overshootClamping, neq(config.stiffness, 0)),\n cond(\n lessThan(prevPosition, config.toValue),\n greaterThan(state.position, config.toValue),\n lessThan(state.position, config.toValue)\n )\n );\n const isVelocity = lessThan(abs(state.velocity), config.restSpeedThreshold);\n const isDisplacement = or(\n eq(config.stiffness, 0),\n lessThan(\n abs(sub(config.toValue, state.position)),\n config.restDisplacementThreshold\n )\n );\n\n return block([\n set(prevPosition, state.position),\n cond(\n lessThan(zeta, 1),\n [\n set(state.position, underDampedPosition),\n set(state.velocity, underDampedVelocity),\n ],\n [\n set(state.position, criticallyDampedPosition),\n set(state.velocity, criticallyDampedVelocity),\n ]\n ),\n set(state.time, clock),\n cond(or(isOvershooting, and(isVelocity, isDisplacement)), [\n cond(neq(config.stiffness, 0), [\n set(state.velocity, 0),\n set(state.position, config.toValue),\n ]),\n set(state.finished, 1),\n ]),\n ]);\n}\n\nconst procSpring = proc(\n (\n finished,\n velocity,\n position,\n time,\n prevPosition,\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restSpeedThreshold,\n restDisplacementThreshold,\n clock\n ) =>\n spring(\n clock,\n {\n finished,\n velocity,\n position,\n time,\n // @ts-ignore\n prevPosition,\n },\n {\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restDisplacementThreshold,\n restSpeedThreshold,\n }\n )\n);\n\nexport default (\n clock,\n {\n finished,\n velocity,\n position,\n time,\n // @ts-ignore\n prevPosition,\n },\n {\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restDisplacementThreshold,\n restSpeedThreshold,\n }\n) =>\n procSpring(\n finished,\n velocity,\n position,\n time,\n prevPosition,\n toValue,\n damping,\n mass,\n stiffness,\n overshootClamping,\n restSpeedThreshold,\n restDisplacementThreshold,\n clock\n );\n"]} |