just-animate
Version:
_Making Animation Simple_
25 lines (24 loc) • 818 B
JavaScript
import { loopOff } from '../core/timeloop';
import { S_PLAYING, _ } from '../utils/constants';
import { inRange, minMax, flr } from '../utils/math';
import { all } from '../utils/lists';
import { setup } from './setup';
import { UPDATE } from '../actions';
export const update = (model, _data, ctx) => {
if (model.players === _) {
setup(model);
}
const isPlaying = model.state === S_PLAYING;
const time = model.time;
if (!isPlaying) {
loopOff(model.id);
}
all(model.players, player => {
const from = player.from;
const to = player.to;
const isActive = isPlaying && inRange(flr(time), from, to);
const offset = minMax((time - from) / (to - from), 0, 1);
player.update(offset, model.rate, isActive);
});
ctx.trigger(UPDATE);
};