class Timer { private _elapsedTime: number = 0; get elapsedTime(): number { return this._elapsedTime; } private _step: number = -1; /** 触发间隔时间(秒) */ get step(): number { return this._step; } set step(step: number) { this._step = step; // 每次修改时间 this._elapsedTime = 0; // 逝去时间 } get coundown(): number { return this._step - this._elapsedTime; } get progress(): number { return this._elapsedTime / this._step; } constructor(step: number = 0) { this.step = step; } /** * 序列化(数据库存储) */ public serialize(): any { let data = { "step": this._step, "elapsed": this._elapsedTime, }; return data; } /** * 反序列化 */ public unserialize(data: any): void { if (!data) return; this._step = data.step; this._elapsedTime = data.elapsed; } update(dt: number): boolean { if (this.step <= 0) return false; this._elapsedTime += dt; if (this._elapsedTime >= this._step) { this._elapsedTime -= this._step; return true; } return false; } reset() { this._elapsedTime = 0; } stop() { this._elapsedTime = 0; this.step = -1; } } export default function get_new_timer(step: number): Timer { return new Timer(step); }