import { IEffect, TEffectParams } from "types"; import { InheritClass } from "./InheritClass"; import { Package } from "./Package"; import { _methods_, _protected_code_ } from "./introspection"; import { ClassFactory } from "./ClassFactory"; class Effect extends InheritClass implements IEffect { // eslint-disable-next-line no-unused-vars done(...args: any[]): any { throw new Error("Method not implemented."); }; // eslint-disable-next-line no-unused-vars apply(...args: any[]): void { throw new Error("Method not implemented."); } duration = 1000; animate({ timing, draw, duration }: TEffectParams): void { const _self: this = this; const start = performance.now(); requestAnimationFrame(function animate(time) { // timeFraction goes from 0 to 1 let timeFraction = (time - start) / duration; if (timeFraction > 1) timeFraction = 1; // calculate the current animation state const progress = timing(timeFraction); draw(Math.round(progress * 100)); // draw it if (timeFraction < 1) { requestAnimationFrame(animate); } else { // if this is an object with a done method if (typeof _self !== "undefined" && _self !== null && Object.hasOwn(_self, "done") && (typeof _self.done).toLowerCase() === "function") { _self.done.call(_self); } } }); } } Package("com.qcobjects.effects.base", [ Effect ]); (_methods_)(ClassFactory("Effect")).map((__c__): any => { (_protected_code_)(__c__); return __c__; }); export { Effect };