@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
53 lines • 4.11 kB
JavaScript
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==