@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
61 lines • 5.33 kB
JavaScript
import { tgdEasingFunctionLinear } from "../easing-function/index.js";
/**
* Create an animation which is the chain of `animations`.
*/
export function tgdAnimChain(animations, options = {}) {
if (animations.length === 0) {
return {
action() { },
duration: 0,
};
}
const { intervals, duration } = computeIntervals(animations);
let previousAnimation = null;
let previousName = "???";
return Object.assign(Object.assign({}, options), { duration,
onEnd() {
var _a, _b;
(_a = previousAnimation === null || previousAnimation === void 0 ? void 0 : previousAnimation.onEnd) === null || _a === void 0 ? void 0 : _a.call(previousAnimation);
(_b = options.onEnd) === null || _b === void 0 ? void 0 : _b.call(options);
},
action(alpha) {
var _a, _b, _c;
const t = alpha * duration;
for (const { animation, begin, end } of intervals) {
if (t >= begin && t <= end) {
if (previousAnimation && previousAnimation !== animation) {
(_a = previousAnimation.onEnd) === null || _a === void 0 ? void 0 : _a.call(previousAnimation);
}
previousAnimation = animation;
const intervalAlpha = computeIntervalAlpha(t, begin, end, animation.delay);
if (intervalAlpha < 0 || intervalAlpha > 1)
return;
if (previousName !== animation.name) {
previousName = (_b = animation.name) !== null && _b !== void 0 ? _b : "";
}
const easingFunction = (_c = animation.easingFunction) !== null && _c !== void 0 ? _c : tgdEasingFunctionLinear;
animation.action(easingFunction(intervalAlpha));
return;
}
}
} });
}
function computeIntervals(animations) {
var _a;
const intervals = [];
let begin = 0;
let end = 0;
for (const animation of animations) {
const duration = animation.duration + ((_a = animation.delay) !== null && _a !== void 0 ? _a : 0);
end = begin + duration;
intervals.push({ animation, begin, end });
begin += duration;
}
return { intervals, duration: end };
}
function computeIntervalAlpha(t, begin, end, delay = 0) {
const actualBegin = begin + delay;
const duration = end - actualBegin;
return (t - actualBegin) / duration;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYW5pbWF0aW9uL2NoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRTVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDeEIsVUFBMEIsRUFDMUIsVUFLSyxFQUFFO0lBRVAsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU87WUFDSCxNQUFNLEtBQUksQ0FBQztZQUNYLFFBQVEsRUFBRSxDQUFDO1NBQ2QsQ0FBQTtJQUNMLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVELElBQUksaUJBQWlCLEdBQXdCLElBQUksQ0FBQTtJQUNqRCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7SUFDeEIsdUNBQ08sT0FBTyxLQUNWLFFBQVE7UUFDUixLQUFLOztZQUNELE1BQUEsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsS0FBSyxpRUFBSSxDQUFBO1lBQzVCLE1BQUEsT0FBTyxDQUFDLEtBQUssdURBQUksQ0FBQTtRQUNyQixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQWE7O1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUE7WUFDMUIsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdkQsTUFBQSxpQkFBaUIsQ0FBQyxLQUFLLGlFQUFJLENBQUE7b0JBQy9CLENBQUM7b0JBQ0QsaUJBQWlCLEdBQUcsU0FBUyxDQUFBO29CQUM3QixNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FDdEMsQ0FBQyxFQUNELEtBQUssRUFDTCxHQUFHLEVBQ0gsU0FBUyxDQUFDLEtBQUssQ0FDbEIsQ0FBQTtvQkFDRCxJQUFJLGFBQWEsR0FBRyxDQUFDLElBQUksYUFBYSxHQUFHLENBQUM7d0JBQUUsT0FBTTtvQkFFbEQsSUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNsQyxZQUFZLEdBQUcsTUFBQSxTQUFTLENBQUMsSUFBSSxtQ0FBSSxFQUFFLENBQUE7b0JBQ3ZDLENBQUM7b0JBQ0QsTUFBTSxjQUFjLEdBQ2hCLE1BQUEsU0FBUyxDQUFDLGNBQWMsbUNBQUksdUJBQXVCLENBQUE7b0JBQ3ZELFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7b0JBQy9DLE9BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLElBQ0o7QUFDTCxDQUFDO0FBUUQsU0FBUyxnQkFBZ0IsQ0FBQyxVQUEwQjs7SUFDaEQsTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFBO0lBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUNYLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLE1BQUEsU0FBUyxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUQsR0FBRyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUE7UUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUN6QyxLQUFLLElBQUksUUFBUSxDQUFBO0lBQ3JCLENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FDekIsQ0FBUyxFQUNULEtBQWEsRUFDYixHQUFXLEVBQ1gsS0FBSyxHQUFHLENBQUM7SUFFVCxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUE7SUFDbEMsT0FBTyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUE7QUFDdkMsQ0FBQyJ9