UNPKG

create-expo-cljs-app

Version:

Create a react native application with Expo and Shadow-CLJS!

55 lines (48 loc) 1.28 kB
import { cond, sub, pow, divide, multiply, add, block, set, lessThan, proc, abs, } from '../base'; const VELOCITY_EPS = 5; function decay(clock, state, config) { const lastTime = cond(state.time, state.time, clock); const deltaTime = sub(clock, lastTime); // v0 = v / 1000 // v = v0 * powf(deceleration, dt); // v = v * 1000; // x0 = x; // x = x0 + v0 * deceleration * (1 - powf(deceleration, dt)) / (1 - deceleration) const kv = pow(config.deceleration, deltaTime); const kx = divide( multiply(config.deceleration, sub(1, kv)), sub(1, config.deceleration) ); const v0 = divide(state.velocity, 1000); const v = multiply(v0, kv, 1000); const x = add(state.position, multiply(v0, kx)); return block([ set(state.position, x), set(state.velocity, v), set(state.time, clock), cond(lessThan(abs(v), VELOCITY_EPS), set(state.finished, 1)), ]); } const procDecay = proc( (clock, time, velocity, position, finished, deceleration) => decay(clock, { time, velocity, position, finished }, { deceleration }) ); export default function decayAnimation( clock, { time, velocity, position, finished }, { deceleration } ) { return procDecay(clock, time, velocity, position, finished, deceleration); }