Timer.ts 1.5 KB

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