Timer.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. export class Timer {
  2. callback: Function | null = null;
  3. private _elapsedTime: number = 0;
  4. get elapsedTime(): number {
  5. return this._elapsedTime;
  6. }
  7. private _step: number = -1;
  8. /** 触发间隔时间(秒) */
  9. get step(): number {
  10. return this._step;
  11. }
  12. set step(step: number) {
  13. this._step = step; // 每次修改时间
  14. this._elapsedTime = 0; // 逝去时间
  15. }
  16. get coundown():number{
  17. return this._step-this._elapsedTime;
  18. }
  19. get progress(): number {
  20. return this._elapsedTime / this._step;
  21. }
  22. constructor(step: number = 0) {
  23. this.step = step;
  24. }
  25. /**
  26. * 序列化(数据库存储)
  27. */
  28. public serialize(): any {
  29. let data = {
  30. "step": this._step,
  31. "elapsed":this._elapsedTime,
  32. };
  33. return data;
  34. }
  35. /**
  36. * 反序列化
  37. */
  38. public unserialize(data: any): void {
  39. if(!data)return;
  40. this._step = data.step;
  41. this._elapsedTime = data.elapsed;
  42. }
  43. update(dt: number):boolean {
  44. if (this.step <= 0) return false;
  45. this._elapsedTime += dt;
  46. if (this._elapsedTime >= this._step) {
  47. this._elapsedTime -= this._step;
  48. this.callback?.call(this);
  49. return true;
  50. }
  51. return false;
  52. }
  53. reset() {
  54. this._elapsedTime = 0;
  55. }
  56. stop() {
  57. this._elapsedTime = 0;
  58. this.step = -1;
  59. }
  60. }