UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

61 lines 4.79 kB
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==