@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
61 lines • 4.79 kB
JavaScript
export class TgdManagerAnimation {
constructor() {
this.animations = new Map();
}
schedule(animation) {
var _a;
if (!animation.name)
animation.name = `TgdAnimation#${TgdManagerAnimation.counter++}`;
const { action, duration, easingFunction, repeat } = animation;
this.animations.set(animation, {
start: -1,
delay: (_a = animation.delay) !== null && _a !== void 0 ? _a : 0,
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 + anim.delay;
}
const relativeTime = time - anim.start;
if (relativeTime < 0)
continue;
const t = Math.min(1, anim.inverseDuration * relativeTime);
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;
}
}
TgdManagerAnimation.counter = 1;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dC9hbmltYXRpb24vYW5pbWF0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxPQUFPLG1CQUFtQjtJQUFoQztRQUdxQixlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUE7SUF1RHBFLENBQUM7SUFyREcsUUFBUSxDQUFDLFNBQXVCOztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7WUFDZixTQUFTLENBQUMsSUFBSSxHQUFHLGdCQUFnQixtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFBO1FBQ3BFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUE7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQzNCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDVCxLQUFLLEVBQUUsTUFBQSxTQUFTLENBQUMsS0FBSyxtQ0FBSSxDQUFDO1lBQzNCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGVBQWUsRUFBRSxDQUFDLEdBQUcsUUFBUTtZQUM3QixNQUFNLEVBQUUsY0FBYztnQkFDbEIsQ0FBQyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsTUFBTTtZQUNaLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLENBQUM7WUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztTQUN6QixDQUFDLENBQUE7UUFDRixPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQXVCO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTs7UUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUU1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtZQUNsQyxDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7WUFDdEMsSUFBSSxZQUFZLEdBQUcsQ0FBQztnQkFBRSxTQUFRO1lBRTlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUE7WUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNkLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUM7b0JBQ0QsTUFBQSxJQUFJLENBQUMsS0FBSyxvREFBSSxDQUFBO2dCQUNsQixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQTtvQkFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDeEIsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFBO1lBQy9CLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDakIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7O0FBeERjLDJCQUFPLEdBQUcsQ0FBQyxBQUFKLENBQUkifQ==