UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

61 lines 5.33 kB
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