UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

53 lines 4.11 kB
export class TgdManagerAnimation { constructor() { this.animations = new Map(); } schedule(animation) { const { action, duration, easingFunction, repeat } = animation; this.animations.set(animation, { start: -1, duration: duration, inverseDuration: 1 / duration, action: easingFunction ? (alpha) => action(easingFunction(alpha)) : action, loop: 1, repeat: repeat !== null && repeat !== void 0 ? repeat : 1, cancel: () => this.cancel(animation), onEnd: animation.onEnd, }); return animation; } cancel(animation) { this.animations.delete(animation); } paint(time) { var _a; if (this.animations.size === 0) return false; for (const anim of this.animations.values()) { if (anim.start < 0) { // Initialize animation. anim.start = time; } const t = Math.min(1, anim.inverseDuration * (time - anim.start)); anim.action(t); while (time > anim.start + anim.duration) { try { (_a = anim.onEnd) === null || _a === void 0 ? void 0 : _a.call(anim); } catch (error) { console.error("Animation.onEnd() failed for", anim); console.error(error); } anim.loop++; anim.start += anim.duration; } if (anim.loop > anim.repeat) { anim.cancel(); } } return true; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dC9hbmltYXRpb24vYW5pbWF0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxPQUFPLG1CQUFtQjtJQUFoQztRQUNxQixlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUE7SUFpRHBFLENBQUM7SUEvQ0csUUFBUSxDQUFDLFNBQXVCO1FBQzVCLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUE7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQzNCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDVCxRQUFRLEVBQUUsUUFBUTtZQUNsQixlQUFlLEVBQUUsQ0FBQyxHQUFHLFFBQVE7WUFDN0IsTUFBTSxFQUFFLGNBQWM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLE1BQU07WUFDWixJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sRUFBRSxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxDQUFDO1lBQ25CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7U0FDekIsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUF1QjtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVk7O1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFNUMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqQix3QkFBd0I7Z0JBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1lBQ3JCLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDZCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDO29CQUNELE1BQUEsSUFBSSxDQUFDLEtBQUssb0RBQUksQ0FBQTtnQkFDbEIsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUE7b0JBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ3hCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUNYLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO1lBQ2pCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0NBQ0oifQ==